作者:Nils Ohlmeier(原文链接)
翻译:刘通
原标题:When your video freezes
我们最近修复了Firefox 57中的一个退化问题,在fmtp行中的max-fs参数在Firefox 56版本中已经不工作了。因为这个问题是在Firefox 56还处于Beta版本周期的时候报告给我们的,所以我们也同时更新了Firefox 56的补丁。
不久之前我们发现这个补丁会造成无法预见的后果:它会导致Firefox浏览器在通话过程中突然停止发送视频。
是什么导致的视频卡住
默认情况下Firefox会像这样把ftmp行加到它的SDP提供中:
如果Firefox 56及更高版本接收到这个,它会重视这个max-fs值。但是在Firefox 56和57版本中,当这个max-fs参数不存在于远端SDP的时候问题就出现了。
所以如果远端SDP包括像这样的fmtp行:
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。
我们对这个问题可能产生的后果抱歉。我们正在着手于避免类似事情在以后再次发生。