Wowza Media WebRTC Group Call with RTMP and VR

WebRTC Conferencing for Wowza Media Server. RTMP and VR subscribe.

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

Example of subscribing to RTMP streams in a conference room, with publishing notified by the custom module. With a VR configuration using the VR 360 Plugin.

Using the custom group websocket provider for Wowza. Notification of RTMP published streams to subscribe to is possible. If also configured using the VR360 plugin, playing and rendering a VR RTMP stream is possible.

A token authentication for the RTMP streams helps filter notifications for the group call. Token , title and vr properties can be added as params to the stream filename.

` d14b58fe-c245-00b8-dc23-cb3ab6c0b55d?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3ZWJydGMiLCJpYXQiOjE2MzczMzAyNTksImV4cCI6MTY2ODg2NjI1OSwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsInN0cmVhbU5hbWUiOiJDNkx4Nmt1NkZFWGdLdHQifQ.4_38rdgyqWabGvoV6WZREjrqevVeGIgCKK7xOknwGx4&title=test&vr=true

For Wowza RTMP streams require to run through a Transcoder template to convert AAC audio to OPUS with video passthrough. The Transcoder output file requires a streamname template of mp4:${SourceStreamName}_room

Transcoders are filtered to both RTMP and WeGL merger streams for recording via the websocket provider module.

If RTMP streams are to be subscribed as HLS, which may provide 608 caption support. Enable the adhocHls config.

   <div class="flex w-full">
          <div id="wowza-conference-rtmp" class="has-settings"></div>
  <script type="text/javascript">
  	var player = flowplayer("#wowza-conference-rtmp", {
    "clip": {
        "live": true,
        "sources": [
                "src": "djq574AA8FHQUEFD1",
                "type": "application/webrtc"
        "title": "Participant 1",
        "vr": false
    "rtc": {
        "adhocHls": false,
        "applicationName": "webrtc/room1",
        "autoStartDevice": true,
        "buttons": false,
        "conference": {
            "container": "#conference-container",
            "hlsTemplate": "https://{serverURL}/{appName}/{streamName}/playlist.m3u8"
        "publishToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3ZWJydGMiLCJpYXQiOjE2MzczMzAyNTksImV4cCI6MTY2ODg2NjI1OSwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsInN0cmVhbU5hbWUiOiJDNkx4Nmt1NkZFWGdLdHQifQ.4_38rdgyqWabGvoV6WZREjrqevVeGIgCKK7xOknwGx4",
        "publisher": true,
        "seperateScreen": true,
        "server": "wowza-conference",
        "serverURL": ""
    "share": false

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