Steps to reproduce
I cannot call RTCRtpSender.send() or RTCRtpReceiver.receive() with updated parameters. Any of these two functions throws InvalidAccessError.
I have an Audio+Video call between Chrome and Edge through a MCU. The call works well, but I need to be able to change the video ssrc coming from Chrome to Edge.
As a suggestion from a previous reported issue I want to call rtpReceiver.receive with the new ssrc, but I got InvalidAccessError.
I am able to create a new RTCRtpReceiver with the same exact parameters and works, but I cannot call rtpReceiver.receive (update parameters) on the same object.
I can live with a new rtpReceiver being created at this point, but I need to modify
params.rtcp.ssrc for the rtpSender object as well (in order to have RTCP-FB work).
At this point I have the same issue when calling rtpSender.send(params) -> InvalidAccessError.
It works with a new RTCRtpSender object with the exact same params, but this doesn’t work for the MCU because it changes the seqno in the RTP stream and srtp.unprotect fails.
Please advise how to update parameters in rtpSender.send().
I even tried to put codecPayloadType and encodingId in the params.encodings as I saw in the old opensource ortc code.
P.S. If I keep the exact same params when calling RtpSender.send(params) it doesn’t throw any exception.
P.P.S.: I am using the webrtc/adapter.js latest version
Comments and activity
Changed Steps to Reproduce
- Microsoft Edge Team
Changed Assigned To to “Shijun S.”
Changed Status to “Confirmed”
Thanks for reaching out to us!
Is there any example code you can share with us so we could look into the details?
Shijun, for the MS Edge team
Changed Steps to Reproduce
Thanks for considering this.
It’s complicated to provide a full working example, therefore I will share a function added to adapter.js (edge shim) used to fix video stream after MCU changed source SSRC.
The 2 version of the function I provided differs just by deleting old rtpSender and initializing a new one in the version that works.
This function is called in a call with audio+video (working) when MCU changes ssrc.
It’s important to note that the only parameter changed in “params” is the remote ssrc. The others are identical to the first call (through the setRemoteDescription function).
P.S. We are using a version of “Plan B” therefore you will notice that we remove the old video stream at the end of the function (we slightly modified adapter.js in this case).
Looking more into this, changing SSRC value through send() and receive() is not expected to work in our implementation. The issue is now posted to the ORCG WG - https://github.com/w3c/ortc/issues/713. Looks like we will have to wait for more details to be specified.
Meanwhile, if you create a new sender object with a new SSRC, your MCU will have to be prepared for the seqno discontinuity. That seems like the right way to go at this point.
All the Best, Shijun for the MS Edge team