{"id":150,"date":"2016-09-26T19:19:51","date_gmt":"2016-09-26T19:19:51","guid":{"rendered":"https:\/\/testmozilla.wpengine.com\/webrtc\/?p=150"},"modified":"2016-09-26T19:19:51","modified_gmt":"2016-09-26T19:19:51","slug":"just-begin-ice-restart","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/","title":{"rendered":"Just Begin Again (ICE Restart)"},"content":{"rendered":"<p>Where do we, well, start? First a quick word about ICE itself. ICE stands for <a href=\"https:\/\/tools.ietf.org\/html\/rfc5245\">Interactive Connectivity Establishment<\/a>, and, at its root, is how your browser discovers exactly how to connect to other computers through a NAT for WebRTC calls.\u00a0ICE restart becomes necessary when network conditions change such as when transitioning from WiFi to a cellular network, or between two different WiFi networks.<\/p>\n<p>OK.\u00a0I hear you asking, &#8220;How does this affect me?&#8221;\u00a0Or maybe more likely, &#8220;I think this is affecting me! How can I tell?&#8221;.\u00a0I&#8217;m glad you asked. <!--more-->First you&#8217;ll need to enable logging, and the exact steps depend on which platform you&#8217;re using.<\/p>\n<p>For Windows:<\/p>\n<pre class=\"highlight\">cd c:\nset NSPR_LOG_MODULES=signaling:4\nset NSPR_LOG_FILE=%TEMP%log.txt\nFor 32-bit Windows\ncd \"Program FilesMozilla Firefox\"\nFor 64-bit Windows\ncd \"Program Files (x86)Mozilla Firefox\"\n.firefox.exe<\/pre>\n<p>For Linux:<\/p>\n<pre class=\"highlight\">export NSPR_LOG_MODULES=signaling:4\nexport NSPR_LOG_FILE=\/tmp\/log.txt\ncd \/path\/to\/firefox\n.\/firefox<\/pre>\n<p>For Mac OS X:<\/p>\n<pre class=\"highlight\">export NSPR_LOG_MODULES=signaling:4\nexport NSPR_LOG_FILE=\/tmp\/log.txt\ncd \/Applications\/Firefox.app\/Contents\/MacOS\n.\/firefox-bin<\/pre>\n<p>If you&#8217;re curious about Firefox logging, you can learn more <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Mozilla\/Debugging\/HTTP_logging\">here<\/a> and <a href=\"https:\/\/wiki.mozilla.org\/Media\/WebRTC\/Logging\">here<\/a>.<\/p>\n<p>Once you&#8217;ve enabled logging, &#8220;Offerer restarting ice&#8221; and\/or &#8220;Answerer restarting ice&#8221; will appear in the logs if ice restart is happening.\u00a0It will look something like:<\/p>\n<pre class=\"highlight\">1963835392[102030830]: [main|PeerConnectionImpl] PeerConnectionImpl.cpp:1567: CreateOffer()\n1963835392[102030830]: [main|PeerConnectionImpl] PeerConnectionImpl.cpp:1585: Offerer restarting ice\n<\/pre>\n<p>You&#8217;ll see a lot of other interesting info about what is going on as well, but the main point is that you will know for certain whether an ICE restart is happening.\u00a0Mystery solved! You can also see more details about ICE negotiation by going to &#8220;about:webrtc&#8221; and viewing the Connection Log section.<\/p>\n<p>Now that you can see if ICE restart is happening, it is time to talk about one of the gotchas encountered along the way to making this work.\u00a0The first, most surprising realization for us was that more than one WebRTC site was requesting an ICE restart with the creation of the very first connection.\u00a0We now have specific checks for handling that case, which led to (hopefully) better handling of overlapping restart cases.\u00a0Any testing of conditions that lead to multiple and\/or overlapping restarts are always appreciated!<\/p>\n<p>For the record, ICE restart is only different from initial ICE negotiation in that during restart media continues to flow over the original network connections while the new connection is negotiated.\u00a0In other words, just begin again!<\/p>\n","protected":false},"excerpt":{"rendered":"Where do we, well, start? First a quick word about ICE itself. ICE stands for Interactive Connectivity Establishment, and, at its root, is how your browser discovers exactly how to connect to other computers through a NAT for WebRTC calls.\u00a0ICE restart becomes necessary when network conditions change such as when transitioning from WiFi to a [&hellip;]","protected":false},"author":1397,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[296764,297828],"coauthors":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Just Begin Again (ICE Restart) - 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\/just-begin-ice-restart\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Just Begin Again (ICE Restart) - Advancing WebRTC\" \/>\n<meta property=\"og:description\" content=\"Where do we, well, start? First a quick word about ICE itself. ICE stands for Interactive Connectivity Establishment, and, at its root, is how your browser discovers exactly how to connect to other computers through a NAT for WebRTC calls.\u00a0ICE restart becomes necessary when network conditions change such as when transitioning from WiFi to a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/\" \/>\n<meta property=\"og:site_name\" content=\"Advancing WebRTC\" \/>\n<meta property=\"article:published_time\" content=\"2016-09-26T19:19:51+00:00\" \/>\n<meta name=\"author\" content=\"Michael Froman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Froman\" \/>\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\/just-begin-ice-restart\/\",\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/\",\"name\":\"Just Begin Again (ICE Restart) - Advancing WebRTC\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#website\"},\"datePublished\":\"2016-09-26T19:19:51+00:00\",\"dateModified\":\"2016-09-26T19:19:51+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/0abaf725fae06cf7c5341e7e81f08f13\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/webrtc\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Just Begin Again (ICE Restart)\"}]},{\"@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\/0abaf725fae06cf7c5341e7e81f08f13\",\"name\":\"Michael Froman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/image\/801649166fafbde0a9e04f3b796f332b\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e2a2be17b9bb8a1d4d7427c810996388?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e2a2be17b9bb8a1d4d7427c810996388?s=96&d=mm&r=g\",\"caption\":\"Michael Froman\"},\"description\":\"crossing IP communication streams since 2005\",\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/author\/mfromanmozilla-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Just Begin Again (ICE Restart) - 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\/just-begin-ice-restart\/","og_locale":"en_US","og_type":"article","og_title":"Just Begin Again (ICE Restart) - Advancing WebRTC","og_description":"Where do we, well, start? First a quick word about ICE itself. ICE stands for Interactive Connectivity Establishment, and, at its root, is how your browser discovers exactly how to connect to other computers through a NAT for WebRTC calls.\u00a0ICE restart becomes necessary when network conditions change such as when transitioning from WiFi to a [&hellip;]","og_url":"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/","og_site_name":"Advancing WebRTC","article_published_time":"2016-09-26T19:19:51+00:00","author":"Michael Froman","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Michael Froman","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/","url":"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/","name":"Just Begin Again (ICE Restart) - Advancing WebRTC","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/#website"},"datePublished":"2016-09-26T19:19:51+00:00","dateModified":"2016-09-26T19:19:51+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/0abaf725fae06cf7c5341e7e81f08f13"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/webrtc\/just-begin-ice-restart\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/webrtc\/"},{"@type":"ListItem","position":2,"name":"Just Begin Again (ICE Restart)"}]},{"@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\/0abaf725fae06cf7c5341e7e81f08f13","name":"Michael Froman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/image\/801649166fafbde0a9e04f3b796f332b","url":"https:\/\/secure.gravatar.com\/avatar\/e2a2be17b9bb8a1d4d7427c810996388?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e2a2be17b9bb8a1d4d7427c810996388?s=96&d=mm&r=g","caption":"Michael Froman"},"description":"crossing IP communication streams since 2005","url":"https:\/\/blog.mozilla.org\/webrtc\/author\/mfromanmozilla-com\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/posts\/150"}],"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\/1397"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/tags?post=150"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/coauthors?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}