Wowza Media WebRTC Group Call

WebRTC Conferencing for Wowza Media Server. Second participant.

Room Viewer

Note: Not a live demo, server configuration is just for example. For live working example try the Millicast Publisher and Subscriber example.

WebRTC Conferencing configuration for Wowza Media Server. Wowza Media Developer and full licence works with WebRTC.

Supplied is a custom example websocket signal server Wowza provider project for one to many and group call features.

The secondary Websocket Wowza provider project is required for signalling new room partipants after publishing begins. Subscribed streams of participants will be displayed in the configured conferenceContainer container selector.

HLS conferencing subscribing is possible with Wowza configuring the conferenceSubscribeHls config. A transcoder is required for each WebRTC stream to convert the Opus audio codec to AAC with a passthrough for video.

    <div class="max-w-screen-2xl h-auto my-auto">
          <div id="wowza-conference-2" class="has-settings"></div>
  <script type="text/javascript">
  	var player = jwplayer("wowza-conference-2", {
    "aspectratio": "16:9",
    "playbackRateControls": true,
    "plugins": {
        "../../js/webrtcpeakmeter-8.20.0.js": {},
        "../../js/webrtcpublisher-8.20.0.js": {
            "applicationName": "webrtc/room1",
            "autoStartDevice": true,
            "conferenceContainer": "#conference-container",
            "conferenceSubscribeHls": false,
            "floatedControls": true,
            "hlsTemplate": "https://{serverURL}/{appName}/{streamName}/playlist.m3u8",
            "publisher": true,
            "server": "wowza-conference",
            "serverURL": "",
            "settings": true,
            "toggleScreen": true
    "sources": [
            "appName": "webrtc",
            "file": "djq574AA8FHQUEFD",
            "live": true,
            "publisher": true,
            "type": "mp4"
    "width": "100%"

player.on("ready", function() {
player.on("selectedParticipant", (participant) => {
console.log("selected participant", participant);
}).on("unselectedParticipant", (e, participant) => {
console.log("unselected participant", participant);
}).on("participantleft", (sender) => {
}).on("participantfeatured", (sender) => {
}).on("participantunfeatured", (sender) => {
}).on("leaveroom", e => {
}).on("roomjoinfailed", e => {
}).on("existingparticipants", (sender) => {