Handle a Remote Stream
The React Native SDK provides the following methods to handle a remote stream:
- subscribe(): To receive a remote stream.
- getMaxTalkers(): To know the count of maximum permissible active talkers.
- getTalkerCount(): To know how many talkers are expected to be received.
- setTalkerCount(): To opt for the number of active talkers that a user wants to receive.
Subscribe to a Remote Stream
Users must subscribe to the streams individually to receive media streams of other participants connected to a room. Unless a stream is not subscribed, the user will not receive anything.
When a new stream is added to a room, the streamAdded
callback is received with the stream object. To receive the stream, the user must subscribe to it by using the Enx.subscribe()
method.
Method: Enx.subscribe(remoteStreamID, Callback)
Parameters
Parameter | Data Type | Description |
---|---|---|
remoteStreamID | String | The remote stream object to subscribe. |
Callback | String | Error in subscription. |
Callback: streamSubscribed
: JSON Object. The user is notified that the stream has been subscribed.
Sample Code
/ You are notified about new Stream in RoomstreamAdded:event=>{ // Subscribe StreamEnx.subscribe(event.streamId,error=>{});}streamSubscribed :event=>{// Stream is subscribed}
Note: User must not subscribe to their local streams. EnableX does not return the audio and video of local streams. For more information, see Active Talkers. However, users receive their own screen sharing and canvas streaming as a publisher.
Handle Active Talkers
During a multi-party video conference, additional server and client endpoint resources are consumed. Therefore, EnableX sends only 6 streams of actively talking (generating sound) users in a room to each endpoint. Additionally, it sends 2 streams: screen sharing (Stream# 11) and canvas stream (Stream# 21) to the endpoints.
On getting connected to a room, your client endpoint receives the streamAdded
callback for all the streams (6+2) available in the room. You need to subscribe to each of these streams. Subsequently, EnableX sends out the updated Active Talkers list to each endpoint when there is a change in this list. This list is available in the JSON format and sent through the activeTalkerList
callback. The list has active talkers in ascending order, that is, the latest talker is listed at the top of the list. Therefore, you can expect to receive this event frequently in a noisy room.
Callback | Description |
---|---|
activeTalkerList | Includes the JSON shown below. |
{ "active" : true,"activeList": [{ "clientId" : "String","mediatype" : "audiovideo", // Enum: audiovideo, audioonly"name" : "String","reason" : "user","streamId" : Number,"videoaspectratio" : "16:9","videomuted" : Boolean}]}
The Active Talkers JSON is used for managing the UI and playing audio and video streams from remote users. To play a specific stream, a user needs the remote stream object related to the streamId
of a talker. Note that before playing a stream from the Active Talkers list, a user must have subscribed to all "dummy" streams received through the streamAdded
callback.
Sample Code
activeTalkerList: event => {var tempArray = [];tempArray = event;if (tempArray.length > 0) {this.setState({activeTalkerStreams: tempArray});}return (<View>{this.state.activeTalkerStreams.map(function(element, index) {return (<EnxPlayerView key={String(element.streamId)}streamId={String(element.streamId)}style={{ width: width, height: height }}/>);})}</View>);}
Note: The local stream is not included in the Active Talkers JSON list sent to an endpoint even if the endpoint is talking. Hence the Active Talker JSON list sent to each endpoint varies. A local stream must be used by a user to play the user's own stream.
Get The Maximum Permissible Talker Count
To know the maximum permissible Active Talkers you may receive and set, use the Enx.getMaxTalkers()
method.
Method: Enx.getMaxTalkers()
Callback: getMaxTalkersResponse
Sample Code
Enx.getMaxTalkers();getMaxTalkersResponse : event{// event: { "result": 0, "numTalkers": 6 }}
Get The Talker Count
It may be necessary to know the number of talkers that are expected to be received with the activeTalkerList
callback, that is, to know either the preset value of talkers or a custom value in effect specified by the application developer or opted by the endpoint user.
Method: Enx.getTalkerCount()
Callback: getTalkerCountResponse
Sample Code
Enx.getTalkerCount();getTalkerCountResponse : event{// event: { "result": 0, "numTalkers": 6 }}
Set The Talker Count
EnableX sets a maximum of 6 active talkers in the Active Talkers list with the activeTalkerList
callback. However, you may opt to receive fewer talkers at a client endpoint if required. This may either be a predefined value, r set at runtime in a connected session. If required, you can create a UI for the connected user to opt for the number of active talkers that the user wants to receive.
Method: Enx.setTalkerCount(numTalkers)
Parameter: numTalkers
: Numeric. The number of talkers you want to receive. The allowed range is between 0-6. Set it to any number between 1 to 6 to receive those many talkers in the list.
Setting it to 0 (zero) does not make the list empty. Instead, you will receive 3 audio streams but no video streams are carried.
Callback: setTalkerCountResponse
: JSON Object. Receive a notification about the number of talkers.
Sample Code
Enx.setTalkerCount(4);setTalkerCountResponse : event{// event: { "result": 0, "numTalkers": 4 }}