UNPKG

shaka-player

Version:
153 lines (138 loc) 4.4 kB
/*! @license * Shaka Player * Copyright 2016 Google LLC * SPDX-License-Identifier: Apache-2.0 */ /** * @externs */ /** * Interface for parsing inband closed caption data from MP4 streams. * @interface * @exportDoc */ shaka.extern.ICeaParser = class { /** * Initializes the parser with init segment data. * @param {!BufferSource} initSegment init segment to parse. * @exportDoc */ init(initSegment) {} /** * Parses the stream and extracts closed captions packets. * @param {!BufferSource} mediaSegment media segment to parse. * @return {!Array<!shaka.extern.ICeaParser.CaptionPacket>} * @exportDoc */ parse(mediaSegment) {} }; /** * @typedef {{ * packet: !Uint8Array, * pts: number, * format: string, * }} * * @description Parsed Caption Packet. * @property {!Uint8Array} packet * The raw caption bytes. Depending on the source, it can be: * - A "User data registered by Recommendation ITU-T T.35 SEI message" * (sections D.1.6 and D.2.6 of Rec. ITU-T H.264, 06/2019), when * `format` is `sei. * - Raw CEA-608 byte pairs from a dedicated 'c608' MP4 track sample, * when `format` is `raw608`. In this case, the data does **not** * include NAL units, length prefixes, or SEI headers. * * @property {number} pts * The presentation timestamp (PTS) of this caption packet in seconds. * For SEI-based captions, this corresponds to the PTS of the containing * video sample. For raw CEA-608 track samples, it corresponds to the PTS * of the 'c608' sample. * * @property {string} format * The origin format of the caption packet: * - `sei` for ITU-T T.35 SEI messages embedded in video samples. * - `raw608` for raw CEA-608 samples from a dedicated MP4 track. * @exportDoc */ shaka.extern.ICeaParser.CaptionPacket; /** * Interface for decoding inband closed captions from packets. * @interface * @exportDoc */ shaka.extern.ICaptionDecoder = class { /** * Extracts packets and prepares them for decoding. In a given media fragment, * all the caption packets found in its SEI messages should be extracted by * successive calls to extract(), followed by a single call to decode(). * * @param {!Uint8Array} userDataSeiMessage * This is a User Data registered by Rec.ITU-T T.35 SEI message. * It is described in sections D.1.6 and D.2.6 of Rec. ITU-T H.264 (06/2019). * @param {number} pts PTS when this packet was received, in seconds. * @exportDoc */ extract(userDataSeiMessage, pts) {} /** * Extracts raw CEA-608 caption bytes from a dedicated MP4 'c608' track * and prepares them for decoding. In a given media fragment, all the * CEA-608 samples found in the track should be extracted by successive * calls to extractRaw608(), followed by a single call to decode(). * * Unlike extract(), this method does not process SEI messages or * ITU-T T.35 user data. The input is raw CEA-608 byte pairs as stored * directly in the MP4 sample payload of a 'c608' track (Apple-style * fragmented MP4). * * Each call provides the full sample payload for a single caption * sample. The payload typically consists of one or more CEA-608 * cc_data byte pairs. * * @param {!Uint8Array} raw608Data * Raw CEA-608 data bytes from a 'c608' MP4 track sample. * @param {number} pts PTS when this sample was received, in seconds. * @exportDoc */ extractRaw608(raw608Data, pts) {} /** * Decodes all currently extracted packets and then clears them. * This should be called once for a set of extracts (see comment on extract). * @return {!Array<!shaka.extern.ICaptionDecoder.ClosedCaption>} * @exportDoc */ decode() {} /** * Clears the decoder state completely. * Should be used when an action renders the decoder state invalid, * e.g. unbuffered seeks. * @exportDoc */ clear() {} /** * Returns the streams that the CEA decoder found. * @return {!Array<string>} * @exportDoc */ getStreams() {} }; /** * Parsed Cue. * @typedef {{ * cue: !shaka.text.Cue, * stream: string * }} * * @exportDoc */ shaka.extern.ICaptionDecoder.ClosedCaption; /** * @typedef {function():!shaka.extern.ICeaParser} * @exportDoc */ shaka.extern.CeaParserPlugin; /** * @typedef {function():!shaka.extern.ICaptionDecoder} * @exportDoc */ shaka.extern.CaptionDecoderPlugin;