W3C home > Mailing lists > Public > public-media-capture@w3.org > May 2012

Re: MediaStream Constructor

From: Anant Narayanan <anant@mozilla.com>
Date: Thu, 10 May 2012 12:23:24 -0700
Message-ID: <4FAC15AC.8030006@mozilla.com>
To: "public-media-capture@w3.org" <public-media-capture@w3.org>
On 5/10/12 6:57 AM, Adam Bergkvist wrote:
> On 2012-05-10 13:32, Rich Tibbett wrote:
>>>
>>> [Constructor MediaStream(obj1, obj2, obj3, ..., objN)];
>>
>> This does limit the potential to extend the MediaStream constructor with
>> additional arguments later on (e.g. options). We should probably keep
>> that possibility open and instead specify the MediaStream constructor as
>> follows (which is also in line with the new Blob object constructor
>> proposal [1]):
>>
>> [Constructor, Constructor((MediaStream or MediaStreamTrackList)?[]
>> streams)]
>>
>> As a developer you could then do any of the following:
>>
>> var stream = new MediaStream();
>>
>> var stream = new MediaStream([mediaStram1, mediaTrackList1, ..., objN]);
>>
>> This also means that at some later point in time we could adopt an
>> options argument if or when we might need that:

You're right, it's always good to leave room for arguments we may add in 
the future, and even though we could do it in the old style 
(obj1...objN) with some Lua-style varargs trickery, it's cleaner to just 
put everything in an array as a single argument; at the expense of minor 
developer overhead.

> I like this idea in general. The current approach with separate lists
> for audio and video doesn't really make sense since it's easy to put a
> track in the correct list (i.e. audio or video). Perhaps we could even
> support all three objects as arguments "MediaStream or
> MediaStreamTrackList or MediaStreamTrack".

Great, any objections to adopting Rich's proposal to modify the 
MediaStream constructor? I'd add a tiny tweak to also allow raw 
MediaStreamTrack objects even if they're not in a list:

[Constructor, Constructor((MediaStream or MediaStreamTrack or 
MediaStreamTrackList)[]  objects)]

Just to cover the use-case where I want to combine a single track from 
one list with another, without having to create an entirely new list 
just to encapsulate that one track.

>> With MediaStreamTrackList as a live collection object we know to fire
>> events when user's call an explicit method (i.e. 'add'/'remove'
>> methods). Other parts of the web platform also use Collection objects
>> rather than Array objects if any non-standard behavior is to be attached
>> to an attribute.
>
> I agree with the second point you make about non-standard behaving
> lists. We might need to have such behavior since it's been suggested
> that adding a track to a list will increase the length by one, but
> removing a track will not affect the list length. The removed track will
> simply leave a "whole" in the list to not affect the indexes of the
> other tracks. I think we should keep MediaStreamTrackList, but it needs
> some more work. For example, apart from the special remove behavior, it
> would be convenient to know both how long the list is as well as how
> many tracks it contains (since those numbers may not be equal).

These are pretty good reasons to retain the MediaStreamTrackList object, 
I will rest my case.

>> We could certainly tighten up the definition of the MediaStreamTrackList
>> collection interface and I would be happy to take an action to propose
>> some text here.

Sounds great, thanks Rich!

-Anant
Received on Thursday, 10 May 2012 19:23:54 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:14:59 GMT