- From: Stefan Håkansson LK <stefan.lk.hakansson@ericsson.com>
- Date: Mon, 5 Sep 2011 15:09:10 +0200
- To: public-webrtc@w3.org
Justin, some feedback in-line below! Stefan (in role of contributor) On 2011-09-02 18:52, Justin Uberti wrote: > Section 5 in the WEBRTC spec > (http://dev.w3.org/2011/webrtc/editor/webrtc.html) discusses at length a > mechanism for transmitting and securing datagrams over the > PeerConnection transport. At both an API and a wire level, this > mechanism is quite different from the existing mechanisms that are used > for transmission of audio and video data: > - The availability of the data stream is not easily known, whereas > audio/video can be negotiated and stream existence learned from the > *Stream methods/callbacks. I think the availability is quite clear: once the PeerConnection enters state 'ACTIVE' (and fires event 'open') it is available. > - It defines its own encryption mechanism, whereas audio/video will use > SDES-SRTP, or DTLS-SRTP > - Only one data stream exists, whereas audio/video can have many streams This is true, however, is there a real need for this? Different data 'streams' can be created/handled in the application. One thing I like with the current approach is the (in this respect) similarity with WebSocket. Once it is "open" you can "send", no need for the web app developer to learn a new model. > > I would like to propose an approach where we remove the send() method, > and add a createDataStream() method to PeerConnection. This method > creates a DataStream object, a descendant of MediaStream. This object > can then be added/removed from PeerConnection via the existing > add/removeStream APIs, and it will show up in localStreams/remoteStreams > like any other MediaStream. It will also fire events indicating the > stream status. > > Some specifics: > - This stream will show up in SDP, and it can be its own RTP session, or > muxed with other RTP sessions, just like any other audio/video stream. > If the remote side doesn't support/want the data stream, it can signal > this via its answer SDP. > - For encryption, it simply uses the underlying encryption of the > session, i.e. none, SDES-SRTP, or DTLS-SRTP, as appropriate. > - Multiple DataStreams can be created, just like MediaStreams. This may > be of value to certain applications, who want to have multiple flows, > perhaps with their own QoS. True, but this can be done by the application (as outlined above), or the application could create several PeerConnection objects (again being similar to WebSocket). > - We can (perhaps later) add different kinds of DataStreams, i.e. > datagram and reliable. When creating a DataStream, you can specify what > kind of stream you want. This could just be a second optional argument to the 'send' method: void send(in DOMString text, in optional boolean reliable); It would not have to be in the initial version of PeerConnection, but could be introduced later (without breaking apps). > > Example JS usage: > > > // standard setup from existing example > var local = new PeerConnection('TURNSexample.net <http://example.net>', sendSignalingChannel); > local.signalingChannel(...); // if we have a message from the other side, pass it along here > > // (aLocalStream is some LocalMediaStream object) > > var aDataStream = local.createDataStream(DATAGRAM); > > local.addStream(aDataStream); > > // outgoing SDP is dispatched, including a media block like: > > m=application 49200 <TBD> 127 > > > a=rtpmap:127 application/html-peer-connection-data > > > function sendSignalingChannel(message) { > ... // send message to the other side via the signaling channel > } > > > // incoming SDP is recieved, signaling completes > function receiveSignalingChannel (message) { > // call this whenever we get a message on the signaling channel > local.signalingChannel(message); > } > > > // we start sending data on the data stream > > aDataStream.send("foo"); > > > > Thoughts? If this feels like an interesting direction, I can write text > for inclusion in the spec.
Received on Monday, 5 September 2011 13:09:39 UTC