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.
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).
It's also important to note that while WebRTC is gaining adoption, not all browsers and mobile platforms support it at this time. With Wowza Streaming Engine, you can ingest and play WebRTC streams with Mozilla Firefox and Google Chrome browsers on desktops. At this time, we don't support ingest or playback of WebRTC streams on mobile platforms or in a live repeater (origin/edge) configuration.
In Wowza Streaming Engine, the following audio and video codecs are supported for WebRTC:
- Video: VP8, VP9, H.264
- Audio: Opus, Vorbis, PCMU, PCMA
Note: Not all browsers support all codecs. We recommend that you use VP8 video with either Opus or Vorbis audio for the best performance, but H.264 is the most broadly supported WebRTC codec.
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.
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.
- 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
At this time, 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 yet.
- 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.
- 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 the Google Chrome browser to avoid this bitrate limit.
- Limited support for STUN
Full session traversal utilities for NAT (STUN) negotiation isn't supported. Currently, we only support 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
At this time, the Wowza Streaming Engine implementation of WebRTC doesn't support forward error correction, retransmission to support low-bandwidth uses, or RTP error correction.