Re: Using tracks instead of streams

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