62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
import {setup} from './auto-advance.js';
|
|
|
|
/**
|
|
* Removes all remote text tracks from a player.
|
|
*
|
|
* @param {Player} player
|
|
* The player to clear tracks on
|
|
*/
|
|
const clearTracks = (player) => {
|
|
const tracks = player.remoteTextTracks();
|
|
let i = tracks && tracks.length || 0;
|
|
|
|
// This uses a `while` loop rather than `forEach` because the
|
|
// `TextTrackList` object is a live DOM list (not an array).
|
|
while (i--) {
|
|
player.removeRemoteTextTrack(tracks[i]);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Plays an item on a player's playlist.
|
|
*
|
|
* @param {Player} player
|
|
* The player to play the item on
|
|
*
|
|
* @param {Object} item
|
|
* A source from the playlist.
|
|
*
|
|
* @return {Player}
|
|
* The player that is now playing the item
|
|
*/
|
|
const playItem = (player, item) => {
|
|
const replay = !player.paused() || player.ended();
|
|
|
|
player.trigger('beforeplaylistitem', item);
|
|
player.poster(item.poster || '');
|
|
player.src(item.sources);
|
|
clearTracks(player);
|
|
|
|
player.ready(() => {
|
|
(item.textTracks || []).forEach(player.addRemoteTextTrack.bind(player));
|
|
player.trigger('playlistitem', item);
|
|
|
|
if (replay) {
|
|
const playPromise = player.play();
|
|
|
|
// silence error when a pause interrupts a play request
|
|
// on browsers which return a promise
|
|
if (typeof playPromise !== 'undefined' && typeof playPromise.then === 'function') {
|
|
playPromise.then(null, (e) => {});
|
|
}
|
|
}
|
|
|
|
setup(player, player.playlist.autoadvance_.delay);
|
|
});
|
|
|
|
return player;
|
|
};
|
|
|
|
export default playItem;
|
|
export {clearTracks};
|