rx-player
Version:
Canal+ HTML5 Video Player
42 lines (41 loc) • 2.05 kB
JavaScript
import log from "../../log";
import ContentTimeBoundariesObserver from "./content_time_boundaries_observer";
/**
* Creates a `ContentTimeBoundariesObserver`, a class indicating various
* events related to media time (such as duration updates, period changes,
* warnings about being out of the Manifest time boundaries or "endOfStream"
* management), handle those events and returns the class.
*
* Various methods from that class need then to be called at various events
* (see `ContentTimeBoundariesObserver`).
* @param {Object} manifest
* @param {Object} mediaSource
* @param {Object} streamObserver
* @param {Object} segmentSinksStore
* @param {Object} cancelSignal
* @returns {Object}
*/
export default function createContentTimeBoundariesObserver(manifest, mediaSource, streamObserver, segmentSinksStore, callbacks, cancelSignal) {
cancelSignal.register((err) => {
mediaSource.interruptDurationSetting(err.reason);
});
const contentTimeBoundariesObserver = new ContentTimeBoundariesObserver(manifest, streamObserver, segmentSinksStore.getBufferTypes());
cancelSignal.register((err) => {
contentTimeBoundariesObserver.dispose(err.reason);
});
contentTimeBoundariesObserver.addEventListener("warning", (err) => callbacks.onWarning(err));
contentTimeBoundariesObserver.addEventListener("periodChange", (period) => callbacks.onPeriodChanged(period));
contentTimeBoundariesObserver.addEventListener("endingPositionChange", (evt) => {
mediaSource.setDuration(evt.endingPosition, evt.isEnd);
});
contentTimeBoundariesObserver.addEventListener("endOfStream", () => {
log.debug("mse", "Start applying end-of-stream order.");
mediaSource.maintainEndOfStream();
});
contentTimeBoundariesObserver.addEventListener("resumeStream", () => {
mediaSource.stopEndOfStream();
});
const obj = contentTimeBoundariesObserver.getCurrentEndingTime();
mediaSource.setDuration(obj.endingPosition, obj.isEnd);
return contentTimeBoundariesObserver;
}