M59
WebRTC M59 branch (cut at r17657)
WebRTC M59, currently available in Chrome's beta channel and as native libraries for Android and iOS, contains 15 new features and over 40 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.
A fix for a security vulnerability in M58 has been merged into M58 (available in Chrome 58.0.3029.96) and is also present in M59. See the details in the public PSA on the discuss-webrtc forum.
Normally, ICE candidates are only gathered after RTCPeerConnection.setLocalDescription is called, because this is the point at which the PeerConnection knows how many media components it needs to gather candidates for. However, the iceCandidatePoolSize member of RTCConfiguration, implemented in M59, instructs the PeerConnection to gather ICE candidates before this occurs, in order to speed up call setup. For more information, see its description in the spec.
A major update to the echo cancellation functionality (AEC3) is now available for testing. The main benefits with the new functionality are improved echo cancellation performance and more rapid recovery from issues in the audio buffer pipeline. For this release, AEC3 is still off by default and its performance will be evaluated in experiments to apply further tuning. In Chrome M59 it can be controlled via the Chrome flag “WebRTC Echo Canceller 3”.
It is now possible to compile and debug AppRTCMobile inside Android Studio. WebRTC Java code can also be developed inside Android Studio using this approach. This gives access to Android Studio’s extensive development and debugging tools. More information on how to do this can be found here: https://webrtc.org/native-code/android/
It is now possible to get the RTP packet contributing sources (CSRCs) of receiving tracks. RTCPeerConnection.getReceivers() has been added, which returns RTCRtpReceiver with .track and .getContributingSources() support. See spec.
To improve the robustness of the bandwidth estimator on cellular and WiFi networks we've replaced the approach previously used (described here) with a less complex filter based on estimating the trend of the queuing delay. In addition, we've changed the way we're estimating the throughput of the network to make it more stable to short periods of no or very little throughput, which could throw off the old mechanism. Our experiments show that the impact of delay transients is reduced. The rmcat draft will be updated later to reflect these changes in the algorithm.
getUserMedia now supports the standard algorithm for processing video constraints, including support for 'ideal' values. See spec.
The internal denoiser of VP9 has been enabled by default. This will lead to improved visual quality in low light scenarios, with only slightly higher CPU utilization. More information is available in the feature issue.
Platform | Issue | Description | Component |
All | Delete support for RTCP RPSI and SLI messages | Video | |
Native | iOS: remove use of deprecated APIs when moving from ios_deployment_target 7.0 to 9.0. | Build, Mobile (iOS) | |
Native | Remove webrtc::CriticalSectionWrapper and migrate to rtc::CriticalSection | Internals |
Type | Issue | Description | Component |
Feature | AEC3: major AEC functionality update | Audio | |
Feature | Calculate first-order-FEC-recoverable packet loss rate for audio and use it to adapt Opus in real time. | Audio | |
Feature | Support N unsignaled audio streams | Audio | |
Feature | Set max bitrate for audio send stream based on RtpParameters | Audio | |
Feature | Add probe logging to RtcEventLog (and UMA?). | BWE | |
Feature | BWE can be too sensitive to delay spikes. | BWE | |
Feature | Support GCM encryption for SRTP | Network | |
Feature | QP statistics for WebRTC codecs | Stats | |
Feature | Improve bitrate probing at high bitrates. | Video | |
Feature | Perform probing when network route change. | Video | |
Feature | Enable vp9 denoiser by default | Video | |
Bugfix | Render signal is not stored to aecdump when AEC is disabled | Audio | |
Bugfix | AudioEncoderOpus::RecreateEncoderInstance uses old config_ for num of samples and num of channels | Audio | |
Bugfix | Memory leak in Windows Core Audio | Audio | |
Bugfix | Avoid cyclic dependency between RTC event log and audio network adaptor | Audio | |
Bugfix | WebRTC might pick the wrong CN payload id for sending | Audio | |
Bugfix | VoiceProcessThread busy | Audio | |
Bugfix | Feedback about packets sent on an old route may temporarily have a large effect on BWE. | BWE | |
Bugfix | webrtc::field_trial::FindFullName called too often | Cleanup | |
Bugfix | XGetImage errors are not always handled properly | DesktopCapture | |
Bugfix | CPU adaptation for HW encode | HardwareCodec | |
Bugfix | Make ProcessThread::DeRegisterModule and RegisterModule be called consistently on the same thread | Internals | |
Bugfix | QueueTask on windows don't execute DelayedTasks then under heavy load. | Internals | |
Bugfix | Incorrectly masked seq number for GCM IV. | Internals, Network | |
Bugfix | 4 microphones not supported in Windows core audio | Mic | |
Bugfix | Error thrown if Chrome receives subsequent offer with DTLS role that's not "actpass" | Network | |
Bugfix | PeerConnectionFactory requires initializing voice & video engines even in datachannel-only apps | PeerConnection | |
Bugfix | SCTP DataChannel packets with source ports 32768-49151 get filtered out | PeerConnection | |
Bugfix | Support Suite B cryptosuites for SRTP | PeerConnection | |
Bugfix | RTCStatsCollector retains pointers to closed data channels | Stats | |
Bugfix | Quality limited resolution stats are reported when quality scaler is disabled. | Stats, Video | |
Bugfix | VideoReceiveStream::Stats.total_bitrate_bps does not report the received bitrate when there is packet loss | Stats, Video | |
Bugfix | DCHECK fails in RtpFrameReferenceFinder::Vp9PidTl0Fix | Video | |
Bugfix | Video isn't played if codec name isn't correctly cased ("vp8" instead of "VP8") | Video | |
Bugfix | Improve performance of ParseRbsp() function. | Video | |
Bugfix | Cannot remove b=AS restriction once it has been applied | Video | |
Bugfix | Probe fails due to negative send delta time | Video | |
Bugfix | FrameBuffer can cause busy loops during shutdown | Video | |
Bugfix | PacedSender can busy loop while paused | Video | |
Bugfix | ThreadSanitizer: lock-order-inversion in RespectsMinTransmitBitrateAfterContentSwitch | Video | |
Bugfix | User-preferred audio device in content settings is not preferred over default device | Blink>GetUserMedia | |
Bugfix | getUserMedia gives 640x480 when constraints say 1280x720 | Blink>GetUserMedia | |
Bugfix | Chrome does not throw getUserMedia error when any other application is using camera on Windows | Blink>GetUserMedia, Blink>WebRTC | |
Bugfix | chrome.desktopCapture broken on Mac: does not mirror context menus and shows two cursor | Blink>GetUserMedia>Desktop | |
Bugfix | DesktopCapturer::Create(Window|Screen)Capturer() do not handle failures correctly. | Blink>GetUserMedia>Desktop, Services>Chromoting | |
Bugfix | "Always allow https://... to access your microphone" is not sticky. | Blink>GetUserMedia>Mic, UI | |
Bugfix | tab mirroring broken. local content flashes white and blue when page updates | Blink>GetUserMedia>Tab | |
Bugfix | Stream with disabled video track reports 2x2 resolution on loadedmetadata | Blink>MediaStream | |
Bugfix | CHECK failure: false in jsepsessiondescription.cc | Blink>WebRTC | |
Bugfix | can't cast from tab9 | Blink>WebRTC, Internals>Cast | |
Bugfix | Disabling (wait to enable) #enumerate-audio-devices feature on ChromeOS | Blink>WebRTC>Audio | |
Bugfix | Partial RTCRtpReceiver and RTCRtpContributingSource support | Blink>WebRTC>Network | |
Bugfix | Implement RTCConfiguration.iceCandidatePoolSize | Blink>WebRTC>PeerConnection | |
Bugfix | Using DXVA HW decoder for WebRTC fails | Blink>WebRTC>Video, Internals>Media>Codecs |
Type | Issue | Description | Component |
Feature | Add support for 64-bit architectures in build_aar.py. | Mobile (Android) | |
Feature | Make AppRTCDemo easy to use from Android Studio | Mobile (Android) | |
Feature | iOS: Add an option to specify preferred codec in AppRTCMobile | Mobile (iOS) | |
Feature | Add loopback launch argument functionality in AppRTCMobile | Mobile (iOS) | |
Bugfix | Incorrect frame size from Android HW H264 decoder | Video, Mobile (Android) | |
Bugfix | Implement getter for configuration in RTCPeerConnection | PeerConnection (iOS) | |
Bugfix | Chrome on Android: H264 HW decoding error since #447978 | Video (Android) | |
Bugfix | Inconsistent UI for Android screensharing | Blink>MediaStream, Blink>WebRTC (Android) |