On April 20, 2022, Arin welcomed Dr. Karl Stolley for a progress report on WebRTC browser implementation. 

Karl is an Associate Professor of Information Technology & Management Illinois Institute of Technology where he teaches undergraduate and graduate courses on a range of web development topics, including one on WebRTC. He is also the author of Programming WebRTC: Build Real-Time Streaming Applications for the Web, currently in beta release with Pragmatic Programmers. 

Karl began with a warning: As with any specification, WebRTC is not now, or ever in the future, going to enjoy a perfect implementation in any browser. There is no golden point on the horizon we are aiming for. There is always going to be something that lags and it will always be a moving target. Especially with older versions of the browsers always hanging around. 

That being said, WebRTC implementations have never been as robust or as uniform as they are right now. This is especially true with the release of Safari 15.4. There is no need or excuse to exclude any major browser on the market when doing WebRTC development. And it is absolutely possible to write code that gracefully supports much older browsers. Karl advocates for always providing at least baseline support. 

Below are the lingering issues that Karl reported on in his discussion. His slides are available at ks4.us/webrtc.live.

Firefox: Major Issue

Firefox: Minor Issues

  • FIXED! Missing setConfiguration(); edge case for presenting new set of ICE servers, for example. Resolved bug: https://bugzil.la/1253706

Chrome: Major Issue

  • Chrome appears to be hung up waiting for the SCTP ndata specification (RFC 8260). SCTP ndata will improve send queue and EOR problems, and effectively remove the upper limits to RTCDataChannel message sizes (currently at ~16KiB)—a problem even in Firefox’s blob implementation.

Safari (MacOS & iOS) Major Issues

  • FIXED, as of Safari 15.4: Argumentless, signaling state-based calls to setLocalDescription(). Of course, plenty of older Safaris in circulation means including manual calls to createOffer() and createAnswer() and passing results into setLocalDescription().
  • FIXED, as of Safari 15.4: No auto rollback on setRemoteDescription() or manual rollback with setLocalDescription({ type: 'rollback' }). In other words, perfect negotiation now works on Safari, as of Safari 15.4. Safari 15.4 Release Notes.

Safari: Media Issues

  • FIXED, as of Safari 14.1: Correct implementation of the mute and unmute events and event-handler properties on MediaStreamTrack. Still unsafe to use those events because of older Safari implementations, however.
  • NEW, Safari 15: The autoplay attribute on streaming videos is not behaving correctly. He’s replicated this consistently on iOS and iPadOS, but intermittently on MacOS. Workaround: a timed, artificial click event that calls play() on the video element. FIXED, as of Safari 15.3. See https://karlstolley.github.io/safari-15-autoplay/
  • New, unconfirmed, as of Safari 15: Incorrect video-element mattes on portrait mode videos. He has replicated this consistently on iOS but never tracked down the source of the error (HTML? JavaScript? even CSS?). Good argument for why you should do visual regression testing on all your WebRTC apps!

The episode concluded with a a number of questions from our viewers, including ones on changes in Chrome 100, frameworks for handling WebRTC calls for multiple versions of a browser, native UI and permissions across browsers, performance/latency impacting different binary types, closed captioning, and whether WebRTC adequate for the Metaverse. To hear the answers to these questions and more:

Watch Episode #66!

UP NEXT! WebRTC Live #67: Reducing Complexity and Latency for WebRTC with Subspace
Wednesday, May 11 at 12:30pm Eastern.
Register today!

Do you have a topic that you would like to see discussed on WebRTC Live? Let us know by emailing news@webrtc.ventures.

Never miss an episode of WebRTC Live, our webinar series hosted by WebRTC.ventures Founder and CEO, Arin Sime. We feature the latest use cases and technical updates to this increasingly popular coding standard for live video. Watch past episodes on our WebRTC Live page, our YouTube channel, and on our blog. Better yet, use the form in the sidebar to join our mailing list and be among the first to hear about upcoming episodes and the latest news in WebRTC!

Recent Blog Posts