Auto merge of #23342 - Manishearth:webrtc-streams, r=ferjm

Receive streams in WebRTC (and MediaStreamTrack support)

This adds the `ontrack` event handler to webrtc, and all the `MediaStreamTrack` stuff necessary to make it work.

WebRTC has the ability to group media tracks into streams using MSIDs, but I haven't yet figured out how to do this. For now, `ontrack` should work.

This _should_ be complete, but it hasn't yet been tested (hence the WIP)

r? @ferjm or @jdm

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/23342)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-05-09 00:26:02 -04:00 committed by GitHub
commit 17590fd48f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 390 additions and 47 deletions

View file

@ -4,20 +4,20 @@
// https://w3c.github.io/mediacapture-main/#dom-mediastream
// [Exposed=Window,
// Constructor,
// Constructor(MediaStream stream),
// Constructor(sequence<MediaStreamTrack> tracks)]
[Exposed=Window, Pref="dom.webrtc.enabled"]
[Exposed=Window,
Constructor,
Constructor(MediaStream stream),
Constructor(sequence<MediaStreamTrack> tracks),
Pref="dom.webrtc.enabled"]
interface MediaStream : EventTarget {
// readonly attribute DOMString id;
// sequence<MediaStreamTrack> getAudioTracks();
// sequence<MediaStreamTrack> getVideoTracks();
// sequence<MediaStreamTrack> getTracks();
// MediaStreamTrack? getTrackById(DOMString trackId);
// void addTrack(MediaStreamTrack track);
// void removeTrack(MediaStreamTrack track);
// MediaStream clone();
sequence<MediaStreamTrack> getAudioTracks();
sequence<MediaStreamTrack> getVideoTracks();
sequence<MediaStreamTrack> getTracks();
MediaStreamTrack? getTrackById(DOMString trackId);
void addTrack(MediaStreamTrack track);
void removeTrack(MediaStreamTrack track);
MediaStream clone();
// readonly attribute boolean active;
// attribute EventHandler onaddtrack;
// attribute EventHandler onremovetrack;

View file

@ -0,0 +1,24 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack
[Exposed=Window, Pref="dom.webrtc.enabled"]
interface MediaStreamTrack : EventTarget {
readonly attribute DOMString kind;
readonly attribute DOMString id;
// readonly attribute DOMString label;
// attribute boolean enabled;
// readonly attribute boolean muted;
// attribute EventHandler onmute;
// attribute EventHandler onunmute;
// readonly attribute MediaStreamTrackState readyState;
// attribute EventHandler onended;
MediaStreamTrack clone();
// void stop();
// MediaTrackCapabilities getCapabilities();
// MediaTrackConstraints getConstraints();
// MediaTrackSettings getSettings();
// Promise<void> applyConstraints(optional MediaTrackConstraints constraints);
};

View file

@ -114,3 +114,15 @@ enum RTCSignalingState {
"have-remote-pranswer",
"closed"
};
partial interface RTCPeerConnection {
// sequence<RTCRtpSender> getSenders();
// sequence<RTCRtpReceiver> getReceivers();
// sequence<RTCRtpTransceiver> getTransceivers();
// RTCRtpSender addTrack(MediaStreamTrack track,
// MediaStream... streams);
// void removeTrack(RTCRtpSender sender);
// RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) trackOrKind,
// optional RTCRtpTransceiverInit init);
attribute EventHandler ontrack;
};

View file

@ -0,0 +1,23 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://w3c.github.io/webrtc-pc/#dom-rtctrackevent
[Constructor(DOMString type, RTCTrackEventInit eventInitDict),
Exposed=Window, Pref="dom.webrtc.enabled"]
interface RTCTrackEvent : Event {
// readonly attribute RTCRtpReceiver receiver;
readonly attribute MediaStreamTrack track;
// [SameObject]
// readonly attribute FrozenArray<MediaStream> streams;
// readonly attribute RTCRtpTransceiver transceiver;
};
// https://www.w3.org/TR/webrtc/#dom-rtctrackeventinit
dictionary RTCTrackEventInit : EventInit {
// required RTCRtpReceiver receiver;
required MediaStreamTrack track;
// sequence<MediaStream> streams = [];
// required RTCRtpTransceiver transceiver;
};