Files
shaka-player/test/util/manifest_parser_utils_unit.js
T
gmamzn dd5b2dab21 fix(HLS): Add support for DTS and DTS-HD audio codec variants (#9863)
Add DTS (dts), DTS-HD (dtsh), DTS Digital Surround (dtsc), DTS Express
(dtse), and DTS:X (dtsx) to AUDIO_CODEC_REGEXPS using a single merged
regex /^dts[cehx]?$/.

Include regression tests for all new codec variants.
2026-03-20 16:01:02 +01:00

124 lines
3.9 KiB
JavaScript

/*! @license
* Shaka Player
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
describe('ManifestParserUtils', () => {
const ManifestParserUtils = shaka.util.ManifestParserUtils;
describe('guessCodecsSafe', () => {
it('recognizes MPEG-2 video codec (mp2v)', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'video', ['mp2v']);
expect(result).toBe('mp2v');
});
it('returns mp2v from mixed codec list', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'video', ['mp4a.40.2', 'mp2v']);
expect(result).toBe('mp2v');
});
it('does not match mp2v as audio', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'audio', ['mp2v']);
expect(result).toBeNull();
});
it('recognizes DTS audio codec', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'audio', ['dts']);
expect(result).toBe('dts');
});
it('recognizes DTS-HD (dtsh) audio codec', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'audio', ['dtsh']);
expect(result).toBe('dtsh');
});
it('recognizes DTS Digital Surround (dtsc)', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'audio', ['dtsc']);
expect(result).toBe('dtsc');
});
it('recognizes DTS Express (dtse)', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'audio', ['dtse']);
expect(result).toBe('dtse');
});
it('recognizes DTS:X (dtsx)', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'audio', ['dtsx']);
expect(result).toBe('dtsx');
});
it('returns DTS variant from mixed codec list', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'audio', ['avc1.42E01E', 'dtsh']);
expect(result).toBe('dtsh');
});
it('does not match DTS codecs as video', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'video', ['dts']);
expect(result).toBeNull();
});
it('does not match invalid DTS-like strings', () => {
const result = ManifestParserUtils.guessCodecsSafe(
'audio', ['dtsz']);
expect(result).toBeNull();
});
});
describe('resolveUris', () => {
it('resolves relative URIs', () => {
const base = ['http://example.com/'];
const relative = ['page.html'];
const expected = ['http://example.com/page.html'];
const actual = ManifestParserUtils.resolveUris(base, relative);
expect(actual).toEqual(expected);
});
it('resolves URIs multiplicatively', () => {
const base = ['http://example.com/', 'http://example.org'];
const relative = ['page.html', 'site.css'];
const expected = [
'http://example.com/page.html',
'http://example.com/site.css',
'http://example.org/page.html',
'http://example.org/site.css',
];
const actual = ManifestParserUtils.resolveUris(base, relative);
expect(actual).toEqual(expected);
});
it('returns base if no relative URIs', () => {
const base = ['http://example.com'];
const relative = [];
const actual = ManifestParserUtils.resolveUris(base, relative);
expect(actual).toEqual(base);
});
it('handles manifest file as base URI', () => {
const base = [
'http://example.com/manifest.mpd',
'http://example.org/path/to/manifest.mpd',
];
const relative = ['segment.mp4', 'other/location/segment.webm'];
const expected = [
'http://example.com/segment.mp4',
'http://example.com/other/location/segment.webm',
'http://example.org/path/to/segment.mp4',
'http://example.org/path/to/other/location/segment.webm',
];
const actual = ManifestParserUtils.resolveUris(base, relative);
expect(actual).toEqual(expected);
});
});
});