- From: Adam Roach <adam@nostrum.com>
- Date: Fri, 18 Oct 2013 11:24:54 -0500
- To: "public-webrtc@w3.org" <public-webrtc@w3.org>
- Message-ID: <526160D6.5060708@nostrum.com>
We've recently had some implementors reach out to ask about how to do certain things with the WebRTC interfaces, and I've been pretty well unable to turn up anything that makes a lot of sense for most of the interesting stream-control interfaces. Some of this is talked about here, with an implication that the author of this wiki page, at least, would be willing to leave some of them unspecified for the first version of WebRTC: http://www.w3.org/2011/04/webrtc/wiki/Transport_Control#Needs_further_discussion.2C_maybe_for_later_versions Unfortunately, I don't think we can leave stream pause/unpause or stream rejection/removal out of the first version of the document. The good news is that I think we have all the interfaces necessary to do these things; we just need to spell out clear semantics for them. As a high-level thumbnail sketch, here's what I think makes sense: 1. To pause a track that you are sending, set enabled=false on a MediaStreamTrack that you have added to a PeerConnection. This information will cause the PeerConnection to stop sending the associated RTP. Maybe this triggers an onnegotiationneeded to set the corresponding m-line to recvonly or inactive and maybe it just stops sending the stream; I'm not sure which makes more sense. * To unpause, set enabled back to true, and the steps are reversed * To pause all the MSTs associated with a MediaStream, use enabled on the MediaStream itself. 2. To pause a track that you are receiving, set enabled=false on the MediaStreamTrack that you received from the PeerConnection via onaddstream. This will cause the MST to stop providing media to whatever sink it has been wired to, and trigger an onnegotiationneeded event. The subsequent CreateOffer sets the corresponding m-line to sendonly or inactive, as appropriate. * As above, this operation can also be performed on a MediaStream to impact all of its tracks. 3. To reject a track that has been offered, call stop() on the corresponding MediaStreamTrack after it has been received via onaddstream, but before calling CreateAnswer. This will cause it to be rejected with a port number of zero. 4. To remove a track from an ongoing session, call stop() on the corresponding MediaStreamTrack object. This will (a) immediately stop transmitting associated RTP, and (b) trigger an onnegotiationneeded event. * If both the sending and receiving MST associated with that m-line have been stop()ed, then the subsequent CreateOffer sets the port on the corresponding m-line to zero. * If only one of the two MSTs associated with that m-line has been stop()ed, then the subsequent CreateOffer sets the corresponding m-line to sendonly, receiveonly, or inactive, as appropriate. Does this make sense to everyone? It seems pretty clean, easy to specify, and reasonable to implement. Best of all, we're not changing any currently defined interfaces, just providing clear semantics for certain operations. /a
Received on Friday, 18 October 2013 16:25:24 UTC