WebRTC M77 Release Notes
WebRTC M77 branch (cut at r28685)
WebRTC M77, currently available in Chrome's beta channel, contains 16 new features and over 70 bug fixes, enhancements and stability/performance improvements. As with previous releases, we encourage all developers to run versions of Chrome on the Canary, Dev, and Beta channels frequently and quickly report any issues found. Please take a look at this page, for some pointers on how to file a good bug report. The help we have received has been invaluable!
The Chrome release schedule can be found here. Native libraries for Android and iOS are built on a weekly basis and are available on JCenter and CocoaPods; the Changelog is available here.
This change affects endpoints which use the MID/RSID RTP header extensions to demultiplex RTP streams instead of SSRCs and are not compliant with BUNDLE specification.
The MID and RSID RTP header extensions are used to demultiplex RTP streams that share the same transport. PeerConnections in “Unified Plan” mode will negotiate these by default. Previous versions would always attach both header extensions in every sent RTP packet for the life of the connection. Starting with the M77 release the behavior has changed so that the header extensions will be omitted after RTCP feedback is received for that RTP stream, reducing RTP packet overhead. Please see webrtc:10078 for more details
Improved browser tab capture UX
When users share a browser tab using getDisplayMedia() Web API or desktopCapture() extension API, a new infobar at the top of the shared tab and an outline highlighting the shared content will appear, making it easier to control the content that is being shared. Sharing of browser content through tab capture offers better end-user privacy as no other screen content such as notification will be visible and the capture process is typically more CPU efficient than window/screen capture.
In the new UI, the infobar is implemented on all desktop platforms, and the outline is supported on all desktop platforms except Mac.
Note: getDisplayMedia() API does not currently support changing the source of the tab capture (pre-existing behavior https://crbug.com/997126).
Shipping RTCPeerConnection.restartIce()
This method triggers negotiation needed and an ICE restart in the next offer-answer exchange. Restarting ICE can already be achieved by explicitly passing {iceRestart:true} as an argument to createOffer(). The benefit of restartIce() is that it works regardless of signalingState and is safe to call in the middle of an ongoing offer-answer exchange. This is part of Perfect Negotiation, which makes signaling in WebRTC race-free and less error-prone. For more details, see slides.
This API reports when failures occur when gathering ICE candidates. See spec.
This API allows updating the stream associations of a sender, which - unlike track IDs - are negotiated to match on both endpoints. This complements replaceTrack(). See spec.
Audio level metrics (audioLevel, totalAudioEnergy and totalSamplesDuration) have been added for local tracks to the “media-source” dictionary. These metrics were previously only available to remote tracks on the “track” dictionary due to a bug.
silentConcealedSamples, insertedSamplesForDeceleration and removedSamplesForAcceleration are now available in JavaScript (a bug prevented them from being exposed in M76).
The type PlatformFile has been deleted, together with corresponding overloads of the C++ API methods PeerConnectionInterface::StartRtcEventLog (PlatformFile replaced with RtcEventLogOutput interface) PeerConnectionFactoryInterface::StartAecDump (PlatformFile replaced with plain FILE*)
As part of cleaning up non-standard attribute names, the RTCDataChannelInit.maxRetransmitTime dictionary member has been removed. The standard value RTCDataChannelInit.max