音视频——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