When your video freezes
We recently fixed a regression in Firefox 57 that the max-fs
parameter in fmtp
lines had stopped working in Firefox 56. Because it got reported to us while Firefox 56 was still in it’s Beta cycle we uplifted the patch for Firefox 56 as well.
It got diagnosed a short time ago that this patch had unforeseen consequences: it can result in Firefox stopping to send video in the middle of a call.
What causes the video to freeze
By default Firefox adds fmtp
lines like this to it’s SDP offers:
a=fmtp:120 max-fs=12288;max-fr=60 a=fmtp:121 max-fs=12288;max-fr=60
If Firefox 56 and later receive this the max-fs
value will be respected. But in Firefox 56 and 57 the problem arises when the max-fs
parameter is not present in the remote SDP.
So if the remote SDP contains fmtp
lines like this:
a=fmtp:120
Firefox 56 and later will interpret the missing max-fs
parameter literally as a zero. Also the absence of an fmtp
attribute for the chosen video codec will be interpreted as a zero max-fs
value.
The result is that calls will get established as normal. But if:
- The remote SDP did not have the
max-fs
parameter (including nofmtp
) set - And
- The machine which runs Firefox gets under load (either through Firefox or something else running on the machine)
- Or the available bandwidth for the PeerConnection is low
Firefox will try to downscale the resolution of the outgoing video stream to cope with the load/bandwidth. And in that case Firefox will stop encoding and sending video, because at this point the zero from the missing max-fs
parameter kicks in and restricts the encoder to do nothing.
What to do now
The problem has been fixed in the latest Firefox 58 (aka Nightly) build (58.0a1 (2017-09-29)) and will get uplifted as far as possible. You can follow the progress in the bug report.
In the meantime as a workaround we recommend to artificially add a max-fs
parameter to the fmtp
lines of the remote SDP (offer or answer depending on the roles) for Firefox if it’s not present already. Examples:
a=fmtp:120
should be turned into a=fmtp:120 max-fs=12288
And in case of no fmtp
parameter you should add a=fmtp:120 max-fs=12288
to the video m-section of the SDP.
We apologize for any inconvenience this might cause. And we are looking at ways to prevent something like this from happening in the future again.