Skip to content

Commit

Permalink
Merge pull request #2657 from aescarcha/multiperiodStreamEndFix
Browse files Browse the repository at this point in the history
Fixes PLAYBACK_ENDED stopping streams after first period
  • Loading branch information
epiclabsDASH committed Jun 21, 2018
2 parents 8b1ada0 + 20b2730 commit a90ac4f
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 7 deletions.
6 changes: 3 additions & 3 deletions src/streaming/controllers/PlaybackController.js
Original file line number Diff line number Diff line change
Expand Up @@ -542,12 +542,12 @@ function PlaybackController() {
logger.info('Native video element event: ended');
pause();
stopUpdatingWallclockTime();
eventBus.trigger(Events.PLAYBACK_ENDED);
eventBus.trigger(Events.PLAYBACK_ENDED, {'isLast': streamController.getActiveStreamInfo().isLast});
}

// Handle DASH PLAYBACK_ENDED event
function onPlaybackEnded() {
if (wallclockTimeIntervalId) {
function onPlaybackEnded(e) {
if (wallclockTimeIntervalId && e.isLast) {
// PLAYBACK_ENDED was triggered elsewhere, react.
logger.info('[PlaybackController] onPlaybackEnded -- PLAYBACK_ENDED but native video element didn\'t fire ended');
videoModel.setCurrentTime(getStreamEndTime());
Expand Down
4 changes: 2 additions & 2 deletions src/streaming/controllers/StreamController.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ function StreamController() {
if (seekToPosition > 0) {
if (!isNaN(timeToStreamEnd) && seekToPosition >= time + timeToStreamEnd) {
logger.info('Jumping media gap (discontinuity) at time ', time, '. Jumping to end of the stream');
eventBus.trigger(Events.PLAYBACK_ENDED);
eventBus.trigger(Events.PLAYBACK_ENDED, {'isLast': getActiveStreamInfo().isLast});
} else {
logger.info('Jumping media gap (discontinuity) at time ', time, '. Jumping to time position', seekToPosition);
playbackController.seek(seekToPosition);
Expand Down Expand Up @@ -290,7 +290,7 @@ function StreamController() {
const timeToEnd = playbackController.getTimeToStreamEnd();
const delayPlaybackEnded = timeToEnd > 0 ? timeToEnd * 1000 : 0;
logger.debug('[toggleEndPeriodTimer] start-up of timer to notify PLAYBACK_ENDED event. It will be triggered in ' + delayPlaybackEnded + ' milliseconds');
playbackEndedTimerId = setTimeout(function () {eventBus.trigger(Events.PLAYBACK_ENDED);}, delayPlaybackEnded);
playbackEndedTimerId = setTimeout(function () {eventBus.trigger(Events.PLAYBACK_ENDED, {'isLast': getActiveStreamInfo().isLast});}, delayPlaybackEnded);
const preloadDelay = delayPlaybackEnded < 2000 ? delayPlaybackEnded / 4 : delayPlaybackEnded - 2000;
logger.info('[StreamController][toggleEndPeriodTimer] Going to fire preload in ' + preloadDelay);
setTimeout(onStreamCanLoadNext, preloadDelay);
Expand Down
7 changes: 5 additions & 2 deletions test/unit/streaming.controllers.PlaybackControllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import MetricsModelMock from './mocks/MetricsModelMock';
import VideoModelMock from './mocks/VideoModelMock';
import MediaPlayerModelMock from './mocks/MediaPlayerModelMock';
import DashMetricsMock from './mocks/DashMetricsMock';
import StreamControllerMock from './mocks/StreamControllerMock';

const expect = require('chai').expect;
const context = {};
Expand All @@ -20,21 +21,23 @@ describe('PlaybackController', function () {
let metricsModelMock;
let dashMetricsMock;
let mediaPlayerModelMock;
let streamControllerMock;

beforeEach(function () {
videoModelMock = new VideoModelMock();
metricsModelMock = new MetricsModelMock();
dashMetricsMock = new DashMetricsMock();
mediaPlayerModelMock = new MediaPlayerModelMock();

streamControllerMock = new StreamControllerMock();
playbackController = PlaybackController(context).getInstance();
URIFragmentModel(context).getInstance().initialize('http://urlOfManifest.com/manifest.mpd#t=18.2');

playbackController.setConfig({
videoModel: videoModelMock,
metricsModel: metricsModelMock,
dashMetrics: dashMetricsMock,
mediaPlayerModel: mediaPlayerModelMock
mediaPlayerModel: mediaPlayerModelMock,
streamController: streamControllerMock
});
});

Expand Down

0 comments on commit a90ac4f

Please sign in to comment.