← View all posts
September 30, 2017

When your video freezes

Contributed by Nils Ohlmeier, Hacking on real time communications since 2002

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 no fmtp) 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.