/

RTCConferenceParticipant in Red5 Pro WebRTC SDK


The 10.0.0 release of the Red5 Pro WebRTC SDK introduced a new client to be used in establishing a connection and streaming session with the Red5 Pro server: RTCConferenceParticipant.

The RTCConferenceParticipant is an extension of RTCPublisher that receives additional tracks to playback multiple audio sources along with a single composited video of all participants in the conference group.

Read more about an RTCPublisher from the Publisher Documentation

The RTCConferenceParticipant differs from a RTCPublisher in that it requests to join a conference room while simulataneuosly starting a broadcast. Once the RTCConferenceParticipant has joined the room it is delivered 3 recvonly audio tracks and 1 recvonly video track.

The 3 audio tracks are considered the "loudest talkers" minus the current audio being broadcast out - typically referred to as a "mix-minus".

The 1 video track is a video composite of the video streams of all the RTCConferenceParticipants in the group conference. Because of this, integrating a RTCConferenceParticipant into your application will most likely require a Mixer Node.

Read more about the Red5 Pro Mixer.

Requirements

Mixer Node

Because the video delivered to each RTCConferenceParticipant is a composite of all participants in the conference group, you will most likely need to deploy a [Red5 Pro Mixer] (https://www.red5pro.com/docs/special/mixer/using-mixer) as part of your solution.

Group Provision

Before Joining a Conference Group as a Participant, a Group Provision needs to be available on the server.

Here is an example of a provision to POST to the server:

{
  guid: 'live',
  context: 'live',
  name: 'group01',
  level: 0,
  isRestricted: false,
  parameters: {
    group: 'webrtc',
    audiotracks: 3, 
    videotracks: 1
  },
  restrictions: [],
  primaries: [],
  secondaries: []
}

Where the context is the application context you are streaming to (default is live) and name is the name of the Conference Group.

To post the provision, make a HTTP POST request to the server endpoint using:

https://<your-red5pro-deployment>/cluster/api?action=provision.create

Configuration Parameters

The RTCConferenceParticipant is an extension of RTCPublisher. As such, it has the same configuration parameters along with the following additional:

PropertyRequiredDefaultDescription
groupName[x]group01The name of the conference group the participant will be joining.

Events

The RTCConferenceParticipant is an extension of RTCPublisher. As such, it has the same lifecycle events with the following additional accessible from the RTCConferenceParticipantEventTypes object:

AccessNameMeaning
RTCConferenceParticipantEventTypes.MEDIA_STREAMConference.MediaStreamThe event will be fired once the MediaStream assembled with the 3 audio tracks and 1 composite video track is delivered to the RTCConferenceParticipant. The MediaStream will be accessible from the event on data.stream and can be used to assign as the srcObject to an HTML video element for playback.

Example

The following is an example of creating a RTCConferenceParticipant and requesting to join a group broadcast.

Note the app init configuration attribute is a combination of the live app context and the group name.

import { RTCConferenceParticpant } from 'red5pro-webrtc-sdk'

const start = async () => {
  const participant = new RTCConferenceParticipant()
  participant.on('Conference.MediaStream', event => {
    const { data: { stream } } = event
    conferenceVideoElement.srcObject = stream
  })
  await participant.init({
    streamName: 'participant1',
    groupName: 'group01',
    app: 'live/group01'
  })
  await participant.publish()
}