...
Since build 5.2.1056 WebRTC Selective Forwarding Unit (SFU) is supported with any tracks count publishing and playing in one WebRTC connection (Simulcast). THis This feature may be used for:
- publishing a strem in a number of encodings (for example, 720p, 360p, 180p) with quality switching on the fly
- video and audio chat rooms building
...
Code Block | ||
---|---|---|
| ||
codecs_exclude_sfu=alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,flv,mpv,vp8,h265
webrtc_cc_min_bitrate=1000000
profiles=42e01f,640028 |
...
1. Open SFU client example in browser, for example https://test1demo.flashphoner.com:84448888/client2/sfu/examples/client/main.html, enter server URL, room name, pin code and user name, then click Enter
2. User1 stream is publishing in ROOM1 room
...
Name | Description | Example |
---|---|---|
roomName | Room name | ROOM1 |
participants | Participants list | [] |
nickName | User name | User1 |
outgoingTracks | Streams publishing list | [] |
incomingTracks | Streams playing list | {} |
id | Mediasession id | 9de9107c-ce5f-4d6b-b7d6-ea233d691d09 |
codec | Video or audio codec | H264 |
width | Video width | 1280 |
heigth | Video height | 720 |
fps | Video FPS | 30 |
bitrate | Video or audio bitrate, bps | 265368 |
sampleRate | Audio sample rate, Hz | 48000 |
channels | Audio channels count | 2 |
alive | Is stream active | true |
type | Stream type | VIDEO |
composite | Stream includes a set of tracks | true |
tracks | Tracks list in composite stream | {} |
SFU streams availablility as WCS streams
Since build 5.2.1068 it is possible to bridge SFU streams to WCS as usual WebRTC streams. This feature is enabled by default with the following parameter
Code Block | ||
---|---|---|
| ||
sfu_bridge_enabled=true |
In this case, for every participant video stream will be available as{room}-{participant}-VIDEO
and audio stream will be available as {room}-{participant}-AUDIO
. Those streams are visible in statistics page
Code Block | ||
---|---|---|
| ||
-----Stream Stats-----
...
streams_viewers=ROOM1-User1-AUDIO/0;ROOM1-User1-VIDEO/0
streams_synchronization=ROOM1-User1-AUDIO/0;ROOM1-User1-VIDEO/0 |
may be played from server
may be recorded by REST API or added to mixer.
When screen is published, it is available as {room}-{participant}-VIDEO-screen
, for example
Code Block | ||
---|---|---|
| ||
-----Stream Stats-----
...
streams_viewers=ROOM1-User1-AUDIO/0;ROOM1-User1-VIDEO-screen/0;ROOM1-User1-VIDEO/0
streams_synchronization=ROOM1-User1-AUDIO/0;ROOM1-User1-VIDEO-screen/0;ROOM1-User1-VIDEO/0 |
If SFU stream is published in a number of qualities, it will be available at WCS side as maximum quality stream which is publishing, for example 720p. If this quality is stopped (for example, participant channel becomes worse), WCS stream will be automatically switched to the next available quality, fro example 360p.
Known limits
If participant publishes more than one stream from camera, only the first published stream will be available at WCS side.
TURN support
A standard RTCPeerConnection
object is used in browser to publish and play audio and video tracks, so this object should be configured properly to relay a media traffic via TURN server. For example, all the streams are published directly to WCS instance in SFU Two Way Streaming example:
Code Block | ||||
---|---|---|---|---|
| ||||
pc = new RTCPeerConnection();
... |
The code should be changed as follows to use a TURN server, for example, internal WCS TURN server:
Code Block | ||||
---|---|---|---|---|
| ||||
let connectionConfig = {
iceServers: [
{
urls: 'turn:wcs:3478?transport=tcp',
credential: 'coM77EMrV7Cwhyan',
username: 'flashphoner'
}
],
iceTransportPolicy: "relay"
};
pc = new RTCPeerConnection(connectionConfig);
... |
Where:
wcs
- WCS server address;flashphoner
- WCS internal TURN server default username;coM77EMrV7Cwhyan
- WCS internal TURN server default password
In this case all the media traffic will pass through the WCS internal TURN server. This feature may be also used to wrap WebRTC traffic to TCP if the client has a bad channel, because WCS does not support TCP transport for SFU streams.
Known problems
1. A stream captured from a screen window simulcast publishing will crash Chrome browser tab on minimizing this window
Symptoms: when stream is capturing from active screen window, Chrome tab crashes if this window is minimized by user
Solution: there is the Chromium bug, a stream capturing from a screen window should be publihed in only one quality (no simulcast) until this bug is fixed (in Chrome build 98.0.4736.0)