New changes for WebRTC in Chrome 26

A new version of Chrome is out, and with it changes in the WebRTC stack. We dug through the commit logs for Chrome 26, and found the following list of WebRTC bug fixes, enhancements, and updates that we thought were relevant to the OpenTok community:

Highlights

  • A lot of audio bugs in WebRTC were fixed dealing with crashes and non-standard audio bitrates
  • Chrome on Android can now be WebRTC-enabled by enabling a flag
  • Improvements to the connectivity stack in WebRTC
  • Ability to set media constraints for audio

Full list

  • Avoids crash in WebRTC audio clients for unsupported capture sample rates.
  • Avoids crash in WebRTC audio clients for 96kHz render rate on Mac OSX.
  • Enable webrtc build on android.
  • Set WebMediaPlayerMS network state to loading instead of loaded
    • This indirectly fixes the problem where WebRTC audio is muted upon refresh. The HTMLMediaElement will try to cache fully Loaded videos when the element is destructed. This will signal to the HTMLMediaElement that the player was destroyed when loading, so it needs to recreate WebMediaPlayerMS upon destruction of the media tag.
  • Allowing multiple MediaPlayers to connect to WebRtcAudioDeviceImpl by sharing one WebRtcAudioRenderer.
    •  The audio is gone when new PeerConnection is connecting to a media stream. What is happening is that the stream will pause the existing MediaPlayer and create new MediaPlayers to associated to it. But since we only allow one WebRtcAudioRenderer to connect to WebRtcAudioDeviceImpl, the new MediaPlayers audio won’t be able to associate to stream.

      This patch fixes the problem by allowing multiple MediaPlayers to connect to WebRtcAudioDeviceImpl by sharing one WebRtcAudioRenderer

  •  Add webrtc audio-mirroring flag for automated testing
  • Set MediaConstraints for audio to WebRTC
  • When both stun and turn server are provided, use the turn server as the stun server.
  •  This patch fixes two audio issues for webrtc hangout.
    • #1 Audio is muted when switching between the local stream to remote stream.
    • #2 It has glitches when switching between views.
      The first issue is fixed by storing the volume for local stream before muting, and recover the volume when it goes away. The second issue is fixed by re-using the |audio_renderer_| between different webmediaplayer.