- From: Adam Bergkvist <adam.bergkvist@ericsson.com>
- Date: Tue, 12 Nov 2013 08:18:20 +0000
- To: Martin Thomson <martin.thomson@gmail.com>, "public-webrtc@w3.org" <public-webrtc@w3.org>
On 2013-11-12 07:46, Martin Thomson wrote:
> This isn't rocket science, though it requires a degree of API-inversion.
>
> Yes, I know that I'm breaking the rules with respect to use of
> "attribute sequence<Foo>". The rules are stupid.
>
> partial interface RTCPeerConnection {
> // the set of tracks we are sending
> attribute sequence<Doohickey> sendTracks;
> // the set of tracks we are (maybe) receiving
> attribute sequence<Doohickey> receiveTracks;
>
> // add a track to the set of sending tracks
> Doohickey addSendTrack(MediaStreamTrack track);
>
> // fired when a remote track manifests
> attribute EventHandler? onremotetrack;
> };
>
> partial interface MediaStreamTrack {
> // the set of streams - i.e., synchronization contexts
> // that this track belongs to
> attribute sequence<MediaStream> streams;
> };
>
> interface DooHickey {
> readonly attribute MediaStreamTrack track;
> // and some other stuff
> attribute PriorityLevel priority;
> attribute unsigned long maxBitrate;
> // ellipsis
> };
>
> All the stream-related mechanisms are removed from RTCPeerConnection.
> Nothing changes about the way that MSID and appID and those mechanisms
> work.
>
> The reason that MediaStreamTrack gets an accessor for the set of
> streams that it belongs to is that if you are navigating this object
> mesh starting from RTCPeerConnection, you wouldn't otherwise be able
> to find the streams that exist. Without that, worst case, the browser
> wouldn't have a strong reference it could use to manage garbage
> collection.
>
> We are still talking about Doohickeys, so that interface has an ellipsis on it.
>
>
I like this proposal and I think it will simplify a whole lot of things.
One thing that I find a bit odd is:
pc.addSendTrack(track);
pc.sendTracks[0] == track; // false (different types)
We could have the script construct a DooHickey and add it to the
PeerConnection.
// A-side
var hickey = new DooHickey(track);
peerConn.addDooHickey(hickey);
// B-side
ondoohickey = function (evt) {
hickey = evt.dooHickey;
remoteVideo.srcObject = new MediaStream([hickey.track]);
};
/Adam
Received on Tuesday, 12 November 2013 08:18:49 UTC