- From: Stefan Håkansson LK <stefan.lk.hakansson@ericsson.com>
- Date: Wed, 9 Nov 2011 16:09:20 +0100
- To: "public-webrtc@w3.org" <public-webrtc@w3.org>
After looking at the two versions submitted by Justin
* http://lists.w3.org/Archives/Public/public-webrtc/2011Oct/0119.html
and
* http://lists.w3.org/Archives/Public/public-webrtc/2011Nov/0000.html)
I prefer one aspect of the older one: creating the DataStream from a
PeerConnection object definitely makes more sense than creating it stand
alone (as things like send, priority, ... has no meaning without a
PeerConnection). But I would like to remove the "addDataStream" method,
this should happen automatically as a result of doing "createDataStream".
This would result in the following changes to the PeerConnection API:
interface PeerConnection {
[...]
// Creates a data stream, either reliable or unreliable.
// Reliability and priority cannot be changed for a stream after it
is created.
DataStream createDataStream(in DOMString label, in optional boolean
reliable, in optional int priority);
// Removes a datastream from this PeerConnection. Will trigger new
signaling.
void removeDataStream (in DataStream stream);
[...]
};
I also think that the DataStreams should be uni-directional to fit
better with the MediaStream's (and share an ancestor object), as well as
with localStreams and remoteStreams.
A simple example (sorry for the sloppy syntax at places):
1. Sender side setup
====================
// standard setup from existing example
var pc = new PeerConnection('TURNS example.net', sendSignalingChannel);
// create a data stream; automatically appended to localStreams
var aLocalDataStream = pc.createDataStream("myChannel");
2. Receiver side setup
======================
// standard setup from existing example
var pc = new PeerConnection('TURNS example.net', sendSignalingChannel);
//take care of onaddstream
pc.onaddstream(function (evt) {
//the type of stream (data or media) must be identifiable
//if we use the same event
var receiveDataStream = evt;
}
Now, if the sender side does:
aLocalDataStream.send("foo");
// the message is delivered to the receiver
receiveDataStream.onmessage("foo");
The sending side can discard the stream
pc.removeStream(aLocalDataStream)
// new signaling is generated, resulting in onRemoveStream for the receiver
pc.onremovestream(receiveDataStream);
Would this make sense?
Br,
Stefan
Received on Wednesday, 9 November 2011 15:10:02 UTC