低延迟协议影音探索
用户对服务的期望在不断攀升,并逐渐出现了不满情绪。由于有了youtube和netflix这样的视频服务,我们都希望在观看点播视频时获得超快的下载时间和流畅的播放体验。可能不太明显的是,无论我们是否意识到,这种期望都正在慢慢地向实时音频通信和直播应用转移。
在api.video,我们致力于向用户交付最佳开发和观看体验。很自然地,我们花费了大量时间思考和跟进视频协议的发展。每个视频传输协议都有其优点和缺点,并适用于不同的应用场景。
在本文中,我们总结了四种主要的低延迟协议,探讨它们的优点和缺点,并给出了我们对于这些协议未来发展的评论。下面是我们将深入讨论的四种协议:
webrtc
ll-hls
ll-dash
hesp
webrtc
webrtc协议支持音频和视频流的实时、双向通信。它主要用于音频和视频的推流和分发,其端到端延迟在300ms~600ms之间(取决于网络质量和用户之间的距离)。webrtc真正获得成功是在2011年,当时谷歌收购了global ipsolutions(该公司最先开发了webrtc),并为这个项目在资金和开发人力上提供了大量的支持。
10年之后,webrtc已成为web上的实时视频通信标准。通过w3c和ietf维护的javascript api就可以访问webrtc组件,因此用户无需安装第三方工具即可直接通过web浏览器进行直播。
理论上,webrtc可以通过连接两个浏览器客户端(p2p)建立视频会议系统。然而,现实中的网络架构(互联网、公司和本地网络)会使事情变得非常复杂。
在互联网迷宫中找到自己的出路
有些时候,我们的终端并不是直接连接互联网,而是要经过几个网络层,比如nat、防火墙或者代理。为了解决这些问题,webrtc允许你使用ice(interactiveconnectivity establishment,交互连接建立)协议,该协议可以帮助你找到让两台机器通信的最直接路径,并穿过不同的网络层。为此,需要stun/turn服务器来获取用户的外部地址并在无法直接连接时负责通信数据转发。在大部分的webrtc生产环境中,webrtc协议需要(除了它自身的多媒体服务器基础设施之外)一组stun / turn服务器支持高质量通信。
使问题变得更复杂
webrtc协议要求端与端之间所有通信数据必须加密(音频、视频和数据应用),因此它会内嵌一些安全协议填补使用udp协议时的空白。webrtc使用sdp(sessiondescription protocol,会话描述协议)显示p2p连接的一些属性,如交换的媒体类型及其相关编码器、传输网络和一些带宽信息。
这其中也涉及dtls(datagram transportlayer security,数据包传输层安全协议)、srtp(secure real-timetransport,安全实时传输协议)、sctp(stream controltransport protocol,流控制传输协议),其中dtls用于生成自签名证书来进行加密信息的协商(用于peer之间加密媒体数据以及应用数据的安全传输)。srtp用于音频和视频的加密传输。sctp用于应用数据的加密传输。
webrtc规模化的挑战
webrtc协议支持多种网络架构服务模型,每种架构对应一种特定的应用场景,而且每种架构都有自己的优劣势。本文我们不会深入讨论这些架构,但是请注意,sfu(selectiveforwarding unit,选择性转发单元)也许是目前webrtc应用中最流行的架构。
webrtc所面临的主要挑战来自大规模采用的可行性(节省成本的前提下)。我们并不是说webrtc无法在世界范围内被采用:几年以前它确实还处于规模化的早期阶段,但是一些优秀公司不懈努力地对架构进行重大的改进,已经在规模化应用方面有了很大进步。
由于webrtc是由多个协议组成的通信标准,所以工程师们必须学习和掌握每个协议,这进一步增加了它的应用复杂度。对于大部分公司来说,在他们的基础设施中以合理成本部署全球规模的webrtc服务还很困难。尤其是要实现支持webrtc的各种场景,他们还需要将sfu和mcu架构混合部署在边缘节点上。
低延迟http abr流媒体传输协议
与p2p的webrtc协议(理论上不需要中央服务器在两台机器间建立通信)相比,基于http的流媒体协议需要使用服务器且在标准的http上进行通信。它们构建于web最基础的部分之上。
hls/ll-hls
hls(http livestreaming)协议用于向全球范围的观众传输直播和点播内容,它于2009年由apple推出,其特色是延迟较大的超大规模音视频分发技术。虽然用户面对的平均延迟为15秒左右,但hls的延迟却达到了30秒~1分钟。即使在高性能的基础设施和优化的打包和播放器配置的加持下,延迟有望达到6秒,但这对于实时直播视频场景来说依然太高。不过它依然是最受欢迎的abr流媒体协议。它的成功主要源自它对一众设备的强大兼容性,以及它可以支持多种高级功能,如隐藏字幕、广告,使用aes加密或drm的内容保护等。虽然该协议也可以实现视频推流,但它通常用于视频的分发,一般与之配合的是使用rtmp协议进行推流。下图就是一个包括rtmp协议和hls协议的典型直播流媒体架构。
我们不会在本文深入探讨hls的工作原理,下图是一个简单方案:描绘了播放列表和媒体切片是如何使hls实现码率自适应技术(abs)的。
所以hls如何不断发展以支持更低的延迟呢?
一开始,hls只与mpeg-ts容器格式(与h.264/avc编解码器相关)一起使用。在2016年,它增加了对fmp4(fragmented mp4)的支持,从而可以支持cmaf格式并与dash兼容。一年以后,hls增加了对h.265/hevc(仅fmp4)的支持,显著减少了带宽的使用。因此在2020年4月,apple终于实现了ll-hls(低延迟hls)——基于hls协议的扩展;在维持hls自身的可扩展性的同时,还可以利用子切片和这些切片的动态传输实现低延迟视频和直播。该协议的第一个草案要求支持http/2 push,但这样一来,它反而更难实现了。毫不意外,随着主流cdn厂商选择不支持此功能,ll-hls的大规模兼容部署也进入了死胡同(因为没有cnd厂商能够缓存此类内容)。不过幸运的是,apple听取了领域和行业内的建议,又推出了新版本的扩展协议,移除了对http/2 push的需求,但保持对http/2协议的依赖。他们将该标准并入hls中,使ll-hls能够完全向后兼容hls,这意味着hls的所有功能在ll-hls中都能找到。
实际上ll-hls的工作原理与hls一样,但是为了降低打包过程中的延迟,它做了一些重要更改。下面是ll-hls在保存可扩展性和abr能力的同时,为了实现低延迟所做出的最重要的更新:
子切片(partial segments:):一个切片被分割为多个子切片(或指媒体播放中几毫秒的一部分)。与原始切片在cdn上的较长“生命”相比,它们的缓存时间非常短。一旦产生完整切片,那么为了减少带宽,与其相关的子切片就会从播放列表中移除。
预加载提示(preload hints):媒体播放列表有一个“预加载提示”标签,它可以使播放器预知将有哪些新的子切片,以便于服务器在数据可用时立即响应播放器的新切片请求。
阻止播放列表重新加载(block playlist reload):该功能通过向请求(只有在播放列表包含一个新的切片或者子切片时,该请求才会告知服务器播放器需要响应)消息中添加查询参数避免了播放器和服务器之间的媒体播放列表轮询(polling)。
播放列表增量更新(playlist delta updates):通过使用新的ext-x-skip标签,播放器可以仅请求媒体播放列表的更新部分,从而节省已有数据的传输成本。
码率版本报告(rendition reports):primary manifest中索引的每个版本都添加了ext-x-rendition-report标签,它在播放器进行abr操作时提供了一些有用的信息,比如用于每个版本的最后一个序列号和最后一个子切片。
目前,在具备合适的gop、子切片和合理的缓冲大小的前提下,公有云厂商所提供的端到端延迟有望达到2秒左右。虽然与webrtc所能达到的延迟相比依然有很大差距,但在现有的直播架构中,ll-hls显著降低了复杂性,且更加容易实现。你也可以通过修改设置将协议效用发挥到极限,达到1秒左右的延迟,但这样做的代价是牺牲播放体验的流畅性和质量。
dash/ll-dash
dash是 dynamic adaptivestreaming over http的简称,它是一种自适应流媒体传输协议。dash于2012年4月由mpeg推出,目的是在hls协议(由apple拥有)之外,开发一个行业标准。它的工作原理与hls类似:都是基于不同质量水平的内容准备,将清单文件中索引的视频切分成小块,然后再对其使用abr技术编码。
dash还支持通过cenc(common encryptionstandard,通用加密标准)加密的内容保护,这使它能够与所有常见drm系统兼容。
ll-hls和ll-dash的主要区别是ll-dash适用于各类编解码器。但遗憾的是,如果使用一些特殊的编码器,ll-dash将无法与依赖ios的apple设备兼容(包括apple tv)。
2017年,ll-dash对标准化协议进行了必要的修改,将延迟降低到了2秒。背后,它所依赖的正是cmaf(common mediaapplication format,通用媒体应用格式)。cmaf使ll-dash能够使用一些有用的http特性,从而显著降低延迟。这两个特性分别是“分块编码(chunked encoding)”和“分块传输编码(chunked transferencoding)”,它们都是http1.1的一部分(而在http/2中禁止使用)。分块编码先将视频切片分割成几毫秒的视频块,这些视频块一旦被编码,就会被发送到分发层;接下来由分块传输编码将这些视频块快速分发。然而,要完成这样的传输过程,整个分发栈从源站开始一直到cdn都必须支持分块传输编码这一特性。
hesp
hesp(high efficiencystream protocol,高效流媒体协议)是另一个基于abr http的流媒体传输协议,也是最新推出的协议。它是由theoplayer公司通过hesp联盟(主要任务是致力于hesp协议的标准化和发展)进行标准化的。
开发hesp的目的是解决其他http流媒体协议的局限性,它的目标是:
在确保可扩展性(指依然可以与主流cdn厂商合作)的同时达到超低延迟(低于500毫秒)。
在传输时减少所需带宽消耗。
减少切换次数(zapping times),zapping是指各种视频流之间切换(可以想象成在观看有线电视时切换频道)的次数。
这三个性能指标对于直播观众的用户体验具有直接的影响。由于hesp的极低延迟,它也可以成为webrtc的替代方案。hesp最主要的缺陷是,它是专有的商业协议,商用的话,价格非常高。
让我们来简单看下它的工作原理。
与其他低延迟协议相比,hesp最大的区别是它依赖两个(而非一个)视频流。在了解hesp如何帮助我们达到次秒级延迟之前,让我们先来聊聊视频流传输所使用到的不同类型的帧。在视频压缩中,要用到以下几种帧:
idr帧(也称为关键帧)
i帧
p帧
b帧
让我们先从i帧开始,理解了i帧,你才能更好地理解其他帧。i帧包含全部图像,并且在编码时除自身外无需参考其他任何帧。
关键帧(或idr帧)是一种特殊的i帧,关键帧之后的帧无法参考到它之前的帧。也就是说,所有idr帧都是i帧,但反过来却不是如此。任何播放器都能使用关键帧开始播放视频。
p帧只保存当前图像与前一张图像间的变化。b帧所保存的是当前帧与其前后帧之间的变化。
现在你已经知道了构成视频的不同帧之间的作用,让我们回到组成hesp协议的视频流:
第一个视频流被称为初始流(initialization stream),仅包含关键帧。
第二个视频流被称为延续流(continuation stream),它类似于普通的编码流,意味着它能够包含所有类型的帧(取决于实现最大性能或者最大兼容的编码参数和定义的配置文件)。
初始流只用于播放开始时或者当你为了更改播放位置而滑动视频时间线时。由于它仅包含关键帧,播放器背后的解码器能够快速解码该帧,然后才开始(或重新开始)播放直播事件。一旦第一个视频流中的第一帧被获取并解码,播放器就会自动切换到第二个视频流,并继续播放视频。这是因为关键帧是完整的图像,所以它的带宽成本很高。通过切换到第二个视频流,播放器会回退到常规的实时视频流带宽占用,这将提高cdn的并发性能(cdn可以扩展观众并降低到源站的负载)。同dash/ll-dash一样,hesp也使用cmaf-cte进行视频打包和分发。它继承了dash/ll-dash的所有的特性,比如加密、支持drm、字幕(以及听力障碍人士所使用的字幕)、广告等。
hesp看起来很厉害(理论上),是吧?它确实解决了许多问题。但是同其他协议一样,它也不是完美的。它也有自身的缺点和局限性。第一个缺点就是,它使用两个同步编码的视频流,其编码和存储成本要高于其他基于http的流媒体协议。
第二个缺点是,即使它依靠cmaf-cte进行打包和分发,在编码和分发阶段,打包器必须进行更新才能处理两个(而非一个)视频流。
除此之外,和打包器一起,为了能够使用hesp协议播放视频并处理所有的字幕,播放器也必须进行更新。最后一点也很重要,你必须支付专利费用才能商用hesp,这无疑限制了它的普及推广。
所以哪种协议最好?
简洁的回答是没有最好的协议。这个答案似乎对做出选择没什么帮助。更完整的答案是协议的选择主要依赖于其所针对的使用场景、资源投入(包括资金和人力)、时间成本等。
如果你需要向用户和观众提供合理延迟范围内(6秒~15秒)的实时视频传输能力,同时保持成本效益,我们会推荐你使用hls和(或)dash,因为它们可以轻松将视频传输给数百万观众。你可以找到许多已经很好地实现了这两个协议的开源库和流媒体平台。我们更倾向于选择hls,因为它在采用率以及浏览器和设备的支持率方面都是最高的。几乎在任何地方都可以使用它。
如果延迟对你的业务而言非常重要,你应该了解一下低延迟和超低延迟协议,如果你只需要延迟在2秒左右(适用于体育赛事、音乐会和在线课堂)的单向实时视频传输性能,而又没有太多的预算,你应该了解一下hls和(或)ll-dash协议。
对于其他不能接受延迟超过1秒的应用场景,你没有太多选择:webrtc或者hesp。如果你们是一家非盈利组织,但是需要服务大量观众或者不想构建极其复杂的基础设施且没有太多预算,不妨考虑一下hesp协议。
如果你需要双向视频通信,webrtc已经证明了它的实力。但如果构建内部基础设施并不是你的核心业务,你很可能需要依赖已经成功构建了基础设施(已实现规模化)的提供商。
最后,如果资金不是问题,我们会选择hesp,因为与实现webrtc相比,它要简单得多,并且与各类设备和浏览器兼容。
在api.video,我们非常相信,基于http的低延迟或超低延迟流媒体传输协议将在最后赢得这场“战斗”。原因非常简单,这些协议在相对陈旧的基础设施中更容易实现,并从更多设备和浏览器的支持中获益,同时它比webrtc更容易扩展,而且由于它们并没有收取高昂的许可费用,所以大量公司都可以采用。
这就是我们基于hls构建端到端边缘视频基础设施的原因。我们有信心,hls在不久的未来会成为唯一满足各类音视频应用场景的传输协议。
ARRA高功率同轴衰减器规格
小米也被曝将亲自入局造车,新一代“科技围猎场”已成型
变频器驱动电机异常噪音的原因及解决方法
基于DSP+FPGA的实时图像去雾增强系统设计
PCB清洁是不可避免的一项任务
低延迟HTTP ABR流媒体传输协议
虹科数字化仪——机械测量的最佳方案!(二)
国家发改委:优先发展5G商用的重点应用场景
引领数字化转型丨中兴通讯召开2022年度5G峰会暨用户大会
三相视在功率计算公式_三相电功率计算公式
南京锻造机器人课程即将开课
使用Arduino中断功能检测霍尔传感器附近磁铁的教程
精密电流源电路原理及应用,安泰ATS程控标准微安级微电流源
企业这样做才能有效参展
TYPE-C充电连接器凭什么“登顶称王”?
Corei9-9900KS处理器将于10月上市 号称迄今为止地表最快的游戏处理器
USB端口的电源管理
高分子导电膜系列产品的应用和生产详细概述
镍钛诺制成的电极可能是大脑长期植入物的理想组件
什么是LDO?