PSA: WebRTC M58 Release Notes

3768 views
Skip to first unread message

Anatoli Davidson

unread,
Apr 5, 2017, 2:56:36 PM4/5/17
to discuss...@googlegroups.com

M58

WebRTC M58 branch (cut at r16937)


Summary

WebRTC M58, currently available in Chrome's beta channel and as native libraries for Android and iOS, contains over 20 new features and over 60 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.

Important PSAs

Fixed M57 regression in bandwidth limitation

A regression has been fixed that was introduced M57 and affects in how the "b=AS" SDP attribute is handled. This SDP attribute can be used to limit the maximum total bandwidth used by a media stream, and it's should be possible to set different values for different m sections. For details and a workaround for M57, see this PSA.

Features

Spec-compliant RTCPeerConnection.getStats

The promise-based getStats is released which (unlike the callback-based getStats) returns stats that follow the spec (Statistics Model, Identifiers for WebRTC's Statistics API). Most but not all stats are supported. The callback-based getStats is still available but we aim to deprecate it in a future release.

Adding support of Opus 120ms encoding in WebRTC

Starting from version 1.2-alpha, Opus supports direct encoding of audio frames with a duration up to 120 ms. Chromium does not include this Opus version in its third party dependency yet, but WebRTC has built up infrastructure to support 120ms encoding. Longer frames reduce transport overhead on low capacity networks. To utilize the upcoming Opus 120ms frame encoding, audio network adaptor has also been updated to allow frame length to adapt to 120ms.

RTCPeerConnection.setConfiguration

The setConfiguration method allows an application to modify the RTCConfiguration of an RTCPeerConnection. Specifically, it allows changes to the ICE servers and ICE transport policy, e.g., to specify new TURN credentials when the existing credentials expire. Previously, there was no workaround for this scenario aside from a full teardown of the connection. Another use case is changing the ICE transport policy depending on the phase of a call. For example, a call may begin with only relay connections (either to speed up call setup or to protect the user's privacy), then later switch to the "all" policy. Note that the iceCandidatePoolSize member of RTCConfiguration is still unsupported, but is planned to be implemented in M59.

Authenticated HTTP proxy

WebRTC can now make use of proxies that require explicit credentials, as long as the user has authenticated against said proxy at least once before initiating a WebRTC connection. Proxies that use Single-Sign-On or that do not require authentication continue to work as expected.

Script for generating WebRTC Android Library (.aar)

There now exists a script for generating WebRTC Android library (.aar). The script exists in tools-webrtc/android/build_aar.py and can be used to generate .aar-file that can be included in an Android Studio project that uses WebRTC. More information on how to use the script can be found at the top of the script.

Enable VP9 support in WebRTC HW decoders

There are existing VP9 HW decoder implementations in Chrome, i.e. DXVA based in Windows and V4L2/VAAPI based in Chrome OS. It is now possible to use these as external video accelerators in WebRTC calls where VP9 is used.

New video jitter buffer

The video jitter buffer has been rewritten from scratch. The new jitter buffer has been implemented as five classes (PacketBuffer, NackModule, FrameObject, RtpFrameReferenceFinder, FrameBuffer). The benefits of the new jitter buffer are lower code complexity resulting in easier maintenance and tuning. It opens up the possibility to implement transports other than RTP. The new design will enable the reduction of memcpys, but this requires further work. There should be no significant difference in behavior between the current and the new video jitter buffer.

Audio output debug recording

A debug recording of audio output is now generated when checking “Enable diagnostic audio recordings” in chrome://webrtc-internals. File recording of playout audio happens in the browser process close to the OS/sound system.

Deprecations


Platform

Issue

Description

Component

Chrome

7198

Remove support for manual reference counting in ObjC code

Cleanup

Chrome

684741

Removed Wave-based audio capture implementation on Windows

Audio

Chrome

7025

Remove outdated openssl defines.

Cleanup, Network

Chrome

7124

Delete VideoReceiveStream::Config::pre_render_callback

Video

Chrome

4306

Remove shared global SSRC database

Video

Native

7183

Remove Wave legacy audio capture implementation on Windows

Audio

Native

7158

Remove VideoRendererGui

Mobile, Video

Native

PSA

Delete header file webrtc/base/common.h

Internal

Native

4690

Removed VoEExternalMedia interface.

Audio

Native

4690

Removed VoEVideoSync interface.

Audio

Native

4690

Removed VoEAudioProcessing interface.

Audio

Native

4690

Removed unused and untested methods from VoERTP_RTCP interface.

Audio

Native

6829

Removed base/linux.cc/.h and linuxfdwalk.c/.h.

Internal

Native

6829

Removed base/dbus.cc/.h.

Internal


Features and Bugfixes

Chrome


Type

Issue

Description

Component

Feature

7093

Add support for 120ms frames in the audio network adaptor.

Audio

Feature

7097

Adding support of Opus 120ms direct encoding in WebRTC.

Audio

Feature

6303

Adding network adaptation to audio encoder.

Audio

Feature

6845

Logging audio network adaptor decisions in the event log

Audio

Feature

7160

Add tool for visualisation of the Audio network adaptor decisions

Audio

Feature

7199

Frame length controller should not switch to shorter frame lengths when it will cause a overuse.

Audio

Feature

7167

Optionally disable APM limiter in AudioMixer.

Audio

Feature

7215

Use FallbackDesktopCapturerWrapper for ScreenCapturerWinMagnifier

DesktopCapture

Feature

7196

Values stored in rtc::Optional does not print properly in tests

Internals

Feature

7118

Basic command line tool to print packet information from an RTC event log

Internals

Feature

6805

Implement support for setting constraints-related properties on MediaStreamTrack

SpecConformance

Feature

6991

video_replay: output RTP header contents when delivery fails

Video

Feature

6904

Adding transport feedback based packet loss estimation.

Video

Feature

5514

Jitter Buffer Rewrite.

Video

Feature

6423

Log delay-based bandwidth estimate

Video

Feature

6984

Add probe logging to RtcEventLog (and UMA?).

Video

Feature

685655

Launch bug for promise-based RTCPeerConnection.getStats

Blink>WebRTC

Feature

531883

Add debug recording to file of speaker output

Blink>WebRTC>Audio

Feature

Design doc

Use DirectX for faster screen capture on Windows

Blink>GetUserMedia>Desktop

Feature

687650

Enable VP9 support in WebRTC HW encoder and decoders

Internals>Media>Codecs

Feature

587453

PeerConnection.setConfiguration

Blink>WebRTC>Network

Feature

600399

Use assembler for OpenH264 encoding on Windows and Linux

Blink>WebRTC>Video

Bugfix

7272

Make Opus decoder go to CNG mode for 2-byte payloads

Audio

Bugfix

7144

Transmit correct number of bytes returned by the Opus encoder in DTX mode

Audio

Bugfix

7136

Allow residual echo detector to be enabled/disabled using AudioOptions

Audio

Bugfix

7087

AudioEncoderOpus can set bitrate that no audio can be encoded.

Audio

Bugfix

7083

Stop sending audio packets when the connection becomes unwritable

Audio

Bugfix

7039

disable APM clobbering for WebKit build

Audio

Bugfix

7258

StartupShutdownWithExternalADM sometimes enters a busy loop

Audio

Bugfix

7179

Don't recreate audio receive streams if they were previously unsignaled

Audio, PeerConnection

Bugfix

7043

Enable bitrate probing for audio streams.

Audio, Video

Bugfix

3062

GetStaticInstance subject to race

Audio, Video

Bugfix

6986

"stereo" parameter isn't handled correctly for Opus decoder

Audio

Bugfix

7237

FakeAudioDeviceModule runs a busy loop by default.

Audio

Bugfix

7116

Potential use are free in h264 packetizer

Internals

Bugfix

7054

current webrtc's NO_RETURN definition is conflicting with WebKit one

Internals

Bugfix

7151

Add support for multimedia timers to TaskQueue

Internals

Bugfix

7216

Add support for priorities to TaskQueue

Internals

Bugfix

7099

Allow applications to control the DTLS timeout

Network

Bugfix

7109

Allow STUN RTTs up to 60 seconds

Network

Bugfix

4947

Change UpdateIce to SetConfiguration in the JS PeerConnection API

PeerConnection

Bugfix

6972

Having a=crypto in an SDP offer causes exception in Canary

PeerConnection

Bugfix

7131

Add better comments to interfaces in api/ subdirectory

PeerConnection

Bugfix

3914

Data races in AsyncInvoker destructor [linux_tsan2]

PeerConnection

Bugfix

4180

Expose DtmSender from RtpSender (in C++, Java interfaces)

PeerConnection

Bugfix

6487

Should VideoCapturerTrackSource increase its reference count when sending message on the thread?

PeerConnection

Bugfix

6857

peerconnection_client tool not working

PeerConnection, SampleApps, Video

Bugfix

5208

webrtc stops playing video when SSRC of incoming RTP stream has changed

PeerConnection, Video

Bugfix

7011

RTX payload types are not updated in VideoReceiveStream when WebRtcVideoChannel2::SetRecvParameters is called.

Video

Bugfix

7017

FlexfecReceiveStreams are leaked when WebRtcVideoChannel2 is destroyed

Video

Bugfix

7211

Video scaling stuck at low resolution

Video

Bugfix

7255

Busy loop in PacedSender+BitrateProber

Video

Bugfix

7269

Busy loop in VideoReceiveStream

Video

Bugfix

7178

Video streams can get stuck in suspended state

Video

Bugfix

7125

Log which delay estimator type is picked by BWE.

Video

Bugfix

7246

NackModule will enter a busy loop when running_ == false

Video

Bugfix

7045

AV sync issue in WebRTC in 20% of streams

Video

Bugfix

6953

Video call no longer starts with scaled resolution on low initial bandwidth.

Video

Bugfix

6876

protection bitrate should include overhead as well

Video

Bugfix

7020

webrtcvideoencoderfactory grows codec list every time codecs/supported_codecs is called

Video

Bugfix

7154

Video decoder software fallback not reinitialized after ::Release()

Video

Bugfix

6998

Improve computational performance of bandwidth estimator

Video

Bugfix

7022

Add new simulations to test BWE at low bitrates

Video

Bugfix

7200

|event_| in RembWithSendSideBwe is never set

Video

Bugfix

7259

FakeNetworkPipe can cause a busy loop in PlatformThread

Video

Bugfix

697516

Picker list is too small when sharing tab only

Blink>GetUserMedia>Desktop

Bugfix

684162

DirectX screen capturer doesn't handle screen size changes properly

Blink>GetUserMedia>Desktop

Bugfix

692261

Very old frame emitted from tab capture after resume()

Blink>GetUserMedia>Tab

Bugfix

687750

Media Remoting should never admit initialization failed

Blink>GetUserMedia>Tab

Bugfix

693746

Cannot select camera in Chrome Capture Settings

Blink>GetUserMedia>Webcam

Bugfix

687502

webrtc::Ramp in webrtc/modules/audio_mixer/audio_frame_manipulator.cc is slow

Blink>WebRTC, Blink>WebRTC>Audio

Bugfix

612294

PowerSaveBlock activated even though there are no active PeerConnections

Blink>WebRTC

Bugfix

694278

Move AudioDebugFileWriter from content/ to media/

Blink>WebRTC>Audio

Bugfix

675193

Integer-overflow in webrtc::TimeStretch::SpeechDetection

Blink>WebRTC>Audio

Bugfix

686212

WebRTC data channel responds with old sctp draft on new sctp offer format

Blink>WebRTC>Network

Bugfix

439560

WebRTC cannot connect to TURN servers through HTTP proxies that require auth

Blink>WebRTC>Network





Bugfix

CL

Black boxes around cropped videos

Blink>GetUserMedia>Desktop


Native Android/iOS


Type

Issue

Description

Component

Feature

6937

Android AppRTCMobile: Swap between local and remote feed on the fullscreen.

Mobile (Android, iOS)

Feature

7023

Script to generate AAR-files for Android Studio.

Mobile (Android)

Feature

7088

Support new peerconnection certificate policy API in ObjC

Mobile (iOS), PeerConnection (Mac)

Feature

6545

AppRTCMobile - Capture from file instead of camera and save rendering to file

SampleApps (Android)

Feature

6290

Remove unnecessary thread in MediaCodecVideoEncoder on Android

Video (Android)

Bugfix

5582

Consolidate helpers_ios into webrtc/base/objc

Audio (iOS)

Bugfix

6382

Apple Non-Public API usage

Audio (iOS)

Bugfix

7187

PlatformThread on posix has a potential for a costly busy loop

Internals

Bugfix

6738

Handle multiple H264 codecs in SDP when reordering the codec list priority

Mobile (Android, iOS)

Bugfix

6751

AppRTCMobile not working on Galaxy S3 mini running Android 4.2.2

Mobile (Android)

Bugfix

7015

Camera1Session: Fatal error: Camera is being used after Camera.release() was called

Mobile (Android)

Bugfix

6715

Android log spam in loopback call: Assuming benign blocking error : [0x0000000e] Bad address

Mobile (Android), Network

Bugfix

7082

Allow applications to control ICE timers from RTCConfiguration

Mobile, PeerConnection

Bugfix

6651

Check failed: 0 == slice_height (0 vs. 1)

Mobile (Android), Video

Bugfix

6396

SecRandomCopyBytes does not build using Xcode 8 on iOS

SampleApps (iOS)

Bugfix

7206

MediaCodec decoder has trouble with low resolutions

Video (Android)

Bugfix

7008

Camera2Session calls onCameraError instead of onCameraDisconnected if the session gets disconnected during startup

Video (Android)

Bugfix

6841

webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h doesn't compile on macOS

Video (iOS)



Regards
Anatoli

dc_neo

unread,
Apr 5, 2017, 10:41:34 PM4/5/17
to discuss-webrtc
wow, it's impressive to do such big improvement.our team will keep tracking this project.

在 2017年4月6日星期四 UTC+8上午2:56:36,Anatoli Davidson写道:

Philipp Hancke

unread,
Apr 6, 2017, 1:55:44 AM4/6/17
to discuss...@googlegroups.com
would you folks mind sending webrtc relevant "intent to ship" like the unflagging of getStats to this list as well?
Also, is work scheduled for fixing https://github.com/webrtc/samples/issues/869?

Crossle Song

unread,
Apr 10, 2017, 11:36:31 PM4/10/17
to discuss-webrtc

It said File recording of playout audio happens in the browser process close to the OS/sound system. How to file recording playout on WebRTC native Android or iOS

在 2017年4月6日星期四 UTC+8上午2:56:36,Anatoli Davidson写道:

M58

Regards
Anatoli

Henrik Andreasson

unread,
Apr 18, 2017, 6:11:20 AM4/18/17
to discuss-webrtc
There is no suitable high-level API but one possible way is to use the VoEFile API.
Can't say for sure how long that API will be exist in its current shape.

--

---
You received this message because you are subscribed to the Google Groups "discuss-webrtc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrtc+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/discuss-webrtc/958b1d75-50bd-4fed-86a6-548c5faf757b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Crossle Song

unread,
Apr 18, 2017, 7:23:17 AM4/18/17
to discuss-webrtc
But it can not work record playout, only work record microphone audio

在 2017年4月18日星期二 UTC+8下午6:11:20,Henrik Andreassson写道:
To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrt...@googlegroups.com.

Henrik Andreasson

unread,
Apr 18, 2017, 10:15:57 AM4/18/17
to discuss-webrtc
Please report any issues here adding as much details as possible:
platform, how to reproduce etc. This thread is not the right context for discussions.

To unsubscribe from this group and stop receiving emails from it, send an email to discuss-webrtc+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/discuss-webrtc/c8ccadc8-c1a0-40d3-9d05-bf933cc5fc41%40googlegroups.com.

Anton Venema

unread,
Apr 25, 2017, 7:29:24 PM4/25/17
to discuss-webrtc
Chrome 58 seems to be sending multi-time aggregation packets (MTAP) for H.264 while in packetization mode 1 (non-interleaved), which does not allow MTAP. It looks like this is already fixed in Chrome 59, but I wanted to mention it here as well in case a minor update is coming to resolve this.
Reply all
Reply to author
Forward
0 new messages