音视频协议篇
音视频协议篇
该文记录音视频入门学习。
音视频协议篇
1. 介绍
如下罗列了部分流媒体相关协议:
RTP
(Real-time Transport Protocol),实时传输协议。RTCP
(Real-time Transport Control Protocol),实时传输控制协议。RTSP
(Real Time Streaming Protocol),实时流协议。RTMP
(Real Time Messaging Protocol),实时消息传输协议。HLS
(HTTP Live Streaming),苹果公司提出的基于HTTP的流媒体网络传输协议。HTTP-FLV
,将RTMP等负载信息携带在HTTP协议之上的码流传输协议。
2. RPT & RTCP & RTSP1
2.1. RTP、RTCP、RTSP的关系
RTP
负责多媒体的传输,RTCP
配合 RTP
做控制和流量统计, RTSP
负责建立和控制会话,下图更直观的的描述了三者的关系:
RTP
和RTCP
为姐妹协议,通常情况下RTP
使用一个偶数UDP port
,而RTCP
则使用RTP
的下一个port
,也就是一个奇数port
RTP
用于传输实时流媒体数据RTCP
用于控制实时流媒体的质量RTSP
为控制RTP
传输的协议(暂停发包、开始发包、结束发包等),即控制实时流媒体的播放RTP
可以单独工作(它传输实际播放数据),也可以搭配RTCP
、RTSP
工作RTCP
、RTSP
不能单独工作(它俩不传输实际播放数据),RTSP
需要和RTP
、RTCP
配合使用
2.2. RTP
RTP
(Real-time Transport Protocol,实时传输协议)。
RTP
建立在UDP
协议上;RTP
不确保网络底层的可靠性,不提供按时发送机制或其他服务质量(QoS)保证;RTP
不保证传送或防止无序传送;RTP
提供时间标志,序列号以及其他能够保证在实时数据传输时处理时间的方法;
V
:RTP协议的版本号,占2位,当前协议版本号为2P
:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。X
:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头CC
:CSRC计数器,占4位,指示CSRC 标识符的个数M
:标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。PT
:有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。sequence number
:序列号,16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。timestamp
:时间戳,32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。SSRC
:同步源标识符,32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。CSRC
:贡献源列表,0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份
2.3. RTCP2
RTCP
(Real-time Transport Control Protocol,实时传输控制协议)。
RTP
和RTCP
是一起使用的;RTCP
的主要功能是为RTP
所提供的服务质量提供反馈,RTCP
收集相关媒体连接的统计信息,例如:传输字节数,传输分组数,丢失分组数,时延抖动,单向和双向网络延迟等等;- 网络应用程序可以利用
RTCP
所提供的信息试图提高服务质量,比如限制信息流量或改用压缩比较小的编解码器; RTCP
本身不提供数据加密或身份认证,其伴生协议SRTCP
(安全实时传输控制协议)则可用于此类用途;
2.4. RTSP
RTSP
(Real Time Streaming Protocol,实时流协议)。
RTSP
是一种双向实时数据传输协议;RTSP
在体系结构上位于RTP
和RTCP
之上,它使用TCP
或RTP
完成数据传输;RTSP
主要用来控制具有实时特性的数据发送,比如:对流媒体提供诸如播放、暂停、快进等操作;RTSP
负责定义具体的控制消息、操作方法、状态码等,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务;
3. RTMP & HLS
3.1. RTMP
RTMP
(Real Time Messaging Protocol,实时消息传输协议)。
该协议基于 TCP
,是一个协议族,包括 RTMP
基本协议及RTMPT/RTMPS/RTMPE
等多种变种。
- 应用层协议,依靠
TCP
保证可靠传输。 - 默认端口:
1953
,可能被防火墙屏蔽。 - 在流媒体/交互服务器之间进行音视频和数据通信。
3.2. HLS
HLS
(HTTP Live Streaming)是一个由苹果公司提出的基于 HTTP
的流媒体网络传输协议。
它的工作原理是把整个流分成一个个小的基于 HTTP
的 TS
文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。
HLS
请求基本的 HTTP
报文,HLS
可以穿过任何允许 HTTP
数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
- 视频的封装格式是
TS
。 - 音视频采用
H264
编码和AAC
编码。 - 除了
TS
视频文件本身,还定义了用来控制播放的m3u8
索引文件。
4. 对比RTMP,HLS和HTTP-FLV
在开始之前,我们先要明确一个问题,根据应用场景不同,流媒体协议分为:
- 推流协议
- 拉流播放协议
RTMP
可以用在双端,HLS
用在拉流端,HTTP-FLV
用在拉流端。
RTMP | HTTP-FLV | HLS | |
---|---|---|---|
传输协议 | TCP | HTTP | HTTP |
视频封装格式 | flv | flv | ts |
延时 | 1-3秒 | 1-3秒 | 5-20秒 |
Web支持 | H5需要使用插件 | H5中需要使用插件 | 支持H5 |
数据 | 连续流 | 连续流 | 切片文件 |
4.1. RTMP & HTTP-FLV
- 这两个协议实际上传输的数据是一样的,数据都是
flv
文件的tag
。 RTMP
:实时播放服务器的FLV
文件或服务器转发的FLV
数据,本地无FLV
缓存文件,FLV
保密性好。HTTP-FLV
:将FLV
下载到本地再播放,FLV
保密性不好。
4.2. HLS & RTMP
RTMP
:采用1935
端口,而非HTTP80
端口,在某些网络环境下可能被屏蔽。RTMP
:是一种有状态协议,需要为每一个播放视频流的客户端维护状态,服务器平滑扩展难度大。HLS
:基于无状态HTTP
协议,客户端只需要按顺序使用下载的TS
文件就可,负载均衡如同普通的HTTP
文件服务器负载均衡一样。
4.3. HTTP-FLV
HTTP-FLV
结合了RTMP
和HLS
的优点,易用(HTTP协议)低延时(flv)
4.4. 为什么 RTPM 比 HLS 快
HLS
拉流:服务器音视频数据切片生成TS
文件HLS
拉流:客户端必须等待服务端至少生成一个TS
文件,通常下载完两个媒体文件后才能保证不同分段音视频间的无缝连接。HLS
一直在等切片数据,RTMP
不需要切片
参考
本文由作者按照 CC BY 4.0 进行授权