W3C home > Mailing lists > Public > public-webrtc@w3.org > November 2012

Re: [ACTION-59] Introduce lookup by id structures for streams and tracks.

From: Adam Bergkvist <adam.bergkvist@ericsson.com>
Date: Thu, 15 Nov 2012 11:47:20 +0100
Message-ID: <50A4C838.8070007@ericsson.com>
To: "public-webrtc@w3.org" <public-webrtc@w3.org>
Hi

It's time for an update to reflect the feedback so far.

I've written a few code examples recently using a lot of stream and 
track lookups and would like to add another bullet to the list of common 
use cases (feedback on these?). We already have:
1) Lookup by id.
2) Iterate/loop through all the items in the collection.

I'd like to add a third:
3) Get the only track of a certain kind (if any) from a stream created 
by getUserMedia().

The forEach() approach has gotten some support, but I think it's a bit 
clumsy doing 3) from the list of common uses.

var theTrack;
stream.audioTracks.forEach(function (track) {
     theTrack = track;
});

(if stream had more than one audio track and we wanted the "first" we 
would have to either break the loop somehow or add a condition to not 
overwrite theTrack every subsequent time)

compared to something that can use indexes (but without guaranteeing 
stability).

var theTrack = stream.audioTracks[0];

Preferably you would use the id of the track to look it up, but when you 
get a fresh stream from getUserMedia() you don't know the id yet.

To sum up the feedback, people seem to want something like this (mainly 
based on Haralds feedback):

======
interface MediaStream {
     // ...

     sequence<MediaStreamTrack> getVideoTracks();
     sequence<MediaStreamTrack> getAudioTracks();

     MediaStreamTrack getTrackById(DOMString trackId);

     void addTrack(MediaStreamTrack track);
     void removeTrack(MediaStreamTrack track);

     attribute EventHandler onaddtrack;
     attribute EventHandler onremovetrack;
};
======

// 1) lookup by id
var track = stream.getTrackById(trackId);

// 2) Iterate
var audioTracks = stream.getAudioTracks();
for (var i = 0; i < audioTracks.length; i++)
     // use audioTracks[i]

// 3) Get only (first) track of a kind
var audioTrack = localStream.getAudioTracks()[0];

/Adam
Received on Thursday, 15 November 2012 10:47:47 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Thursday, 15 November 2012 10:47:47 GMT