- From: Martin Thomson <martin.thomson@gmail.com>
- Date: Thu, 24 Oct 2013 11:56:51 -0700
- To: Stefan HÃ¥kansson LK <stefan.lk.hakansson@ericsson.com>
- Cc: "public-media-capture@w3.org" <public-media-capture@w3.org>
This might be overly constraining. It's not necessary for the
platform-constructed objects to have a constructor. But it would be
nice if applications could do the following:
var mediaStream = new MediaStream(...)
plaformMediaStream instanceof MediaStream // === true
have you considered the possibility of having addTrack/removeTrack
throw on platform-constructed streams, i.e.:
// [NoInterfaceObject]
function PlatformMediaStream() {
MediaStream.apply(this, [].concat.apply(arguments));
}
PlatformMediaStream.prototype = new MediaStream();
function notAllowed() {
throw new Error('operation not permitted');
// or use DOMError as appropriate, I'm no longer able to follow that thread
}
PlatformMediaStream.prototype.addStream = notAllowed;
PlatformMediaStream.prototype.removeStream = notAllowed;
On 24 October 2013 04:19, Stefan HÃ¥kansson LK
<stefan.lk.hakansson@ericsson.com> wrote:
> Hi, this relates to bug 22270,
> https://www.w3.org/Bugs/Public/show_bug.cgi?id=22270, that proposes to
> allow adding/removing tracks from a (by the app) constructed MediaStream
> only. Platform generated MediaStreams (those coming from getUserMedia,
> and on the remote side of a PeerConnection) should not have those methods.
>
> We could spec that by having completely independent IDLs for
> "Constructed" and "Platform" MediaStream's, but since there is such a
> large overlap between them it seems more efficient to use a base
> description that they both extend.
>
> I've sketched on two alternatives. The second one (Alternative B)is
> inspired by Web Worker's (and its AbstractWorker) with an
> AbstractMediaStream which is "implemented" by Platform/Constructed
> MediaStreams. The first one (alternative A) uses inheritance instead of
> "implements".
>
> I'm far from a WEBIdl expert, but to me Alternative A seems better in
> that we can specify consumers be able to consume the "BaseMediaStream"
> only, and would not have to worry about updating them if we would ever
> add another type of MediaStream (that inherits from BaseMS). If we go
> with alternative B we would have to spec that every consumer can handle
> two types of MediaStream's for now (PlatfromMediaStream and
> ConstructedMediaStream), and would have to update them if we add another
> type in the future.
>
> Are there any comments or opinions? (And yes, the names are horrible.)
>
> Stefan
>
>
>
>
> Alternative A
> =============
> interface BaseMediaStream : EventTarget {
> readonly attribute DOMString id;
> sequence<MediaStreamTrack> getAudioTracks ();
> sequence<MediaStreamTrack> getVideoTracks ();
> MediaStreamTrack? getTrackById (DOMString trackId);
> readonly attribute boolean active;
> attribute EventHandler oninactive;
> };
>
>
> interface PlatformMediaStream : BaseMediaStream {
> attribute EventHandler onaddtrack;
> attribute EventHandler onremovetrack;
> };
>
>
>
> [Constructor,
> Constructor (BaseMediaStream stream),
> Constructor (MediaStreamTrackSequence tracks)]
> interface ConstructedMediaStream : BaseMediaStream {
> void addTrack (MediaStreamTrack track);
> void removeTrack (MediaStreamTrack
> track);
> };
>
>
> Alternative B
> =============
> [NoInterfaceObject]
> interface AbstractMediaStream {
> readonly attribute DOMString id;
> sequence<MediaStreamTrack> getAudioTracks ();
> sequence<MediaStreamTrack> getVideoTracks ();
> MediaStreamTrack? getTrackById (DOMString trackId);
> readonly attribute boolean active;
> attribute EventHandler oninactive;
> };
>
>
> interface PlatformMediaStream : EventTarget {
> attribute EventHandler onaddtrack;
> attribute EventHandler onremovetrack;
> };
> PlatformMediaStream implements AbstractMediaStream;
>
>
> [Constructor,
> Constructor (ConstructedMediaStream stream),
> Constructor (PlatformMediaStream stream),
> Constructor (MediaStreamTrackSequence tracks)]
> interface ConstructedMediaStream : EventTarget {
> void addTrack (MediaStreamTrack track);
> void removeTrack (MediaStreamTrack track);
> };
> ConstructedMediaStream implements AbstractMediaStream;
>
Received on Thursday, 24 October 2013 18:57:19 UTC