зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1208371 - Move track.stop() helpers to MediaStreamPlayback. r=jib
MozReview-Commit-ID: 81pu4jvcrRs --HG-- extra : rebase_source : c48047ac832433f7c162778fba779a556f5612d4
This commit is contained in:
Родитель
ddf091a726
Коммит
378506f7fc
|
@ -25,6 +25,49 @@ function MediaStreamPlayback(mediaElement, mediaStream) {
|
||||||
|
|
||||||
MediaStreamPlayback.prototype = {
|
MediaStreamPlayback.prototype = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts media element with a media stream, runs it until a canplaythrough
|
||||||
|
* and timeupdate event fires, and calls stop() on all its tracks.
|
||||||
|
*
|
||||||
|
* @param {Boolean} isResume specifies if this media element is being resumed
|
||||||
|
* from a previous run
|
||||||
|
*/
|
||||||
|
playMediaWithMediaStreamTracksStop : function(isResume) {
|
||||||
|
this.startMedia(isResume);
|
||||||
|
return this.verifyPlaying()
|
||||||
|
.then(() => this.stopTracksForStreamInMediaPlayback())
|
||||||
|
.then(() => this.stopMediaElement());
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops the local media stream's tracks while it's currently in playback in
|
||||||
|
* a media element.
|
||||||
|
*
|
||||||
|
* Precondition: The media stream and element should both be actively
|
||||||
|
* being played. All the stream's tracks must be local.
|
||||||
|
*/
|
||||||
|
stopTracksForStreamInMediaPlayback : function () {
|
||||||
|
var elem = this.mediaElement;
|
||||||
|
var waitForEnded = () => new Promise(resolve => {
|
||||||
|
elem.addEventListener('ended', function ended() {
|
||||||
|
elem.removeEventListener('ended', ended);
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// TODO (bug 910249) Also check that all the tracks are local.
|
||||||
|
this.mediaStream.getTracks().forEach(t => t.stop());
|
||||||
|
|
||||||
|
// XXX (bug 1208316) When we implement MediaStream.active, do not stop
|
||||||
|
// the stream. We just do it now so the media element will raise 'ended'.
|
||||||
|
if (!this.mediaStream.stop) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.mediaStream.stop();
|
||||||
|
return timeout(waitForEnded(), ENDED_TIMEOUT_LENGTH, "ended event never fired")
|
||||||
|
.then(() => ok(true, "ended event successfully fired"));
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts media with a media stream, runs it until a canplaythrough and
|
* Starts media with a media stream, runs it until a canplaythrough and
|
||||||
* timeupdate event fires, and stops the media.
|
* timeupdate event fires, and stops the media.
|
||||||
|
@ -131,50 +174,6 @@ function LocalMediaStreamPlayback(mediaElement, mediaStream) {
|
||||||
|
|
||||||
LocalMediaStreamPlayback.prototype = Object.create(MediaStreamPlayback.prototype, {
|
LocalMediaStreamPlayback.prototype = Object.create(MediaStreamPlayback.prototype, {
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts media element with a media stream, runs it until a canplaythrough
|
|
||||||
* and timeupdate event fires, and calls stop() on all its tracks.
|
|
||||||
*
|
|
||||||
* @param {Boolean} isResume specifies if this media element is being resumed
|
|
||||||
* from a previous run
|
|
||||||
*/
|
|
||||||
playMediaWithMediaStreamTracksStop: {
|
|
||||||
value: function(isResume) {
|
|
||||||
this.startMedia(isResume);
|
|
||||||
return this.verifyPlaying()
|
|
||||||
.then(() => this.stopTracksForStreamInMediaPlayback())
|
|
||||||
.then(() => this.stopMediaElement());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stops the local media stream's tracks while it's currently in playback in
|
|
||||||
* a media element.
|
|
||||||
*
|
|
||||||
* Precondition: The media stream and element should both be actively
|
|
||||||
* being played. All the stream's tracks must be local.
|
|
||||||
*/
|
|
||||||
stopTracksForStreamInMediaPlayback: {
|
|
||||||
value: function () {
|
|
||||||
var elem = this.mediaElement;
|
|
||||||
var waitForEnded = () => new Promise(resolve => {
|
|
||||||
elem.addEventListener('ended', function ended() {
|
|
||||||
elem.removeEventListener('ended', ended);
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// TODO (bug 910249) Also check that all the tracks are local.
|
|
||||||
this.mediaStream.getTracks().forEach(t => t.stop());
|
|
||||||
|
|
||||||
// XXX (bug 1208316) When we implement MediaStream.active, do not stop
|
|
||||||
// the stream. We just do it now so the media element will raise 'ended'.
|
|
||||||
this.mediaStream.stop();
|
|
||||||
return timeout(waitForEnded(), ENDED_TIMEOUT_LENGTH, "ended event never fired")
|
|
||||||
.then(() => ok(true, "ended event successfully fired"));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DEPRECATED - MediaStream.stop() is going away. Use MediaStreamTrack.stop()!
|
* DEPRECATED - MediaStream.stop() is going away. Use MediaStreamTrack.stop()!
|
||||||
*
|
*
|
||||||
|
|
Загрузка…
Ссылка в новой задаче