/**
* @license
* Copyright 2016 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
describe('DashParser SegmentList', function() {
const Dash = shaka.test.Dash;
const ManifestParser = shaka.test.ManifestParser;
const baseUri = 'http://example.com/';
shaka.test.Dash.makeTimelineTests('SegmentList', '', [
'',
'',
'',
'',
''
]);
it('truncates segments when lengths don\'t match', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
''
], 65 /* duration */);
let references = [
ManifestParser.makeReference('s1.mp4', 1, 50, 60, baseUri),
ManifestParser.makeReference('s2.mp4', 2, 60, 65, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
it('supports single segment', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
''
], 30 /* duration */);
let references = [ManifestParser.makeReference('s1.mp4', 1,
0, 30, baseUri)];
Dash.testSegmentIndex(done, source, references);
});
describe('duration', function() {
it('basic support', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
' ',
' ',
' ',
''
]);
let references = [
ManifestParser.makeReference('s1.mp4', 1, 0, 10, baseUri),
ManifestParser.makeReference('s2.mp4', 2, 10, 20, baseUri),
ManifestParser.makeReference('s3.mp4', 3, 20, 30, baseUri),
ManifestParser.makeReference('s4.mp4', 4, 30, 40, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
it('uses @startNumber correctly', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
' ',
' ',
' ',
''
]);
let references = [
ManifestParser.makeReference('s1.mp4', 5, 40, 50, baseUri),
ManifestParser.makeReference('s2.mp4', 6, 50, 60, baseUri),
ManifestParser.makeReference('s3.mp4', 7, 60, 70, baseUri),
ManifestParser.makeReference('s4.mp4', 8, 70, 80, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
it('supports @startNumber=0', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
' ',
''
]);
let references = [
ManifestParser.makeReference('s1.mp4', 1, 0, 10, baseUri),
ManifestParser.makeReference('s2.mp4', 2, 10, 20, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
it('supports @timescale', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
' ',
' ',
' ',
''
]);
let references = [
ManifestParser.makeReference('s1.mp4', 1, 0, 2, baseUri),
ManifestParser.makeReference('s2.mp4', 2, 2, 4, baseUri),
ManifestParser.makeReference('s3.mp4', 3, 4, 6, baseUri),
ManifestParser.makeReference('s4.mp4', 4, 6, 8, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
});
describe('rejects streams with', function() {
it('no @duration or SegmentTimeline', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
' ',
' ',
''
]);
let error = new shaka.util.Error(
shaka.util.Error.Severity.CRITICAL,
shaka.util.Error.Category.MANIFEST,
shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);
Dash.testFails(done, source, error);
});
it('one segment and no durations', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
''
]);
let error = new shaka.util.Error(
shaka.util.Error.Severity.CRITICAL,
shaka.util.Error.Category.MANIFEST,
shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);
Dash.testFails(done, source, error);
});
it('empty SegmentTimeline', function(done) {
let source = Dash.makeSimpleManifestText([
'',
' ',
' ',
' ',
''
]);
let error = new shaka.util.Error(
shaka.util.Error.Severity.CRITICAL,
shaka.util.Error.Category.MANIFEST,
shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);
Dash.testFails(done, source, error);
});
});
describe('inherits', function() {
it('attributes', function(done) {
let source = [
'',
' ',
' ',
' ',
' ',
' ',
' http://example.com',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
''
].join('\n');
let references = [
ManifestParser.makeReference('s1.mp4', 1, 0, 50, baseUri),
ManifestParser.makeReference('s2.mp4', 2, 50, 100, baseUri),
ManifestParser.makeReference('s3.mp4', 3, 100, 150, baseUri),
ManifestParser.makeReference('s4.mp4', 4, 150, 200, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
it('SegmentTimeline', function(done) {
let source = [
'',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' http://example.com',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
''
].join('\n');
let references = [
ManifestParser.makeReference('s1.mp4', 1, 50, 60, baseUri),
ManifestParser.makeReference('s2.mp4', 2, 60, 65, baseUri),
ManifestParser.makeReference('s3.mp4', 3, 65, 73, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
it('SegmentURL', function(done) {
let source = [
'',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' http://example.com',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
''
].join('\n');
let references = [
ManifestParser.makeReference('s1.mp4', 1, 50, 60, baseUri),
ManifestParser.makeReference('s2.mp4', 2, 60, 65, baseUri),
ManifestParser.makeReference('s3.mp4', 3, 65, 73, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
});
describe('Segment start', function() {
it('shoud be adjusted with presentationTimeOffset', function(done) {
let source = [
'',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' http://example.com',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
' ',
''
].join('\n');
let references = [
ManifestParser.makeReference('s1.mp4', 1, 40, 50, baseUri),
ManifestParser.makeReference('s2.mp4', 2, 50, 55, baseUri),
ManifestParser.makeReference('s3.mp4', 3, 55, 63, baseUri),
ManifestParser.makeReference('s4.mp4', 4, 63, 70, baseUri)
];
Dash.testSegmentIndex(done, source, references);
});
});
});