April 4, 2018
Contributed by Jan-Ivar Bruaroey,
Firefox now implements the RTCRtpTransceiver API, a.k.a. stage 3 in my blog post “The evolution of WebRTC 1.0.” from last year. Transceivers more accurately reflect the SDP-rooted network behaviors of an RTCPeerConnection. E.g. addTransceiver()
(or addTrack
) now creates a receiver at the same time, which correlates better with the bi-directional m-line that begins life in the SDP offer, rather than being something that arrives later once negotiation completes. This lets media arrive early on renegotiation.
But most WebRTC sites today are still written the old way, and there are subtle differences to trip over. Web developers are stuck in a bit of limbo, as other browsers haven’t caught up yet. In light of that, we should probably dive right into two immediate breaking spec changes you might have run into in Firefox 59:
- Remote tracks are now muted and temporarily removed from their stream(s), rather than ended, in response to direction changes (e.g. from the poorly named
removeTrack
).
track.id
s at the two end-points rarely correlate anymore.
Importantly, this affects you whether you use transceivers or not. addTrack
(even addStream
) is just a tweaked version of addTransceiver
these days. This blog will look at how to handle this—tying up lose ends from last year’s blog post—and demonstrate how Firefox works. (more…)
February 26, 2018
Contributed by Philipp Hancke, doing things webrtc at appear.in
The WebRTC specification has changed quite a bit since the first version in 2011. Jan-Ivar gave a great summary of how it has evolved over the years in a previous blog post.
One of the central questions for web developers is when to display an incoming video stream. (more…)
November 3, 2017
Contributed by Nils Ohlmeier, Hacking on real time communications since 2002
Until very recently you had to be careful about the maximum message size you could send over a WebRTC data channel. Especially if the data channel had been established between Firefox and Chrome. See here for a very good explanation of the problem.
The good news is that bug 979417, a big contribution by Lennart Grahl, has landed in Firefox 57, which adds EOR handling to Firefox data channels.
(more…)
September 30, 2017
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.
(more…)
September 1, 2017
Contributed by achronopoulos@mozilla.com,
The channelCount
microphone constraint is now available in Firefox Beta. If you want to control the number of channels of audio input from a getUserMedia
call, this post is for you.
(more…)
June 5, 2017
Contributed by Jan-Ivar Bruaroey,
March 2018 update: Firefox 59 now implements transceivers (stage 3) as described in this article. Remote tracks are now muted and temporarily removed from their stream(s), rather than ended, in response to direction changes (e.g. from removeTrack). Listen to stream.onremovetrack
instead of track.onended
.
The WebRTC spec is nearing completion, going to Candidate Recommendation real soon. With Google planning to finish 1.0 in Chrome by the end of the year, it seems a good time to recap what this means, as far as changes to what folks are doing today.
Under the hood, the biggest remaining obstacle to advanced wire interop, is that, unlike Firefox, Chrome hasn’t implement the spec’s “Unified Plan” for multiple audio and video tracks yet. Be sad or happy, but this blog isn’t about bridging that gap through SDP mangling. At this point, it’s probably better to wait for Google to address this.
But web developers need to prepare, because the JavaScript API will be different. This may be a surprise to those who haven’t followed the spec. A good start is to look at what Firefox is already doing. But there’s more. I don’t mean superficial things like promises, which all browsers support now. Instead, expect a change in the media model. (more…)
June 2, 2017
Contributed by Jan-Ivar Bruaroey,
Two new microphone constraints got standardized last week, available now with adapter.js or Firefox Nightly:
{ autoGainControl: true, noiseSuppression: false }
Handy if you’re a musician or a doctor (or both), since audio in WebRTC, unsurprisingly, is tuned for talking heads by default, not guitar riffs or listening to heartbeats remotely.
Basically, Firefox and Chrome have had these since forever with vendor prefixes, but they’ve remained underappreciated. Maybe hearing the difference will help?
The following shows off other bits of the media capture spec as well. This demo only works in Firefox right now because it uses applyConstraints
, which Chrome doesn’t support just yet. (more…)
May 4, 2017
Contributed by Michael Froman, crossing IP communication streams since 2005
E10s (for electrolysis) adds multi-process to Firefox. With e10s, the parent Firefox browser process communicates with background child processes responsible for hosting web related content. For some users, depending on installed add-ons, e10s availability started as early as Firefox 48. In the effort to improve security and enable future additional sandbox restrictions on the content process, Firefox’s STUN address gathering now happens via Inter-Process Communication (IPC) in the parent process not in the content process. (more…)
April 6, 2017
Contributed by Nils Ohlmeier, Hacking on real time communications since 2002

With the landing of bug 1335939 in Firefox 54 we will finally turn on active ICE TCP connections by default.
Does ICE TCP matter for me?
In essence it means that Firefox will try opening ICE connections over TCP towards any other ICE endpoint which provides ICE TCP candidates where it is listening for incoming connections. The most common use case for this is Firefox now being able to make direct TCP connections to media servers without the help of TURN TCP. (more…)
March 15, 2017
Contributed by Nils Ohlmeier, Hacking on real time communications since 2002
If you ever were in the situation to try to find out why the video quality of your WebRTC call was not good, you probably have also sworn at the encrypted RTP and RTCP. Instead of trying to put log statements into your locally compiled Firefox version, you can now simply request logging of the RTP and RTCP packets.
Bug 1343640 adds support in Firefox version 55 to log the RTP header plus the first five bytes of the payload unencrypted. RTCP will be logged in full and unencrypted. (more…)