如果你的视频在Firefox中卡住不动

作者:Nils Ohlmeier(原文链接

翻译:刘通

原标题:When your video freezes

 

我们最近修复了Firefox 57中的一个退化问题,在fmtp行中的max-fs参数在Firefox 56版本中已经不工作了。因为这个问题是在Firefox 56还处于Beta版本周期的时候报告给我们的,所以我们也同时更新了Firefox 56的补丁。

不久之前我们发现这个补丁会造成无法预见的后果:它会导致Firefox浏览器在通话过程中突然停止发送视频。

是什么导致的视频卡住

默认情况下Firefox会像这样把ftmp行加到它的SDP提供中:

freeze1

如果Firefox 56及更高版本接收到这个,它会重视这个max-fs值。但是在Firefox 56和57版本中,当这个max-fs参数不存在于远端SDP的时候问题就出现了。

所以如果远端SDP包括像这样的fmtp行:

freeze2

Firefox 56及更高版本会将缺少的max-fs参数解释为0。并且,对于选择的视频编解码器来说,缺少的fmtp属性也会被解释为max-fs值为0。

结果是,这个通话还是会像正常一样建立。但是如果:

# 远端SDP没有设定max-fs参数(或者没有fmtp)

# 以及

         1. 运行Firefox的机器处于负载状态

         2. 或者PeerConnection可用的带宽较低

Firefox浏览器会下调输出视频流的分辨率以适应当前负载/带宽。在这种条件下,Firefox会停止编码及发送视频,因为这个时候缺少的max-fs参数中的0值就起作用了,它会限制编码器什么都不做。

现在改怎么办

这个问题已经在最新的Firefox 58版本中已经得到修复,并且会尽可能的改善。你可以点击这里查看bug报告

于此同时,作为解决办法,如果在Firefox的远端SDP中的fmtp行里没有max-fs参数的话,我们建议您人为地添加一个。例如:

a=fmtp:120应该改为a=fmtp:120 max-fs=12288。并且为了确保不会出现没有fmtp参数的情况,你应该在SDP的视频的m-部分中添加a=fmtp:120 max-fs=12288。

我们对这个问题可能产生的后果抱歉。我们正在着手于避免类似事情在以后再次发生。

填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营