WebRTC workflows in Wowza Streaming Engine

Wowza Streaming Engine™ media server software version 4.7.7 and later supports WebRTC streaming. This article describes the supported WebRTC functionality and workflows in Wowza Streaming Engine.

Notes: In earlier versions of Wowza Streaming Engine (4.5.0.02 - 4.7.6), limited WebRTC functionality was supported as a preview technology. We recommend that you update to Wowza Streaming Engine 4.7.7 to capitalize on the expanded functionality and enhancements.

About WebRTC


Web Real-time Communication (WebRTC) is an open source project to enable real-time communication of audio, video, and data in web browsers and native apps. WebRTC is designed for peer-to-peer connections but includes fallbacks in case direct connections fail. Encryption is mandatory for WebRTC streams, so you must configure Wowza Streaming Engine to use secure sockets layer (SSL). 

WebRTC is still gaining adoption, so not all browsers and mobile platforms support it. With Wowza Streaming Engine, you can ingest and play WebRTC streams with Mozilla Firefox and Google Chrome browsers on the desktop. At this time, Wowza Streaming Engine doesn't support ingest or playback of WebRTC streams on mobile platforms or in a live repeater (origin/edge) configuration.

Wowza Streaming Engine supports the following codecs for WebRTC:

Video Audio
  • H.264
  • VP8
  • VP9
  • Vorbis
  • Opus
  • Pulse Code Modulation (PCM) types PCMU and PCMA
 

Note: Not all browsers support all codecs. H.264 is the most widely supported WebRTC codec, but for best performance we recommend using VP8 video with Opus or Vorbis audio.

WebRTC workflows in Wowza Streaming Engine


WebRTC ingest and output

As with any other protocol supported by Wowza Streaming Engine, the simplest workflow is to ingest a WebRTC stream and then deliver it to viewers in the same format. Note that WebRTC outputs can consume a lot of bandwidth.

One-to-few and few-to-few WebRTC broadcasts

You can also ingest one or a few WebRTC streams and deliver them to a few viewers via WebRTC. As the number of connections grows, however, your performance may suffer. For more information about streaming to many viewers, see One-to-many and few-to-many WebRTC broadcasts.

One-to-many and few-to-many WebRTC broadcasts

When ingesting WebRTC streams that you want to deliver to many viewers, we recommend that you use the Transcoder feature in Wowza Streaming Engine to transcode the WebRTC stream into any standard output format, such as AAC audio with H.264 video. Then you can deliver the stream over Apple HLS, Adobe HDS, or MPEG-DASH, which enables you to scale your WebRTC solution without the significant bandwidth that would otherwise be required to deliver your streams to viewers with satisfactory quality.

To scale your delivery to viewers, you can also use the Stream Targets feature to send the stream to content delivery networks (CDNs) and services such as Wowza Streaming Cloud or Wowza Streaming Cloud Ultra Low Latency targets. For more information about stream targets, see Distributing live streams. For more information about Wowza Streaming Cloud and Wowza Streaming Cloud ultra low latency stream targets, see Scaling Wowza Streaming Engine with Wowza CDN.

Notes:
  • If your WebRTC stream uses H.264 video, only the audio needs to be transcoded so that your content can be delivered over the standard formats.
  • To send a WebRTC stream from Wowza Streaming Engine to a Wowza CDN endpoint, you must transcode it to RTMP or Apple HLS. Which protocol you should use depends on how you configure the Wowza CDN endpoint.
  • Sending your stream to a Wowza Streaming Cloud ultra low latency target will result in lower latency than if you were to stream to other Wowza Streaming Cloud targets, but it may not meet the sub-three-second latency other streaming workflows can achieve.

Known limitations of WebRTC in Wowza Streaming Engine


  • Data channels not supported – Wowza Streaming Engine only supports audio and video streaming via WebRTC. Support for a data channel, commonly used for text-based chat in WebRTC, hasn't been implemented.
  • Can't transcode into WebRTC – Wowza Streaming Engine must ingest a WebRTC stream in order to output WebRTC content. Using the Transcoder feature to transcode non-WebRTC content into a WebRTC stream isn't supported. However, we do support transcoding an ingested WebRTC stream into other formats. WebRTC does not support transcoded streams at this time.
  • Audio quality may vary – The differences in the way audio has been implemented in browsers are known to affect audio quality. This is a limitation of WebRTC and can't be fixed by Wowza Streaming Engine.
  • AAC audio not supported with WebRTC – Google Chrome and Mozilla Firefox don't support AAC audio over WebRTC. WebRTC streams with AAC audio are played as video-only.
  • WebRTC over TCP bitrate is limited – Depending on your publishing workflow and browser, WebRTC over TCP may be limited to a bitrate of 400 Kbps. We recommend using our WebRTC publish example with Google Chrome to avoid this bitrate limit.
  • Limited support for STUN – Full session traversal utilities for NAT (STUN) negotiation isn't supported. Currently, Wowza Streaming Engine only supports traversal of symmetric NATs. A single STUN transport configuration (TCP or UDP) must be supplied using the webrtcIceCandidateIpAddresses property.
  • NON-BUNDLE in SDP not supported – Wowza Streaming Engine doesn't support NON-BUNDLE in the session description protocol (SDP) exchange. The second stream will be ignored.
  • SIP not supported – Wowza Streaming Engine doesn't support the session initiation protocol (SIP).
  • Limited error correction – The Wowza Streaming Engine implementation of WebRTC doesn't support forward error correction, retransmission to support low-bandwidth uses, or RTP error correction.

More resources