Using PlainRtpTransport for Simulcast ingesting

BTW, until we have proper sender side BWE done, you can use an undocumented parameter in router.createWebRtcTransport():

* @param {Number} [initialAvailableOutgoingBitrate=600000] - Initial available
*   outgoing bitrate (in bps) when the endpoint supports REMB or Transport-CC.
* @param {Number} [minimumAvailableOutgoingBitrate=300000] - Minimum available
*   outgoing bitrate (in bps).

If you set minimumAvailableOutgoingBitrate: 2000000, the availableBitrate will never go below that value (even if the received REMB feedbacks say the opposite). Such an option is not documented because it’s a temporal hack until we do proper BWE.

1 Like

Thanks. We don’t queue packets in mediasoup (I mean, packets are sent immediately to consumers, without “pacing” them), so hopefully that issue (even if it still exists) should not affect us.

Since mediasoup acts simply as a packet router, you can’t change the encoding bitrate in a continuous way as the browser does. So I think is a bit difficult to use google-cc or other similar control algorithms.
You should quantize the control action. Instead, you could choose the FEC to apply to outgoing flows.

I know about SFUs (proprietary SFUs) that use libwebrtc just for sender side BWE and it works fine (in fact it already works fine for us). The BWE lets mediasoup know the estimated available bandwidth of a receiving transport so it can accommodate to it by forcing the Consumers to up/down switch the selected spatial and temporal layers. Of course mediasoup cannot change the encoding bitrate of a stream, but it can filter spatial and temporal layers dynamically (as it already does) to fulfill the available outgoing bitrate.

BTW are you planning to make such a code public? We don’t know much about GStreamer and it would be extremely cool to have an example code about generating video simulcast with it.

Yes, I should fix some minor issues and adapt the signaling protocol in order to use the one implemented in your demo.

2 Likes

@vpalmisano,
I am with @ibc in Naples at the Janus conference and would love to see your sample gstreamer pipeline script with the multiple ssrc that you are using as the PlainRtpTrandport producer so I can use it as a starting point to get my feet wet with mediasoup
Thanks in advance.
Regards,
Anand Setlur

Hi @vpalmisano, the “devel” branch with work-in-progress transport-cc is now in GitHub:

https://github.com/versatica/mediasoup/tree/devel

We are still having some issues with the probation. It seems that probation packets or their received feedbacks are not being properly processed and they make the sender-side BWE to decrease sometimes. Investigating it.

NOTE: You need to update your mediasoup-client v3 as well (just use the latest NPM version or the “v3” branch), otherwise it won’t work with transport-cc.

@vpalmisano,
Could you share with us the gstreamer video simulcast example. Thanks in advance

2 Likes