解决影响 WebRTC 应用视频质量的问题

如何在 WebRTC 应用程序中获得更好的视频质量?这个问题很常见,也很容易理解: 如果我们能在 YouTube 视频中获得 2K、4K 或更高的质量,为什么不能在 WebRTC 应用程序中轻松获得同样的质量呢?

让我们来看看可能限制视频应用质量的三个因素: 编码/解码、网络稳定性和有限或可变带宽,以及如何解决这些问题。

编码/解码

视频必须在发送端编码,在接收端解码。压缩视频至关重要,尤其是在带宽有限且我们没有时间缓冲数据包的情况下。

解决影响 WebRTC 应用视频质量的问题

编码

与解码相比,编码需要更多的资源,因此在编码设备跟不上的情况下,问题要大得多。有些编解码器可能能更有效地编码数据,但现在它们仍然需要更多的 CPU。例如:如果使用 10Mbps 的 VP8 30fps 全高清编码视频,CPU 占用率为 20%。同样,AV1 的 CPU 占用率为 32%。

我们之所以要使用 AV1 等较新的编解码器,主要是因为它们能提供更好的压缩效果。AV1 是十年来视频质量和性能的最大飞跃。AV1 4K 数据流的比特率与 H.264 1080P 视频相似,在保持相同质量的同时,成本比特率降低了 30%。

更新、更强大的计算机将能提供更高效地编码 AV1 WebRTC 视频所需的资源。明年左右,当这些电脑在市场上正常销售时,越来越多的人将能在相同带宽下,像高清一样轻松地编码 4K 视频流。但我们还没有做到这一点!

视频编码完成后,我们就可以通过互联网更高效地发送视频了。

解码

在另一端,用户收到的数据格式需要解码才能可视化。如今,视频解码的计算密集度更低、技术更先进。这也是 YouTube 等服务能顺利提供 4K 视频的原因之一。此外,视频流服务还有缓冲区的帮助。因为它们不需要实时流媒体,所以可以提前缓冲数据。这样就能以更低的带宽需求提供更高的视频质量。

网络稳定性

网络不稳定会造成三大问题。

延迟

这是视频从发送到另一端接收之间发生的延迟。超过一秒的延迟会给通信带来困难。

丢包

网络拥塞时会出现丢包现象。例如,如果公共网络被大量使用,就会导致视频丢失或出现绿屏等其他奇怪的情况。

抖动

抖动是指数据包接收方式的变化。当通常的节奏(数据包之间的间隙)甚至数据包接收顺序受到干扰时,视频质量就会受到影响。这通常表现为视频冻结。

解决网络稳定性问题的方法

控制网络

最理想的情况是实施 QoS 机制,对重要流量进行优先排序。这将确保重要服务的通信顺畅,并管理带宽流量。遗憾的是,现实世界通常并非如此。

更接近用户的存在点(PoPs)

这可将大部分视频流量转移到专用网络,而不是通过公共互联网跳转。并非所有公司都有这样的基础设施,因此您需要使用 CPaaS 来代劳。还可以使用一些特定的服务,如 AWS Global Accelerator 或 Cloudflare Tunnel。

对于音频,请使用 Opus FEC

使用 Opus FEC 传输音频会牺牲一些额外带宽来发送重复数据包,但这有助于提高整体音频质量。

可变或有限带宽

可变或有限的带宽是降低视频质量的第三类原因。这是由于数据在网络上传输的方式造成的。当视频内容通过互联网或任何网络进行流式传输时,会被分成小的数据包。然后,这些数据包按顺序从服务器发送到用户的设备。

解决影响 WebRTC 应用视频质量的问题

如果可用带宽有限,数据传输速率就会降低。这意味着可发送的数据包减少,导致视频流速度减慢,并经常暂停以缓冲数据。

如果带宽不固定,视频质量会在整个流媒体会话期间波动。

解决网络带宽问题的方法

主讲人识别

选择要接收的特定视频,并优化这一个视频而不是多个视频。

基于比特率或分辨率的自适应比特率

在这种技术中,您可以根据接收方的带宽或其要求的分辨率降低发送方的视频质量。

联播或 SVC(可扩展视频编码)

解决影响 WebRTC 应用视频质量的问题

通过这些技术,您可以向不同类型的用户分发不同质量的视频。在上图中,我们使用 SVC 来动态改变分层视频编码的质量,针对不同的带宽优化实时通信。

本文内容编译自WebRTC Live Episode 78: Three Things We’ve Learned Building Video Apps

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/30437.html

(1)

相关推荐

发表回复

登录后才能评论