以前,当涉及到直播的低延迟时,通常会避免使用TCP协议,因为错误检查、数据包重发、三次握手、"慢启动 "和防止信道拥塞(TCP慢启动和拥塞避免阶段),延迟会增加 。 同时,即使信道很宽,传输开始前的延迟也可能达到RTT的五倍,而吞吐量的增加对延迟的影响非常小 。
另外,使用TCP广播的应用程序对协议本身没有任何控制(它的超时、重新广播的窗口大小),因为TCP传输是作为一个单一的连续流实现的,在错误发生之前,应用程序可能会无限期地 "冻结" 。 而且高层协议没有灵活配置TCP,以尽量减少广播问题的能力 。
同时,有些协议即使在开放的网络和长距离的情况下也能通过UDP有效工作 。
下面让我们来考虑和比较各种协议的实现 。 在基于TCP的协议和数据传输格式中,将会涉及RTMP、HLS和CMAF,而在基于UDP的协议和数据传输格式中,将会涉及WebRTC和SRT 。
RTMP
RTMP是Macromedia公司的专有协议(现在归Adobe公司所有),在基于Flash的应用程序流行时非常流行 。 它有几个品种,支持TLS/SSL加密,甚至还有基于UDP的变种,即RTFMP(实时媒体流协议,用于点对点连接) 。 RTMP将数据流分割成片段,其大小可以动态变化 。 在通道内,与音频和视频有关的数据包可以交错和复用 。
图2. RTMP广播实现用例
RTMP会构建几个虚拟通道,在这些通道上传输音频、视频、元数据等 。 大多数CDN不再支持RTMP作为向终端客户分配流量的协议 。 然而,Nginx有自己的RTMP模块,支持普通的RTMP协议,它运行在TCP之上,使用默认的1935端口 。 Nginx可以作为一个RTMP服务器,分发它从RTMP流媒体接收的内容 。 另外,RTMP仍然是向CDN交付流量的流行协议,但在未来,流量将使用其他协议进行传输 。
目前,Flash技术已经过时,且不受支持:浏览器或是减少对它的支持,或是完全禁止使用 。 RTMP不支持HTML5,在浏览器中也难以使用(播放需要通过Adobe Flash插件) 。 为了绕过防火墙,他们使用RTMPT(封装到HTTP请求中,并使用标准的80/443而不是1935端口),但这大大影响了延迟和冗余(根据各种估计,RTT和整体延迟增加30%) 。 尽管如此,RTMP仍然很流行,例如,在YouTube上的广播或在社交媒体上(Facebook的RTMPS) 。
RTMP的主要缺点是缺乏对HEVC/VP9/AV1编码器的支持,以及只允许两个音轨的限制 。 此外,RTMP在数据包头中不包含时间戳 。 RTMP只包含根据帧率计算的标签,因此解码器并不确切知道何时解码这个流 。 这就需要一个接收组件均匀地生成用于解码的样本,因此缓冲区必须按数据包抖动的大小来增加 。
RTMP的另一个问题是重新发送丢失的TCP数据包,这在前文已经描述过 。 为了保持较低的回传流量,确认收到(ACK)并不直接到发件端 。 只有在收到数据包链后,才会向广播方发送ACKs或NACKs的确认信息 。
根据各种估计,使用RTMP进行广播,通过完整的编码路径(RTMP编码器→RTMP服务器→RTMP客户端)的延迟至少是两秒 。
CMAF
CMAF(Common Media Application Format,通用媒体应用格式)是由苹果和微软邀请MPEG开发的协议,用于在HTTP上进行自适应广播(具有根据整个网络带宽速率变化而变化的自适应比特率) 。 通常情况下,苹果公司的HTTP直播(HLS)使用MPEG TS流,而MPEG DASH使用片段式的MP4 。 2017年7月,CMAF标准被发布 。 在CMAF中,片段式的MP4片段(ISOBMFF)通过HTTP传输,同一内容有两个不同的播放列表,用于特定的播放器:iOS(HLS)或Android/Microsoft(MPEG DASH) 。
推荐阅读
- 正规的请假条范文 请假条格式怎么写
- 转正申请表个人总结 转正申请书怎么写
- 青梅酱苦怎么挽救
- 红薯保存方法
- 秋葵保存方法
- 鲜笋怎么保存法
- 如何申请开通微粒贷功能 怎么申请开通微粒贷
- 乐天集团现在怎么样了 乐天集团
- 动物园的动物是怎么来的
- 电脑一直在正在启动windows怎么办