yanchengPowerSupply/node_modules/videojs-contrib-media-sources/es5/create-text-tracks-if-neces...

60 lines
2.0 KiB
JavaScript

/**
* @file create-text-tracks-if-necessary.js
*/
/**
* Create text tracks on video.js if they exist on a segment.
*
* @param {Object} sourceBuffer the VSB or FSB
* @param {Object} mediaSource the HTML or Flash media source
* @param {Object} segment the segment that may contain the text track
* @private
*/
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var createTextTracksIfNecessary = function createTextTracksIfNecessary(sourceBuffer, mediaSource, segment) {
var player = mediaSource.player_;
// create an in-band caption track if one is present in the segment
if (segment.captions && segment.captions.length) {
if (!sourceBuffer.inbandTextTracks_) {
sourceBuffer.inbandTextTracks_ = {};
}
for (var trackId in segment.captionStreams) {
if (!sourceBuffer.inbandTextTracks_[trackId]) {
player.tech_.trigger({ type: 'usage', name: 'hls-608' });
var track = player.textTracks().getTrackById(trackId);
if (track) {
// Resuse an existing track with a CC# id because this was
// very likely created by videojs-contrib-hls from information
// in the m3u8 for us to use
sourceBuffer.inbandTextTracks_[trackId] = track;
} else {
// Otherwise, create a track with the default `CC#` label and
// without a language
sourceBuffer.inbandTextTracks_[trackId] = player.addRemoteTextTrack({
kind: 'captions',
id: trackId,
label: trackId
}, false).track;
}
}
}
}
if (segment.metadata && segment.metadata.length && !sourceBuffer.metadataTrack_) {
sourceBuffer.metadataTrack_ = player.addRemoteTextTrack({
kind: 'metadata',
label: 'Timed Metadata'
}, false).track;
sourceBuffer.metadataTrack_.inBandMetadataTrackDispatchType = segment.metadata.dispatchType;
}
};
exports['default'] = createTextTracksIfNecessary;
module.exports = exports['default'];