WebRTC、Janus卡顿优化实践(SPS、PPS丢包)

11 篇文章 1 订阅

背景

在弱网环境下如果丢了SPS、PPS,会发生较长时间的卡顿。

服务端

Janus

版本

66

详述

      在视频通话时,WebRTC发送端发送的第一个RTP包只包含SPS、PPS,第二个包是IDR帧,接收端收到后会把SPS、PPS、IDR帧合成一个Buffer传给解码器,这样才能正确解码。
      当SPS、PPS发生丢包时,WebRTC在收到第一个IDR帧的包后检查SPS、PPS,如果缺失,则丢弃该包,并发送一个PLI包,期望从发送端获取一个I帧,这期间即使NACK机制重发了SPS、PPS,接收端也不会正确处理。这样,在WebRTC客户端从Janus拉流的情况下就依赖Janus对PLI包的处理,目前Janus没有转发该包(考虑多人同时拉流的情况),需要自己做I帧的发送逻辑(支持所谓的秒开),如果Janus的I帧间隔比较大,就会有比较大的卡顿。
      其他非关键帧包的丢包通过NACK重发即可恢复,即使没有恢复,也不会出现长时间的卡顿。

解决

      在SPS、PPS丢失的情况下,缓存第一个IDR帧的包,通过NACK等丢包重传机制重新获取到SPS、PPS后重新处理IDR帧,这样可以有效缓解卡顿。当然,这个需要修改WebRTC的Native代码,浏览器基本没有办法。

WebRTC 中,DataChannel 通信丢包问题可以通过以下方法进行优化: 1. 使用可靠性传输模式:DataChannel 有两种传输模式:可靠性传输和不可靠性传输。如果您的应用程序需要确保数据的完整性和正确性,则应使用可靠性传输模式。这种模式下,数据包会被自动重传,以确保数据的可靠传输。 2. 减少数据包大小:减少数据包的大小可以降低数据包丢失的概率。这可以通过将数据分成多个小块来实现,并将它们逐个发送。这样,即使一个数据块丢失,其他数据块也能够正常传输。 3. 实现 FEC 纠错:FEC(Forward Error Correction)是一种数据纠错技术,可以通过添加冗余数据来使数据包更容易被恢复。通过实现 FEC 纠错技术,即使数据包丢失,接收方仍然可以通过冗余数据恢复数据包。 4. 实现 NACK 重传机制:NACK(Negative Acknowledgment)是一种重传机制,可以在接收方检测到数据包丢失时要求发送方重新发送数据包。通过实现 NACK 重传机制,可以在数据包丢失时快速地重新发送数据包,从而提高数据传输的可靠性。 5. 优化网络环境:网络环境对 DataChannel 通信的影响很大。如果网络环境不稳定或者带宽不足,那么数据包丢失的概率也会增加。因此,您可以通过优化网络环境来提高数据传输的可靠性,例如使用更快的网络连接或者减少网络负载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值