使用webrtc作为rtmp的替代方案

LiveVideoStack_ LiveVideoStack_     2022-11-29     742

关键词:

 点击上方“LiveVideoStack”关注我们

▲扫描图中二维码或点击阅读原文

了解音视频技术大会更多信息


作者:Barry Owen

翻译:Alex

技术审校:刘连响

WebRTC

影音探索

#014#

2020年,Adobe宣布停止对 Flash播放器的支持。Flash历经多年终于走向终结,虽然是众望所归,但它的退出却对存在于许多流媒体工作流程中的一项重要技术——RTMP( Real-Time Messaging Protocol)影响重大。RTMP最初设计用于向Adobe Flash播放器传输音频、视频和其他数据。在全盛时期,RTMP曾是互联网上传输视频的最主要技术。它可以用于端到端,并能确保快速的实时传输。然而与过去相比,现在越来越多的设备和浏览器都不再支持RTMP。

虽然在编码器和服务器之间传输视频方面,RTMP仍然是一个可靠的视频传输协议,但是对基于RTMP的播放来说,却并非如此。Adobe也表示[1]:”鼓励直播厂商将现有的Flash内容迁移到新的开放格式中去。”

在2020年的Streaming Media的一期杂志中,Robert Reinhard(流媒体视频顾问)曾警告:“如果你正在使用Flash进行低延时实时流媒体传输,那么你还有一年的时间(或者更短)将其迁移到WebRTC上。这意味着什么?意味着你在基于Flash的媒体服务器上所使用的的任何代码都需要迁移到WebRTC(而非RTMP)上。”

然而,许多内容发行商仍然在竭力将RTMP替换为用于视频播放的实时格式。为什么?因为虽然HLS和MPEG-DASH支持不同设备的高质量流媒体传输,但是延迟超过30秒是这些基于HTTP技术的标准。确实存在这些协议的低延迟扩展(LL-HLS和DASH的LL-CMAF),但是它们都无法达到很多公司追求的次秒级传输速度。除此之外,播放器、CDN和各种设备对于LL-HLS和LL-CMAF(用于DASH)的支持还处于早期阶段。

对于实时视频传输来说,WebRTC是你的唯一选择,这也是它在最近几年备受关注的原因。这项基于HTML5的技术为互联网上的实时视频传输提供了最快的方法。更重要的是,像RTMP在其全盛时期一样,WebRTC也可以端到端使用。

但是WebRTC也有自己的局限,它被设计用于基于浏览器的编码和小规模的流媒体传输,而这两个特点都使它无法适用于某些直播场景。

WebRTC会是替代RTMP的最佳方案吗?在开发者中,这句话已经成为了流行语。正如我将在下文所解释的那样,它取决于你所使用的支持部署的技术和你想达成的目标。

RTMP vs. WebRTC: 对比

对比RTMP,WebRTC有以下几个优势:其一,它是一种新型、由IETF和W3C进行标准化的开源技术。所有的主流浏览器无需插件即可支持WebRTC,消除了由专有流媒体技术所带来的互操作上的挑战。除此之外,软件开发者社区不断为WebRTC的开发贡献代码,也使它受益匪浅。

其次,在传输速度低于500毫秒的情况下,WebRTC是目前延迟最低的协议。它也由此成为创建交互式视频体验(从实时拍卖到直播购物)的首选解决方案,同时对于那些想要超越竞争对手的体育直播厂商来说,它也是一个非常具有吸引力的选择。

向数目众多的观众进行大规模直播对于WebRTC来说还存在困难。视频聊天框架本来就不是为规模化而设计的。幸运的是,我们已经开发了一种解决方案来克服这种局限,我将在下文详述。

在视频生产方面,WebRTC仅使用Web浏览器就可以进行简单的直播,但是对于希望使用硬件或者软件解决方案控制编码设置的直播厂商来说,基于浏览器的编码并不理想。同样,当涉及到使用定时元数据的字幕和广告标记等功能时,RTMP也比WebRTC更具优势。

WebRTC工作流程

所以,当涉及到实时视频流媒体传输时,RTMP到底在哪里可以替换成WebRTC? 作为一种端到端技术,WebRTC可分别用于推流、拉流或同时用于推、拉流。下面让我们看下WebRTC工作流程两端的优势,以及它是如何在确保规模化的同时应用于编码到传输的整个过程。

WebRTC在推流时替换RTMP

RTMP仍然是第一英里视频贡献的标准,这其中有以下几个原因。第一,RTMP获得了来自直播编码软件和硬件的广泛支持,同时许多社交媒体平台也在使用它。编码厂商已经开始向SRT等开源协议添加支持,但是WebRTC一直仅限于基于浏览器的内容发布。对于任何想要使用Web摄像头和麦克风直接在浏览器上进行直播的人来说,WebRTC非常有用。但是对于想要使用专业编码器进行实时流媒体内容传输的内容发行商来说,就无法使用WebRTC推流。

因此Millicast的技术团队设计了WHIP(WebRTC HTTP Ingest Protocol)来解决这个难题。在与媒体服务器通信时,WHIP提供了使用标准信令协议的编码软件和硬件,这样就可以实现跨厂商的WebRTC推流。WHIP在实现WebRTC推流的同时,还保留了WebRTC的低延迟优势(与RTMP相比),同时移除了编码器和媒体服务器之间的连接障碍。

当用于推流时,WebRTC可以确保低延迟、强制加密并提供对于Opus和VP9等高级编解码器的支持。因为有了WHIP,WebRTC也正在成为一种可用于硬件和软件编码的格式。直播流程对编码设置(包括码率、编解码器和编解码器参数等)有更多的控制需求,而WHIP的出现使WebRTC可以直接和RTMP竞争。

WebRTC在拉流时替换RTMP

浏览器不再支持RTMP导致播放端无法再使用它。当今大部分直播厂商都在使用HLS进行“最后一英里”的交付,但HLS的延迟要超过30秒。

目前你在传输视频时正在使用哪些流媒体格式?

 来源:Wowza的2021视频流延迟报告[3]

当涉及低延迟协议的替代方案,WebRTC是众多协议中传输速度最快的。因此,如果你需要真正的交互(我们这里讨论的是用于紧急响应和远程监控等场景的低于一秒的视频传输),那么WebRTC将是你的最佳选择。LL-HLS和用于DASH的LL-CMAF同样也是不错的选择,但是它们无法实现像WebRTC一样的实时传输。

也就是说,WebRTC最初并不是为大规模直播场景设计的。我们过去曾鼓励内容发行商在向大量观众直播交互性内容时使用调整后的HLS或者LL-HLS,但现在我们为了解决这个问题,已经改进了产品。

具体来说,我们开发了一个新的特性:该特性可以在自定义的CDN上部署WebRTC,从而提供近于无限的规模。这个解决方案可以实现面向全球大规模观众的次秒级视频传输[2]。

如图中所示,当以这种方式传输视频时,WebRTC可用于广泛的工作流程中,包括WebRTC端到端,或者从RTMP到WebRTC。

在实现WebRTC时需要考虑的事

如果你正在考虑使用WebRTC代替RTMP,你需要将如下问题纳入考量:

1. 你是否需要双向视频或实时交互?

交互式实时流媒体解决方案和WebRTC密不可分,缺一不可。只要你使用WebRTC进行内容发布和播放,就能实现低于500毫秒的流媒体传输。更重要的是,使用次秒级流媒体传输的应用场景还可以利用RTMP到WebRTC的工作流程。同时还存在混合模型,其中交互视频参与者可以观看WebRTC视频流,而被动观众可以观看由HLS传输的具有更高延迟的视频流。

2. 你希望视频内容获得大范围传播吗?

所有的内容发行商都希望他们的流媒体应用大获成功,拥有成千上万或者数百万的观众。然而,过多用户可能使你的基础设施不堪重负。传统的WebRTC部署因无法利用自定义创建的CDN而限制了它的扩展能力。所以如果你的目标是触达大量观众,一定要确保拥有稳健的基础设施。


结语

由于WebRTC被设计用于视频聊天应用,所以有两个障碍阻碍了它在实时直播工作流程中的广泛采用:

  1. 基于浏览器编码的限制,以及在编码软件和硬件中缺少WebRTC能力。

  2. 规模化的挑战:导致WebRTC在向成千上万(或更多)观众直播时很难使用。

幸运的是,行业已经为以上问题找到了解决方法,使WebRTC成为了RTMP的强大替代方案(无论是在推流时还是在播放端)。

在我们的2021视频流延迟报告中,我们发现WebRTC已成为用于推流的第二流行的格式,用于传输的第三流行格式。在各厂商为实现实时视频直播而努力提高WebRTC可用性的前提下,我预计WebRTC的采用率将继续增长。

注释:

[1] https://blog.adobe.com/en/publish/2017/07/25/adobe-flash-update#gs.ctytij

[2] https://www.wowza.com/products/streaming-cloud/webrtc-broadcasting?utm_source=wowza&utm_medium=website&utm_campaign=realtime-streaming-scale

[3] https://www.wowza.com/blog/2021-video-streaming-latency-report

References:

https://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=139351

https://www.wowza.com/streaming-engine

https://www.wowza.com/blog/what-is-webrtc

https://www.wowza.com/blog/what-is-low-latency-and-who-needs-it

https://www.wowza.com/blog/complete-guide-to-live-streaming

https://www.wowza.com/blog/webrtc-use-cases-for-professional-streaming

作者简介:

Barry Owen, Wowza的视频流专家和解决方案工程副总裁,Barry拥有超过25年的SaaS、基于云的和实时流媒体平台的经验,致力于为客户打造创新型解决方案。

致谢:

本文已获得作者Barry Owen授权翻译和发布,特此感谢。

原文链接:

https://www.wowza.com/blog/using-webrtc-as-rtmp-alternative


喜欢我们的内容就点个“在看”吧!

使用 BabelWay 作为企业服务总线的替代方案?

】使用BabelWay作为企业服务总线的替代方案?【英文标题】:UsingBabelWayasanEnterpriseServiceBusalternative?【发布时间】:2013-05-2911:09:36【问题描述】:我们公司正在寻找一种解决方案来简化第三方系统的集成。我们进行了大量研究,并... 查看详情

pytz 替代方案 - 使用操作系统时区作为源?

】pytz替代方案-使用操作系统时区作为源?【英文标题】:pytzalternative-usingOStimezoneassource?【发布时间】:2012-11-2812:48:18【问题描述】:有没有使用OStimezone/dst作为源的更简单的pytz替代方案?欢迎使用ctypes包装器或不需要编译的东... 查看详情

使用依赖注入作为单例的替代方案

】使用依赖注入作为单例的替代方案【英文标题】:UsingDependencyInjectionasanalternativetoSingletons【发布时间】:2011-08-2208:58:42【问题描述】:我一直都知道单例是“坏的”,但直到我从C++迁移到Java之后,我才决定找到解决它们的方... 查看详情

将网络摄像头流式传输到 rtmp

...【发布时间】:2017-02-1413:50:12【问题描述】:如果我不想使用闪光灯,最好的方法是什么?我听说过WebRTC,但是否可以从getUserMedia获取输入并将其流式传输到媒体服务器,然后将数据移动到rtmp流?【问题讨论】:【参考方案1】... 查看详情

将 nginx rtmp 片段发送到 WebRTC

...stoWebRTC【发布时间】:2021-02-1308:20:26【问题描述】:我想使用OBS通过RTMP流式传输到nginx服务器,然后将RTMP片段本地发送到WebRTC,以便它们可以通过MediaStream传输到客户端。我认为这是可能的,因为它基本上被描述为here。我这样... 查看详情

海康威视rtsp摄像头转rtmp推流前端方案(浏览器兼容及权限验证)

...行flash插件,但是chrome现在已经不支持flash了,所以我们使用flvjs前端插件作为替代方案,并在流媒体服务器上加入了权限验证功能限制用户访问。  此方案是基于上一节中的方案进行的优化,所以没有提及的地方和原方... 查看详情

使用 Visual C++ 环境和“Asm”关键字作为 Assembler IDE 的替代方案?

】使用VisualC++环境和“Asm”关键字作为AssemblerIDE的替代方案?【英文标题】:UseVisualC++Environmentand"Asm"keywordasalternativeforAssemblerIDE?【发布时间】:2012-04-1600:51:08【问题描述】:只需阅读一本C++书籍,您就可以通过使用asm关... 查看详情

实时视频流、视频通话 Red5、RTMP 和 WebRTC、WSS?

...由从客户端网络摄像头实时录制/流式传输的Flash应用程序使用。但是我宁愿不用老爷子的fl 查看详情

rtmp推流方案总结

...有协议。它有三种变种:1)工作在TCP之上的明文协议,使用端口1935;2)RTMPT封装在HTTP请求之中,可穿越防火墙;3)RTMPS类似RTMPT,但使用的是HTTPS连接;RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可... 查看详情

在 Ant Media Server 中使用 WebRTC 观看带有 B 帧的 rtmp 流时出现抖动问题

】在AntMediaServer中使用WebRTC观看带有B帧的rtmp流时出现抖动问题【英文标题】:JitteringproblemwhenwatchingartmpstreamwithB-FramesusingWebRTCinAntMediaServer【发布时间】:2020-06-1710:09:20【问题描述】:我正在使用RTMP从OBS流式传输到AntMediaServerEnter... 查看详情

房间数据库 - 查询错误作为输入时没有可行的替代方案

...发布时间】:2021-08-2515:43:53【问题描述】:我在Android中使用Room,并在我的dao文件中完成如下操作:@Query("selectDISTINCTtimeStamp,batteryId,status"+"from(selectbatteryDet 查看详情

从 webrtc 会话中提取视频流并转换为 rtmp

】从webrtc会话中提取视频流并转换为rtmp【英文标题】:Extractvideostreamfromwebrtcsessionandconverttortmp【发布时间】:2017-01-2018:23:44【问题描述】:如何在正在进行的webrtc视频通话中提取视频流并将其发送到可以进行转码的服务器。就... 查看详情

r语言使用ggpubr包的ggdotchart函数可视化点图两个数据对象的排序点图作为雷达图的替代方案(orderedlolliplotordotchart)

R语言使用ggpubr包的ggdotchart函数可视化点图、两个数据对象的排序点图、作为雷达图的替代方案(orderedlolliplotordotchart)目录 查看详情

r语言使用ggpubr包的ggdotchart函数可视化点图多个数据对象的排序点图作为雷达图的替代方案(orderedlolliplotordotchart)

R语言使用ggpubr包的ggdotchart函数可视化点图、多个数据对象的排序点图、作为雷达图的替代方案(orderedlolliplotordotchart)目录 查看详情

如何解决easynvr使用webrtc协议无法播放的问题?

EasyNVR安防视频云服务的视频接入能力灵活,可以与我们其他的视频平台相结合,形成多类型的行业解决方案。EasyNVR支持RTSP/Onvif设备接入,并分发出多种格式的视频流,如RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等࿰... 查看详情

使用 node.js 作为 WebRTC 对等点?

】使用node.js作为WebRTC对等点?【英文标题】:Usenode.jsasaWebRTCpeer?【发布时间】:2013-06-2103:14:36【问题描述】:存在哪些模块可以在WebRTC中使用node.js作为对等点?我想以比P2P更多的客户端/服务器方式使用WebRTC,因为它明显能够不... 查看详情

考虑到可扩展性和友好 URL 的 GUID 替代方案

...dlyURL【发布时间】:2012-10-0702:46:00【问题描述】:我决定使用GUID作为我的许多项目数据库表的主键。我认为这是一个很好的做法,尤其是考虑到可扩展性、备份和恢复。问题是我不想使用常规GUID并搜索替代方法。我实际上很想... 查看详情

作为sed替代方案的perl就地替换

perl-i-pe"s|handles'quotes'"nicely"|and$shell_variables|"example.txt 查看详情