- From: Iñaki Baz Castillo via GitHub <sysbot+gh@w3.org>
- Date: Mon, 28 Jan 2019 18:58:21 +0000
- To: public-webrtc-logs@w3.org
ibc has just created a new issue for https://github.com/w3c/webrtc-pc: == Need something such as rtpSender.reset() == ### Use case 1) Create a transceiver for sending video with simulcast: ```js const transceiver = pc.addTransceiver(track, { direction: 'sendonly', sendEncodings: [ { rid: '111', active: true, maxBitrate: 111111 }, { rid: '222', active: true, maxBitrate: 222222 }, { rid: '333', active: true, maxBitrate: 333333 } ] }; // or pass those encodings via transceiver.sender.setParameters() ``` 2) Later deactivate the video sender: ```js track.stop(); await transceiver.sender.replaceTrack(null); transceiver.direction = "inactive"; ```` 3) Reuse the `transceiver` to send a new video, now without simulcast: ```js await transceiver.sender.replaceTrack(newTrack); transceiver.direction = "sendonly"; const parameters = transceiver.sender.getParameters(); const newEncodings = [ { active: true, maxBitrate: 222222 } ]; await transceiver.sender.setParameters({ ...parameters, encodings: newEncodings }); ``` ### The problem According to the [spec](https://www.w3.org/TR/webrtc/#dom-rtcrtpsender-setparameters) this is not valid: > 6.3 Let N be the number of RTCRtpEncodingParameters stored in sender's internal [[SendEncodings]] slot. If any of the following conditions are met, return a promise rejected with a newly createdInvalidModificationError: > > 6.4 encodings.length is different from N. So reusing a transceiver becomes a pain because we must "accept" the previously set `encodings` and now we can just "mangle" some of them to accomplish with our new and probably unrelated needs. Yes, of course, weI could initially set 20 `encodings` and set `active: false` in most of them, so later we can switch them on/off individually to get the "desired" behavior. This is far from "elegant". ### Proposal Have a new `rtpSender.reset()` or `transceiver.resetSender()` method that replaces the previous `RtpSender` with a fresh one, without dependencies or settings based on previous usages. Of course, such a `reset()` method should throw if called while the transceiver has `direction` "sendonly" or "sendrecv". Please view or discuss this issue at https://github.com/w3c/webrtc-pc/issues/2087 using your GitHub account
Received on Monday, 28 January 2019 18:58:22 UTC