Files
shaka-player/lib/media/closed_caption_parser.js
T
Joey Parrish 64896d70b0 Use shorter license header
This reflects changes in Google's policy on JavaScript license
headers, which should be smaller to avoid increasing the size of the
binary unnecessarily.

This also updates the company name from "Google, Inc" to "Google LLC".

Change-Id: I3f8b9ed3700b6351f43173d50c94d35c333e82b4
2019-11-22 18:18:36 +00:00

133 lines
3.1 KiB
JavaScript

/** @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.provide('shaka.media.IClosedCaptionParser');
goog.provide('shaka.media.MuxJSClosedCaptionParser');
goog.provide('shaka.media.NoopCaptionParser');
goog.require('shaka.util.BufferUtils');
/**
* The IClosedCaptionParser defines the interface to provide all operations for
* parsing the closed captions embedded in Dash videos streams.
* @interface
*/
shaka.media.IClosedCaptionParser = class {
/**
* Initialize the caption parser. This should be called only once.
* @param {BufferSource} data
*/
init(data) {}
/**
* Parses embedded CEA closed captions and interacts with the underlying
* CaptionStream, and calls the callback function when there are closed
* captions.
*
* @param {BufferSource} data
* @param {function(Array.<muxjs.mp4.ClosedCaption>)} onCaptions
* A callback function to handle the closed captions from parsed data.
*/
parseFrom(data, onCaptions) {}
/**
* Resets the CaptionStream.
*/
reset() {}
};
/**
* Closed Caption Parser provides all operations for parsing the closed captions
* embedded in Dash videos streams.
*
* @implements {shaka.media.IClosedCaptionParser}
* @final
*/
shaka.media.MuxJSClosedCaptionParser = class {
constructor() {
/** @private {muxjs.mp4.CaptionParser} */
this.muxCaptionParser_ = new muxjs.mp4.CaptionParser();
/** @private {!Array.<number>} */
this.videoTrackIds_ = [];
/**
* Timescales from the init segments, used for mux.js CaptionParser.
* @private {!Object.<number, number>}
*/
this.timescales_ = {};
}
/**
* @override
*/
init(data) {
const probe = muxjs.mp4.probe;
// Caption parser for Dash
const initBytes = shaka.util.BufferUtils.toUint8(data);
this.videoTrackIds_ = probe.videoTrackIds(initBytes);
this.timescales_ = probe.timescale(initBytes);
this.muxCaptionParser_.init();
}
/**
* @override
*/
parseFrom(data, onCaptions) {
const segmentBytes = shaka.util.BufferUtils.toUint8(data);
const dashParsed = this.muxCaptionParser_.parse(
segmentBytes, this.videoTrackIds_, this.timescales_);
if (dashParsed && dashParsed.captions) {
onCaptions(dashParsed.captions);
}
// ParsedCaptions is used by mux.js to store the captions parsed so far.
// It should be reset every time some data is parsed, so as to store new
// data.
this.muxCaptionParser_.clearParsedCaptions();
}
/**
* @override
*/
reset() {
this.muxCaptionParser_.resetCaptionStream();
}
/**
* Check if the MuxJS closed caption parser is supported on this platform.
*
* @return {boolean}
*/
static isSupported() {
return !!window.muxjs;
}
};
/**
* Noop Caption Parser creates an empty caption parser object when mux.js is not
* available.
*
* @implements {shaka.media.IClosedCaptionParser}
* @final
*/
shaka.media.NoopCaptionParser = class {
/**
* @override
*/
init(data) {}
/**
* @override
*/
parseFrom(data, onCaptions) {}
/**
* @override
*/
reset() {}
};