Note: A working live example to demonstrate live WebRTC publishing and subscribe features.
A demonstration of multi bitrate WebRTC simulcast support with Millicast. Chrome and Firefox support multi layer bitrates for H264 and VP8 codecs via WebRTC simulcast features.
Each level can be configured with a maximum rate, and then a downscale resolution value. The main bitrate selection menu updates the bitrate of the first high bitrate level.
In the future with AV1 codec support, simulcast layer features are supported with the codec and therefore simulcast is not required.
Simulcast is also supported using Millicast's WebRTC OBS encoder. In the settings configure the publish token, the stream name and check the simulcast option.
{
"millicast": {
"accountId": "",
"publishToken": "",
"codec": "h264"
},
"rtc": {
"autoStartDevice": true,
"server": "millicast",
"simulcast": true,
"sendEncodings": [
{ "rid": 'high', "maxBitrate": 1500000, "active": true, "priority": "high"},
{ "rid": 'middle', "maxBitrate": 500000, "active": true, "scaleResolutionDownBy": 2.0},
{ "rid": 'low', "maxBitrate": 100000, "active": true, "scaleResolutionDownBy": 4.0}
],
"iceServers": [
{
"urls": [
"stun:stun.l.google.com:19302",
"stun:stun1.l.google.com:19302",
"stun:stun2.l.google.com:19302",
"stun:stun3.l.google.com:19302",
"stun:stun4.l.google.com:19302"
]
}
],
"publisher": true,
"toggleScreen": true
}
}
<div class="flex w-full">
<div id="millicast-simulcast" class=""></div>
</div>
<script type="text/javascript">
var player = flowplayer("#millicast-simulcast", {
"clip": {
"live": true,
"sources": [
{
"src": "C6Lx6ku6FEXgKtt",
"type": "application/webrtc"
}
]
},
"millicast": {
"accountId": "huaHNT",
"codec": "h264",
"publishToken": "31ae7f65a04762b5e44b56b0eb2b2cd6dae169c05d13955af09c526399378592"
},
"rtc": {
"autoStartDevice": true,
"iceServers": [
{
"urls": [
"stun:stun.l.google.com:19302",
"stun:stun1.l.google.com:19302",
"stun:stun2.l.google.com:19302",
"stun:stun3.l.google.com:19302",
"stun:stun4.l.google.com:19302"
]
}
],
"publisher": true,
"sendEncodings": [
{
"active": true,
"maxBitrate": 1500000,
"priority": "high",
"rid": "high"
},
{
"active": true,
"maxBitrate": 500000,
"rid": "middle",
"scaleResolutionDownBy": 2.0
},
{
"active": true,
"maxBitrate": 100000,
"rid": "low",
"scaleResolutionDownBy": 4.0
}
],
"server": "millicast",
"simulcast": true,
"toggleScreen": true
},
"share": false
});
</script>