{"id":310,"date":"2017-09-30T03:48:42","date_gmt":"2017-09-30T03:48:42","guid":{"rendered":"https:\/\/blog.mozilla.org\/webrtc\/?p=310"},"modified":"2017-09-30T22:59:20","modified_gmt":"2017-09-30T22:59:20","slug":"when-your-video-freezes","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/","title":{"rendered":"When your video freezes"},"content":{"rendered":"<p>We recently <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1393687\">fixed a regression<\/a> in Firefox 57 that the <code>max-fs<\/code> parameter in <code>fmtp<\/code> lines had stopped working in Firefox 56. Because it got reported to us while Firefox 56 was still in it\u2019s Beta cycle we uplifted the patch for Firefox 56 as well.<\/p>\n<p>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.<br \/>\n<!--more--><\/p>\n<h4>What causes the video to freeze<\/h4>\n<p>By default Firefox adds <code>fmtp<\/code> lines like this to it\u2019s SDP offers:<\/p>\n<pre>  a=fmtp:120 max-fs=12288;max-fr=60\r\n  a=fmtp:121 max-fs=12288;max-fr=60<\/pre>\n<p>If Firefox 56 and later receive this the <code>max-fs<\/code> value will be respected. But in Firefox 56 and 57 the problem arises when the <code>max-fs<\/code> parameter is not present in the remote SDP.<\/p>\n<p>So if the remote SDP contains <code>fmtp<\/code> lines like this:<\/p>\n<pre>  a=fmtp:120<\/pre>\n<p>Firefox 56 and later will interpret the missing <code>max-fs<\/code> parameter literally as a zero. Also the absence of an <code>fmtp<\/code> attribute for the chosen video codec will be interpreted as a zero <code>max-fs<\/code> value.<\/p>\n<p>The result is that calls will get established as normal. But if:<\/p>\n<ul>\n<li>The remote SDP did not have the <code>max-fs<\/code> parameter (including no <code>fmtp<\/code>) set<\/li>\n<li>And\n<ul>\n<li>The machine which runs Firefox gets under load (either through Firefox or something else running on the machine)<\/li>\n<li>Or the available bandwidth for the PeerConnection is low<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>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 <code>max-fs<\/code> parameter kicks in and restricts the encoder to do nothing.<\/p>\n<h4>What to do now<\/h4>\n<p>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 <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1403714\">bug report<\/a>.<\/p>\n<p>In the meantime as a workaround we recommend to artificially add a <code>max-fs<\/code> parameter to the <code>fmtp<\/code> lines of the remote SDP (offer or answer depending on the roles) for Firefox if it\u2019s not present already. Examples:<\/p>\n<p><code>a=fmtp:120<\/code> should be turned into <code>a=fmtp:120 max-fs=12288<\/code><br \/>\nAnd in case of no <code>fmtp<\/code> parameter you should add <code>a=fmtp:120 max-fs=12288<\/code> to the video m-section of the SDP.<\/p>\n<p>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.<\/p>\n","protected":false},"excerpt":{"rendered":"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\u2019s Beta cycle we uplifted the patch for Firefox 56 as well. It got diagnosed a short time ago that this patch [&hellip;]","protected":false},"author":1151,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[301107,220,15881],"coauthors":[264764],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>When your video freezes - Advancing WebRTC<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"When your video freezes - Advancing WebRTC\" \/>\n<meta property=\"og:description\" content=\"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\u2019s Beta cycle we uplifted the patch for Firefox 56 as well. It got diagnosed a short time ago that this patch [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/\" \/>\n<meta property=\"og:site_name\" content=\"Advancing WebRTC\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-30T03:48:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-09-30T22:59:20+00:00\" \/>\n<meta name=\"author\" content=\"Nils Ohlmeier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nilsohlmeier\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nils Ohlmeier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/\",\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/\",\"name\":\"When your video freezes - Advancing WebRTC\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#website\"},\"datePublished\":\"2017-09-30T03:48:42+00:00\",\"dateModified\":\"2017-09-30T22:59:20+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/76bbd261b8442faecc23b88127c82a9a\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/webrtc\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"When your video freezes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#website\",\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/\",\"name\":\"Advancing WebRTC\",\"description\":\"Committed to moving Firefox and WebRTC forward\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.mozilla.org\/webrtc\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/76bbd261b8442faecc23b88127c82a9a\",\"name\":\"Nils Ohlmeier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/image\/bdf2a94f7762f770fb4d270f302e48ac\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/24cf57862ae4c7665f706d12c19b98e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/24cf57862ae4c7665f706d12c19b98e7?s=96&d=mm&r=g\",\"caption\":\"Nils Ohlmeier\"},\"description\":\"Hacking on real time communications since 2002\",\"sameAs\":[\"https:\/\/x.com\/nilsohlmeier\"],\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/author\/nohlmeiermozilla-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"When your video freezes - Advancing WebRTC","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/","og_locale":"en_US","og_type":"article","og_title":"When your video freezes - Advancing WebRTC","og_description":"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\u2019s Beta cycle we uplifted the patch for Firefox 56 as well. It got diagnosed a short time ago that this patch [&hellip;]","og_url":"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/","og_site_name":"Advancing WebRTC","article_published_time":"2017-09-30T03:48:42+00:00","article_modified_time":"2017-09-30T22:59:20+00:00","author":"Nils Ohlmeier","twitter_card":"summary_large_image","twitter_creator":"@nilsohlmeier","twitter_misc":{"Written by":"Nils Ohlmeier","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/","url":"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/","name":"When your video freezes - Advancing WebRTC","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/#website"},"datePublished":"2017-09-30T03:48:42+00:00","dateModified":"2017-09-30T22:59:20+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/76bbd261b8442faecc23b88127c82a9a"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/webrtc\/when-your-video-freezes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/webrtc\/"},{"@type":"ListItem","position":2,"name":"When your video freezes"}]},{"@type":"WebSite","@id":"https:\/\/blog.mozilla.org\/webrtc\/#website","url":"https:\/\/blog.mozilla.org\/webrtc\/","name":"Advancing WebRTC","description":"Committed to moving Firefox and WebRTC forward","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.mozilla.org\/webrtc\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/76bbd261b8442faecc23b88127c82a9a","name":"Nils Ohlmeier","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/image\/bdf2a94f7762f770fb4d270f302e48ac","url":"https:\/\/secure.gravatar.com\/avatar\/24cf57862ae4c7665f706d12c19b98e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/24cf57862ae4c7665f706d12c19b98e7?s=96&d=mm&r=g","caption":"Nils Ohlmeier"},"description":"Hacking on real time communications since 2002","sameAs":["https:\/\/x.com\/nilsohlmeier"],"url":"https:\/\/blog.mozilla.org\/webrtc\/author\/nohlmeiermozilla-com\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/posts\/310"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/users\/1151"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/posts\/310\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/media?parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/categories?post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/tags?post=310"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/coauthors?post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}