文章

音视频协议篇

音视频协议篇

该文记录音视频入门学习。

音视频协议篇

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 负责建立和控制会话,下图更直观的的描述了三者的关系:

img

  • RTPRTCP 为姐妹协议,通常情况下 RTP 使用一个偶数 UDP port ,而 RTCP 则使用 RTP 的下一个 port,也就是一个奇数 port
  • RTP 用于传输实时流媒体数据
  • RTCP 用于控制实时流媒体的质量
  • RTSP 为控制 RTP 传输的协议(暂停发包、开始发包、结束发包等),即控制实时流媒体的播放
  • RTP 可以单独工作(它传输实际播放数据),也可以搭配 RTCPRTSP 工作
  • RTCPRTSP 不能单独工作(它俩不传输实际播放数据),RTSP需要和 RTPRTCP 配合使用

2.2. RTP

RTP (Real-time Transport Protocol,实时传输协议)。

  • RTP 建立在 UDP 协议上;
  • RTP 不确保网络底层的可靠性,不提供按时发送机制或其他服务质量(QoS)保证;
  • RTP 不保证传送或防止无序传送;
  • RTP 提供时间标志,序列号以及其他能够保证在实时数据传输时处理时间的方法;

img

  • V:RTP协议的版本号,占2位,当前协议版本号为2
  • P:填充标志,占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,实时传输控制协议)。

  • RTPRTCP 是一起使用的;
  • RTCP 的主要功能是为 RTP 所提供的服务质量提供反馈,RTCP 收集相关媒体连接的统计信息,例如:传输字节数,传输分组数,丢失分组数,时延抖动,单向和双向网络延迟等等;
  • 网络应用程序可以利用 RTCP 所提供的信息试图提高服务质量,比如限制信息流量或改用压缩比较小的编解码器;
  • RTCP 本身不提供数据加密或身份认证,其伴生协议 SRTCP(安全实时传输控制协议)则可用于此类用途;

img

2.4. RTSP

RTSP (Real Time Streaming Protocol,实时流协议)。

  • RTSP 是一种双向实时数据传输协议;
  • RTSP 在体系结构上位于 RTPRTCP 之上,它使用 TCPRTP 完成数据传输;
  • 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 的流媒体网络传输协议。

它的工作原理是把整个流分成一个个小的基于 HTTPTS 文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

HLS 请求基本的 HTTP 报文,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

  • 视频的封装格式是 TS
  • 音视频采用 H264 编码和 AAC 编码。
  • 除了 TS 视频文件本身,还定义了用来控制播放的 m3u8 索引文件。

4. 对比RTMP,HLS和HTTP-FLV

在开始之前,我们先要明确一个问题,根据应用场景不同,流媒体协议分为:

  • 推流协议
  • 拉流播放协议

RTMP 可以用在双端,HLS 用在拉流端,HTTP-FLV 用在拉流端。

 RTMPHTTP-FLVHLS
传输协议TCPHTTPHTTP
视频封装格式flvflvts
延时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 结合了 RTMPHLS 的优点,易用(HTTP协议)低延时(flv)

4.4. 为什么 RTPM 比 HLS 快

  • HLS 拉流:服务器音视频数据切片生成 TS 文件
  • HLS 拉流:客户端必须等待服务端至少生成一个 TS 文件,通常下载完两个媒体文件后才能保证不同分段音视频间的无缝连接。
  • HLS 一直在等切片数据,RTMP 不需要切片

参考

本文由作者按照 CC BY 4.0 进行授权