Should this not be synchronized with the Streams API? Please see recent evolutions [1] and thread [2] (where WebRTC streams are mentioned)

Ccing Webapps and Takeshi/Feras.

Regarding your proposal I was about to propose to add about the same thing in Streams: at least a stop method (which would send an EOF) and maybe a resume method, or something like your pause/unpause.

For flow control I think I am changing my mind, it looks impossible to do a precise flow control with js, so probably the API itself should handle it.

Regards,

Aymeric

[1] http://lists.w3.org/Archives/Public/public-webapps/2013OctDec/0152.html
[2] http://lists.w3.org/Archives/Public/public-webapps/2013OctDec/0049.html

Le 18/10/2013 18:24, Adam Roach a écrit :
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


--
Peersm : http://www.peersm.com
node-Tor : https://www.github.com/Ayms/node-Tor
GitHub : https://www.github.com/Ayms

Reply via email to