音视频——RTSP流媒体传输技术介绍及抓包解析

流式传输

流媒体技术:将声音影像向用户计算机 连续、不间断的进行传送,延时小。

抓包

route add 添加到指定网络的路由规则

route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]

route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]

RTP协议

都是基于TCP/IP 协议体系中的应用层协议
RTP 是由实时传输协议RTP,实时传输控制协议RTCP 组成

基于多播或单播为用户提供连续媒体数据的实时传输服务,RTCP是控制部分,负责实时监控数据传输质量,为系统提供阻塞控制和流控制

由包头Header和载荷Payload两部分组成

RTMP :实时消息传输协议,基于tcp,主要用于flash平台和支持RTMP协议的流媒体服务器之间进行音视频和数据通信。(基于FLASH,无法用于IOS)(主流流媒体传输协议)
HLS :HTTP直播流技术,主要用于PC和Aplple中端,包括m3u8的索引文件,TS媒体分片文件,key加密串文件。
RTSP:实时流传输协议,基于UDP,用来传输音频、视频的多媒体串流协议,定义了一对多应用程序,如何有效通过IP网络传送多媒体数据。

流媒体相关技术

1)智能流技术

自动检测网络状况,将音视频属性调整到最佳

2)分流技术

一般在直播中使用,发送服务器将媒体流发送到各地的多个接收服务器,客户端就近访问

3)缓存技术

数据采用环形链表结构,数据包先缓存到本地,应对网络延迟和抖动等问题

4)内容分发网络(CDN)技术

将用户请求的流媒体内容发布到距离用户最近的网络边缘

视频直播流程

直播模块分为 :视频录制端、视频播放端、视频服务器端
流程 :采集->处理->编码和封装->推流到服务器->服务器流分发->播放器流播放

服务器流分发:

负责直播流的发布和转播分发功能,例如Nginx服务

RTSP协议刨析

基本概念

RTSP实时流传输协议 (RFC2326标准)是基于文本 的协议,使用UTF-8 编码,行以CRLF中断(\r\n),是TCP/IP协议体系中的应用级协议

RTSP定义了一对多应用程序如何有效的通过IP网络传送多媒体数据,它位于RTP(数据传输)和RTCP(控制传输)之上,而流的内容,可以自行选择TCP或UDP,但它本身不发送连续流,只是充当多媒体服务器的网络远程控制

它的所有操作是通过服务器和客户端的消息应答机制完成的,客户机和服务器都可发送和回应请求。



HTTP和RTSP相比,HTTP请求由客户机发布,服务器做出响应,而使用RTSP时,客户机和服务器都可以发出请求,RTSP是双向的。

实时流媒体会话协议
SDP :会话描述协议

RTP:实时传输协议

一般使用UDP作为传输层
数据源 :现场数据以及存储数据

协议目的在于控制多数据(音频或视频流)发送连接,为发送数据选择通道,如UDP、TCP。

RTSP流程抓包分析

options

client->server:客户端向服务端发OPTIONS,请求可用的方法

server->client:服务端回复客户端,消息中包含当前可用的方法

describe

client->server:请求媒体描述文件,一般通过url请求,格式为sdp

server->client:回复sdp文件 ,告诉客户端服务器有哪些音视频流,有什么属性,如编码器信息,帧率

setup

client->server:发起建立连接请求,准备接收音视频数据。其中描述了相关的数据传输配置,如UCP还是TCP,指定RTP、RTCP端口,单播还是组播等

server->client:根据请求,确定连接的具体信息

RTP/AVP是UDP形式传送数据,若RTP/AVP/TCP,则代表是TCP形式。

(2条消息) RTSP协议之TCP/UDP问题_rtsp udp_dosthing的博客-CSDN博客

play

client->server:请求播放媒体

server->client:回复200OK,之后通过之前指定的端口开始发送数据

TEARDOWN

client->server:请求结束播放

server->client:回复200 OK,再断开连接

RTSP 除此之外,还有 PAUSE,SCALE,GET_PARAMETER,SET_PARAMETER 等参数。

重要概念

1)集合控制:客户端仅需发送一条播放或暂停消息,就可同时控制音频和视频流

2)实体Entity:作为请求或回应的有效负荷传输信息,由head和body组成

3)容器文件:容纳多个媒体流的文件,MP4 avi等

消息格式详解

RTSP请求消息 :由请求行、标题行中的各种标题域和主体实体组成

其中方法包括 OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN 等。

URL 是接接收方的地址,例如:rtsp://192.168.0.1/video.264。

RTSP 版本一般都是 RTSP/1.0。

每行后面的 CRLF 表示回车换行,需要接收端有相应的解析,最后一个消息头需要有两

个 CRLF。

消息体是可选的,有的请求消息并不带消息体

RTSP应答消息

其中 RTSP 版本一般都是 RTSP/1.0。

状态码是一个数值,用于表示请求消息的执行结果,比如 200 表示成功。

短语是与状态码对应的文本解释。

再具体可参考PDF

RTP/RTCP协议讲解

RTP(Real-time Transport Protocol)

针对多媒体数据流的传输层协议 ,经常和RTCP控制协议一起使用,典型应用建立在UDP协议之上,但也可以在TCP协议上 。它只保证实时数据传输,并不能提供可靠的传送机制,也不能提供流量控制阻塞控制(RTCP提供)。
虽然可靠性方面UDP不如TCP,但因为时延问题,RTP/RTCP/UDP用于音频/视频流媒体(UDP),而TCP用于数据和控制指令的传输



RTCP

RTCP工作机制

RTSP有独立传输的特性,在UDP的情况下前面表示客户端的接收 RTP 包的端口,后面表示客户端的接收 RTCP 包的端口,其中RTP端口必须是偶数,RTCP的端口必须是相邻的奇数。而TCP的情况下,采用同一个链路,则使用interleaved区分0表示 RTP 包,1 表示 RTCP 包

RTCP负责管理传输质量,在当前应用进程之间交换控制信息

在RTP会话期间,各参与者周期性发送一些RTCP包用来监听服务质量(含有已发送数据包数量、丢失数据包数量等统计资料)、交换信息,服务器利用这些信息动态改变传输速率等,和RTP结合,以有效的反馈和最小的开销使传输效率最佳化

RTCP数据报

在 RTCP 通信控制中,RTCP 协议的功能是通过不同的 RTCP 数据报来实现的,主要有如下几

种类型:

①SR:发送端报告,所谓发送端是指发出 RTP 数据报的应用程序或者终端,发送端同时也可

以是接收端。

②RR:接收端报告,所谓接收端是指仅接收但不发送 RTP 数据报的应用程序或者终端。

③SDES:源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电

话号码等,此外还具有向会话成员传达会话控制信息的功能。

④BYE:通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自

己将退出会话。

⑤APP:由应用程序自己定义,解决了 RTCP 的扩展性问题,并且为协议的实现者提供了很大

的灵活性。

常见问题

rtsp 可基于 rtp 之上,比如常见的视频流传输过程:视频压缩文件->rtp 打包->基于 udp的 rtsp 网络传输;

也可以不做成 rtp 包,直接基于 udp 传送,如视频压缩文件->基于 udp的 rtsp 网络传输

RTP over UDP 和 RTP over RTSP 有什么区别?

RTP over UDP 是 RTP 下层使用 udp 传输,

RTP over RTSP 是指的用 rtsp 协议建立会话,然后使用 RTP 协议传输数据

RTP over RTSP 是不是就是 RTP over TCP?

不是:RTP over RTSP 是指的用用 rtsp 协议建立会话,然后使用 RTP 协议传输数据;至于下面用 udp 还是 tcp 是不确定的

一般情况下一个点播需要 rtsp+rtp+rtcp 三个协议共同来实现

rtp 和 rtsp 协议是应用层的,tcp 和 udp 是传输层的,所以只能说 rtp over tcp/udp。

RTP,RTCP 数据和 RTSP 数据共享 TCP 数据通道,所以必须有一个标识来区别三种数据。

RTP 和 RTCP 数据会以$符号+1 个字节的通道编号+4 个字节的数据长度,共 6 个字节的前缀开始,RTSP 数据是没有前缀数据的。
RTP 数据和 RTCP 数据的区别在于第二个字节的通道编号,据观察 RTP 通道编号是偶数,RTCP通道编号是奇数
秒懂流媒体协议 RTMP 与 RTSP - 知乎 (zhihu.com) RTSP和RTMP的区别,后面总结下

https://blog.csdn.net/hanlunko2016/article/details/82730337

https://blog.csdn.net/acs713/article/details/19339707

相关推荐
hunandede2 小时前
FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码,AVPacket 重要函数,结构体成员学习
c++·ffmpeg·音视频
橘子味的茶二2 小时前
SDL读取PCM音频
ffmpeg·音视频·pcm
MediaTea14 小时前
Pr 视频过渡:沉浸式视频 - VR 色度泄漏
音视频·vr
LNTON羚通14 小时前
算法定制LiteAIServer摄像机实时接入分析平台烟火检测算法的主要功能
音视频·视频监控
EasyCVR20 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
冷凝女子1 天前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
安步当歌1 天前
【WebRTC】视频编码链路中各个类的简单分析——VideoStreamEncoder
音视频·webrtc·视频编解码·video-codec
顾北川_野1 天前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
顶呱呱程序1 天前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
EasyCVR1 天前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频