音视频协议篇
音视频协议篇
该文记录音视频入门学习。
音视频协议篇
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,也就是一个奇数portRTP用于传输实时流媒体数据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 进行授权


