mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-13 15:46:46 +03:00
6e55a3b21b
Fixes #2643 Happy reviewing!
100 lines
2.2 KiB
JavaScript
100 lines
2.2 KiB
JavaScript
/*! @license
|
|
* Shaka Player
|
|
* Copyright 2016 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
goog.provide('shaka.text.SbvTextParser');
|
|
|
|
goog.require('goog.asserts');
|
|
goog.require('shaka.text.Cue');
|
|
goog.require('shaka.text.TextEngine');
|
|
goog.require('shaka.util.Error');
|
|
goog.require('shaka.util.StringUtils');
|
|
goog.require('shaka.util.TextParser');
|
|
|
|
|
|
/**
|
|
* @implements {shaka.extern.TextParser}
|
|
* @export
|
|
*/
|
|
shaka.text.SbvTextParser = class {
|
|
/**
|
|
* @override
|
|
* @export
|
|
*/
|
|
parseInit(data) {
|
|
goog.asserts.assert(false, 'SubViewer does not have init segments');
|
|
}
|
|
|
|
/**
|
|
* @override
|
|
* @export
|
|
*/
|
|
setSequenceMode(sequenceMode) {
|
|
// Unused.
|
|
}
|
|
|
|
/**
|
|
* @override
|
|
* @export
|
|
*/
|
|
setManifestType(manifestType) {
|
|
// Unused.
|
|
}
|
|
|
|
/**
|
|
* @override
|
|
* @export
|
|
*/
|
|
parseMedia(data, time) {
|
|
const StringUtils = shaka.util.StringUtils;
|
|
|
|
// Get the input as a string.
|
|
const strFromData = StringUtils.fromUTF8(data);
|
|
// remove dos newlines
|
|
let str = strFromData.replace(/\r+/g, '');
|
|
// trim white space start and end
|
|
str = str.trim();
|
|
|
|
/** @type {!Array<!shaka.text.Cue>} */
|
|
const cues = [];
|
|
|
|
// Supports no cues
|
|
if (str == '') {
|
|
return cues;
|
|
}
|
|
|
|
// get cues
|
|
const blocklist = str.split('\n\n');
|
|
for (const block of blocklist) {
|
|
const lines = block.split('\n');
|
|
// Parse the times.
|
|
const parser = new shaka.util.TextParser(lines[0]);
|
|
const start = parser.parseTime();
|
|
const expect = parser.readRegex(/,/g);
|
|
const end = parser.parseTime();
|
|
|
|
if (start == null || expect == null || end == null) {
|
|
throw new shaka.util.Error(
|
|
shaka.util.Error.Severity.CRITICAL,
|
|
shaka.util.Error.Category.TEXT,
|
|
shaka.util.Error.Code.INVALID_TEXT_CUE,
|
|
'Could not parse cue time range in SubViewer');
|
|
}
|
|
|
|
// Get the payload.
|
|
const payload = lines.slice(1).join('\n').trim();
|
|
|
|
const cue = new shaka.text.Cue(start, end, payload);
|
|
cues.push(cue);
|
|
}
|
|
|
|
return cues;
|
|
}
|
|
};
|
|
|
|
|
|
shaka.text.TextEngine.registerParser(
|
|
'text/x-subviewer', () => new shaka.text.SbvTextParser());
|