shaka-player 4.3.9 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build-and-test.yaml +11 -18
- package/.github/workflows/compute-incremental-coverage.py +3 -0
- package/.github/workflows/release-please.yaml +7 -0
- package/.github/workflows/selenium-lab-tests.yaml +45 -10
- package/AUTHORS +9 -0
- package/CHANGELOG.md +295 -190
- package/CONTRIBUTORS +8 -0
- package/LICENSE +32 -0
- package/README.md +63 -10
- package/demo/autoTemplate.txt +40 -5
- package/demo/close_button.js +11 -0
- package/demo/common/asset.js +13 -1
- package/demo/common/assets.js +112 -28
- package/demo/common/message_ids.js +25 -1
- package/demo/config.js +69 -10
- package/demo/customWarning.txt +2 -2
- package/demo/index.html +3 -1
- package/demo/locales/en.json +26 -2
- package/demo/locales/source.json +105 -9
- package/demo/main.js +57 -9
- package/demo/search.js +3 -1
- package/demo/service_worker.js +3 -0
- package/dist/controls.css +1 -1
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +132 -118
- package/dist/demo.compiled.debug.map +3 -3
- package/dist/demo.compiled.js +132 -118
- package/dist/demo.compiled.map +3 -3
- package/dist/deps.js +46 -28
- package/dist/locales.js +31 -31
- package/dist/receiver.compiled.debug.js +60 -52
- package/dist/receiver.compiled.debug.map +3 -3
- package/dist/receiver.compiled.js +60 -52
- package/dist/receiver.compiled.map +3 -3
- package/dist/shaka-player.compiled.d.ts +676 -391
- package/dist/shaka-player.compiled.debug.d.ts +676 -391
- package/dist/shaka-player.compiled.debug.externs.js +1188 -616
- package/dist/shaka-player.compiled.debug.js +1046 -700
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +1188 -616
- package/dist/shaka-player.compiled.js +1094 -933
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +677 -392
- package/dist/shaka-player.ui.debug.d.ts +677 -392
- package/dist/shaka-player.ui.debug.externs.js +1023 -451
- package/dist/shaka-player.ui.debug.js +1101 -738
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +1023 -451
- package/dist/shaka-player.ui.js +1244 -1071
- package/dist/shaka-player.ui.map +4 -4
- package/docs/tutorials/ad_monetization.md +15 -1
- package/docs/tutorials/application-level-redirects.md +1 -1
- package/docs/tutorials/config.md +9 -5
- package/docs/tutorials/drm-config.md +61 -0
- package/docs/tutorials/fairplay.md +19 -4
- package/docs/tutorials/license-server-auth.md +4 -4
- package/docs/tutorials/license-wrapping.md +2 -2
- package/docs/tutorials/ui-customization.md +7 -3
- package/docs/tutorials/ui.md +7 -7
- package/docs/tutorials/upgrade.md +3 -0
- package/externs/ima.js +123 -2
- package/externs/isoboxer.js +217 -0
- package/externs/mediakeys.js +18 -0
- package/externs/mux.js +1 -105
- package/externs/pictureinpicture.js +48 -0
- package/externs/shaka/ads.js +61 -1
- package/externs/shaka/cea.js +110 -0
- package/externs/shaka/codecs.js +32 -0
- package/externs/shaka/manifest.js +101 -1
- package/externs/shaka/manifest_parser.js +0 -10
- package/externs/shaka/net.js +36 -7
- package/externs/shaka/offline.js +8 -1
- package/externs/shaka/player.js +220 -21
- package/externs/shaka/text.js +1 -382
- package/externs/shaka/transmuxer.js +59 -0
- package/karma.conf.js +15 -0
- package/lib/abr/simple_abr_manager.js +6 -3
- package/lib/ads/ad_manager.js +60 -2
- package/lib/ads/client_side_ad.js +86 -0
- package/lib/ads/client_side_ad_manager.js +93 -5
- package/lib/ads/server_side_ad.js +86 -0
- package/lib/ads/server_side_ad_manager.js +13 -0
- package/lib/cast/cast_utils.js +1 -0
- package/lib/cea/cea608_data_channel.js +24 -14
- package/lib/cea/cea608_memory.js +5 -2
- package/lib/cea/cea708_service.js +8 -9
- package/lib/cea/cea708_window.js +1 -2
- package/lib/cea/cea_decoder.js +23 -6
- package/lib/cea/cea_utils.js +25 -2
- package/lib/cea/dummy_caption_decoder.js +21 -0
- package/lib/cea/dummy_cea_parser.js +1 -3
- package/lib/cea/mp4_cea_parser.js +15 -10
- package/lib/cea/ts_cea_parser.js +69 -0
- package/lib/dash/content_protection.js +32 -2
- package/lib/dash/dash_parser.js +93 -31
- package/lib/dash/mpd_utils.js +6 -25
- package/lib/dash/segment_base.js +12 -14
- package/lib/dash/segment_list.js +10 -6
- package/lib/dash/segment_template.js +349 -32
- package/lib/dependencies/all.js +8 -0
- package/lib/hls/hls_classes.js +33 -8
- package/lib/hls/hls_parser.js +805 -191
- package/lib/hls/manifest_text_parser.js +4 -14
- package/lib/media/adaptation_set_criteria.js +43 -3
- package/lib/media/closed_caption_parser.js +74 -12
- package/lib/media/drm_engine.js +189 -49
- package/lib/media/gap_jumping_controller.js +1 -1
- package/lib/media/manifest_parser.js +34 -0
- package/lib/media/media_source_capabilities.js +10 -0
- package/lib/media/media_source_engine.js +475 -231
- package/lib/media/playhead.js +1 -1
- package/lib/media/presentation_timeline.js +62 -0
- package/lib/media/segment_index.js +50 -14
- package/lib/media/segment_prefetch.js +277 -0
- package/lib/media/segment_reference.js +70 -4
- package/lib/media/streaming_engine.js +258 -81
- package/lib/media/video_wrapper.js +15 -7
- package/lib/mss/content_protection.js +353 -0
- package/lib/mss/mss_parser.js +1081 -0
- package/lib/net/networking_engine.js +60 -10
- package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
- package/lib/offline/manifest_converter.js +6 -0
- package/lib/offline/storage.js +2 -4
- package/lib/player.js +309 -105
- package/lib/polyfill/media_capabilities.js +43 -3
- package/lib/polyfill/patchedmediakeys_apple.js +5 -0
- package/lib/polyfill/patchedmediakeys_nop.js +5 -0
- package/lib/polyfill/patchedmediakeys_webkit.js +5 -0
- package/lib/text/cue.js +208 -130
- package/lib/text/lrc_text_parser.js +2 -2
- package/lib/text/mp4_vtt_parser.js +2 -2
- package/lib/text/sbv_text_parser.js +1 -1
- package/lib/text/simple_text_displayer.js +2 -1
- package/lib/text/srt_text_parser.js +9 -1
- package/lib/text/ssa_text_parser.js +2 -2
- package/lib/text/text_engine.js +3 -21
- package/lib/text/text_utils.js +71 -20
- package/lib/text/ui_text_displayer.js +14 -14
- package/lib/text/vtt_text_parser.js +22 -14
- package/lib/transmuxer/aac_transmuxer.js +224 -0
- package/lib/transmuxer/ac3.js +142 -0
- package/lib/transmuxer/ac3_transmuxer.js +212 -0
- package/lib/transmuxer/adts.js +232 -0
- package/lib/transmuxer/ec3.js +103 -0
- package/lib/transmuxer/ec3_transmuxer.js +212 -0
- package/lib/transmuxer/h264.js +324 -0
- package/lib/transmuxer/mp3_transmuxer.js +204 -0
- package/lib/transmuxer/mpeg_audio.js +196 -0
- package/lib/transmuxer/mpeg_ts_transmuxer.js +182 -0
- package/lib/transmuxer/mss_transmuxer.js +389 -0
- package/lib/{media/transmuxer.js → transmuxer/muxjs_transmuxer.js} +34 -80
- package/lib/transmuxer/transmuxer_engine.js +161 -0
- package/lib/transmuxer/ts_transmuxer.js +738 -0
- package/lib/util/cmcd_manager.js +131 -71
- package/lib/util/error.js +62 -26
- package/lib/util/exp_golomb.js +220 -0
- package/lib/util/fairplay_utils.js +64 -13
- package/lib/util/id3_utils.js +56 -3
- package/lib/util/language_utils.js +11 -8
- package/lib/util/manifest_parser_utils.js +3 -0
- package/lib/util/mime_utils.js +44 -7
- package/lib/util/mp4_box_parsers.js +233 -5
- package/lib/util/mp4_generator.js +1381 -0
- package/lib/util/periods.js +40 -34
- package/lib/util/platform.js +25 -3
- package/lib/util/player_configuration.js +38 -1
- package/lib/util/stream_utils.js +138 -27
- package/lib/util/text_parser.js +1 -1
- package/lib/util/ts_parser.js +470 -47
- package/lib/util/xml_utils.js +16 -3
- package/maintained-branches.md +2 -2
- package/package.json +4 -2
- package/roadmap.md +21 -6
- package/shaka-player.uncompiled.js +18 -0
- package/test/abr/simple_abr_manager_unit.js +32 -4
- package/test/ads/ad_manager_unit.js +18 -2
- package/test/cast/cast_utils_unit.js +7 -2
- package/test/cea/cea608_memory_unit.js +24 -0
- package/test/cea/cea_decoder_unit.js +33 -0
- package/test/dash/dash_parser_content_protection_unit.js +93 -3
- package/test/dash/dash_parser_live_unit.js +56 -13
- package/test/dash/dash_parser_manifest_unit.js +70 -2
- package/test/dash/dash_parser_segment_base_unit.js +14 -9
- package/test/dash/dash_parser_segment_template_unit.js +286 -6
- package/test/demo/demo_unit.js +5 -1
- package/test/hls/hls_live_unit.js +188 -28
- package/test/hls/hls_parser_unit.js +250 -109
- package/test/hls/manifest_text_parser_unit.js +18 -13
- package/test/media/adaptation_set_criteria_unit.js +46 -14
- package/test/media/adaptation_set_unit.js +2 -0
- package/test/media/drm_engine_integration.js +11 -8
- package/test/media/drm_engine_unit.js +220 -7
- package/test/media/media_source_engine_integration.js +122 -38
- package/test/media/media_source_engine_unit.js +133 -153
- package/test/media/playhead_unit.js +3 -0
- package/test/media/presentation_timeline_unit.js +51 -0
- package/test/media/segment_index_unit.js +52 -0
- package/test/media/segment_prefetch_unit.js +243 -0
- package/test/media/streaming_engine_integration.js +9 -3
- package/test/media/streaming_engine_unit.js +440 -59
- package/test/mss/mss_parser_content_protection_unit.js +49 -0
- package/test/mss/mss_parser_unit.js +472 -0
- package/test/mss/mss_player_integration.js +123 -0
- package/test/offline/manifest_convert_unit.js +9 -0
- package/test/offline/storage_integration.js +6 -1
- package/test/player_integration.js +4 -1
- package/test/player_unit.js +386 -133
- package/test/polyfill/media_capabilities_unit.js +18 -0
- package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
- package/test/test/assets/hls-raw-aac/manifest.m3u8 +4 -0
- package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +14 -0
- package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +31 -0
- package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +31 -0
- package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +13 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/playlist.m3u8 +4 -0
- package/test/test/assets/hls-ts-aac/playlist.m3u8 +23 -0
- package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
- package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +19 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
- package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +19 -0
- package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
- package/test/test/assets/hls-ts-h264/prog_index.m3u8 +25 -0
- package/test/test/assets/hls-ts-mp3/manifest.m3u8 +13 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +17 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +4 -0
- package/test/test/boot.js +7 -2
- package/test/test/util/fake_ad.js +99 -0
- package/test/test/util/fake_ad_manager.js +7 -1
- package/test/test/util/fake_networking_engine.js +41 -14
- package/test/test/util/fake_segment_prefetch.js +81 -0
- package/test/test/util/manifest_generator.js +19 -5
- package/test/test/util/mss_parser_util.js +115 -0
- package/test/test/util/offline_utils.js +1 -0
- package/test/test/util/simple_fakes.js +12 -3
- package/test/test/util/streaming_engine_util.js +14 -4
- package/test/test/util/ttml_utils.js +2 -2
- package/test/test/util/ui_utils.js +5 -1
- package/test/text/cue_integration.js +1 -1
- package/test/text/srt_text_parser_unit.js +78 -0
- package/test/text/text_engine_unit.js +17 -8
- package/test/text/ui_text_displayer_unit.js +4 -4
- package/test/text/vtt_text_parser_unit.js +59 -40
- package/test/text/web_vtt_generator_unit.js +9 -3
- package/test/{media/transmuxer_integration.js → transmuxer/muxjs_transmuxer_integration.js} +30 -33
- package/test/transmuxer/transmuxer_engine_integration.js +60 -0
- package/test/transmuxer/transmuxer_integration.js +296 -0
- package/test/util/cmcd_manager_unit.js +162 -13
- package/test/util/language_utils_unit.js +9 -2
- package/test/util/mp4_box_parsers_unit.js +39 -4
- package/test/util/periods_unit.js +34 -26
- package/test/util/stream_utils_unit.js +60 -107
- package/ui/controls.js +19 -1
- package/ui/controls.less +1 -0
- package/ui/externs/ui.js +13 -3
- package/ui/language_utils.js +15 -0
- package/ui/less/thumbnails.less +26 -0
- package/ui/locales/oc.json +42 -0
- package/ui/pip_button.js +83 -2
- package/ui/range_element.js +15 -0
- package/ui/resolution_selection.js +9 -2
- package/ui/seek_bar.js +230 -1
- package/ui/ui.js +5 -0
- package/lib/cea/i_caption_decoder.js +0 -51
- package/lib/cea/i_cea_parser.js +0 -68
|
@@ -10,6 +10,10 @@ describe('HlsParser', () => {
|
|
|
10
10
|
const Util = shaka.test.Util;
|
|
11
11
|
const originalAlwaysWarn = shaka.log.alwaysWarn;
|
|
12
12
|
|
|
13
|
+
const videoInitSegmentUri = '/base/test/test/assets/sintel-video-init.mp4';
|
|
14
|
+
const videoSegmentUri = '/base/test/test/assets/sintel-video-segment.mp4';
|
|
15
|
+
const videoTsSegmentUri = '/base/test/test/assets/video.ts';
|
|
16
|
+
|
|
13
17
|
const vttText = [
|
|
14
18
|
'WEBVTT\n',
|
|
15
19
|
'\n',
|
|
@@ -34,52 +38,33 @@ describe('HlsParser', () => {
|
|
|
34
38
|
/** @type {!Uint8Array} */
|
|
35
39
|
let segmentData;
|
|
36
40
|
/** @type {!Uint8Array} */
|
|
41
|
+
let tsSegmentData;
|
|
42
|
+
/** @type {!Uint8Array} */
|
|
37
43
|
let selfInitializingSegmentData;
|
|
38
44
|
/** @type {!Uint8Array} */
|
|
39
45
|
let aes128Key;
|
|
46
|
+
/** @type {!boolean} */
|
|
47
|
+
let sequenceMode;
|
|
40
48
|
|
|
41
49
|
afterEach(() => {
|
|
42
50
|
shaka.log.alwaysWarn = originalAlwaysWarn;
|
|
43
51
|
parser.stop();
|
|
44
52
|
});
|
|
45
53
|
|
|
46
|
-
beforeEach(() => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
0x00, 0x00, 0x00, 0x28, // trak size (40)
|
|
52
|
-
0x74, 0x72, 0x61, 0x6B, // type (trak)
|
|
53
|
-
0x00, 0x00, 0x00, 0x20, // mdia size (32)
|
|
54
|
-
0x6D, 0x64, 0x69, 0x61, // type (mdia)
|
|
55
|
-
|
|
56
|
-
0x00, 0x00, 0x00, 0x18, // mdhd size (24)
|
|
57
|
-
0x6D, 0x64, 0x68, 0x64, // type (mdhd)
|
|
58
|
-
0x00, 0x00, 0x00, 0x00, // version and flags
|
|
59
|
-
|
|
60
|
-
0x00, 0x00, 0x00, 0x00, // creation time (0)
|
|
61
|
-
0x00, 0x00, 0x00, 0x00, // modification time (0)
|
|
62
|
-
0x00, 0x00, 0x03, 0xe8, // timescale (1000)
|
|
54
|
+
beforeEach(async () => {
|
|
55
|
+
const responses = await Promise.all([
|
|
56
|
+
shaka.test.Util.fetch(videoInitSegmentUri),
|
|
57
|
+
shaka.test.Util.fetch(videoSegmentUri),
|
|
58
|
+
shaka.test.Util.fetch(videoTsSegmentUri),
|
|
63
59
|
]);
|
|
64
|
-
|
|
65
|
-
segmentData =
|
|
66
|
-
0x00, 0x00, 0x00, 0x24, // size (36)
|
|
67
|
-
0x6D, 0x6F, 0x6F, 0x66, // type (moof)
|
|
68
|
-
0x00, 0x00, 0x00, 0x1C, // traf size (28)
|
|
69
|
-
0x74, 0x72, 0x61, 0x66, // type (traf)
|
|
70
|
-
|
|
71
|
-
0x00, 0x00, 0x00, 0x14, // tfdt size (20)
|
|
72
|
-
0x74, 0x66, 0x64, 0x74, // type (tfdt)
|
|
73
|
-
0x01, 0x00, 0x00, 0x00, // version and flags
|
|
74
|
-
|
|
75
|
-
0x00, 0x00, 0x00, 0x00, // baseMediaDecodeTime first 4 bytes (0)
|
|
76
|
-
0x00, 0x00, 0x00, 0x00, // baseMediaDecodeTime last 4 bytes (0)
|
|
77
|
-
]);
|
|
78
|
-
// segment starts at 0s.
|
|
60
|
+
initSegmentData = responses[0];
|
|
61
|
+
segmentData = responses[1];
|
|
79
62
|
|
|
80
63
|
selfInitializingSegmentData =
|
|
81
64
|
shaka.util.Uint8ArrayUtils.concat(initSegmentData, segmentData);
|
|
82
65
|
|
|
66
|
+
tsSegmentData = responses[2];
|
|
67
|
+
|
|
83
68
|
aes128Key = new Uint8Array([
|
|
84
69
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
|
85
70
|
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
|
@@ -88,6 +73,7 @@ describe('HlsParser', () => {
|
|
|
88
73
|
fakeNetEngine = new shaka.test.FakeNetworkingEngine();
|
|
89
74
|
|
|
90
75
|
config = shaka.util.PlayerConfiguration.createDefault().manifest;
|
|
76
|
+
sequenceMode = config.hls.sequenceMode;
|
|
91
77
|
onEventSpy = jasmine.createSpy('onEvent');
|
|
92
78
|
newDrmInfoSpy = jasmine.createSpy('newDrmInfo');
|
|
93
79
|
playerInterface = {
|
|
@@ -129,6 +115,7 @@ describe('HlsParser', () => {
|
|
|
129
115
|
.setResponseText('test:/main.vtt', vttText)
|
|
130
116
|
.setResponseValue('test:/init.mp4', initSegmentData)
|
|
131
117
|
.setResponseValue('test:/init2.mp4', initSegmentData)
|
|
118
|
+
.setResponseValue('test:/init.test', initSegmentData)
|
|
132
119
|
.setResponseValue('test:/main.mp4', segmentData)
|
|
133
120
|
.setResponseValue('test:/main2.mp4', segmentData)
|
|
134
121
|
.setResponseValue('test:/main.test', segmentData)
|
|
@@ -163,7 +150,7 @@ describe('HlsParser', () => {
|
|
|
163
150
|
const master = [
|
|
164
151
|
'#EXTM3U\n',
|
|
165
152
|
'#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",',
|
|
166
|
-
'CHANNELS="16/JOC",URI="audio"\n',
|
|
153
|
+
'CHANNELS="16/JOC",SAMPLE-RATE="48000",URI="audio"\n',
|
|
167
154
|
'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="eng",',
|
|
168
155
|
'URI="text"\n',
|
|
169
156
|
'#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub2",LANGUAGE="es",',
|
|
@@ -191,7 +178,8 @@ describe('HlsParser', () => {
|
|
|
191
178
|
].join('');
|
|
192
179
|
|
|
193
180
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
194
|
-
manifest.sequenceMode =
|
|
181
|
+
manifest.sequenceMode = sequenceMode;
|
|
182
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
195
183
|
manifest.anyTimeline();
|
|
196
184
|
manifest.addPartialVariant((variant) => {
|
|
197
185
|
variant.language = 'en';
|
|
@@ -203,18 +191,22 @@ describe('HlsParser', () => {
|
|
|
203
191
|
});
|
|
204
192
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
205
193
|
stream.language = 'en';
|
|
194
|
+
stream.originalLanguage = 'eng';
|
|
206
195
|
stream.channelsCount = 16;
|
|
196
|
+
stream.audioSamplingRate = 48000;
|
|
207
197
|
stream.spatialAudio = true;
|
|
208
198
|
stream.mime('audio/mp4', 'mp4a');
|
|
209
199
|
});
|
|
210
200
|
});
|
|
211
201
|
manifest.addPartialTextStream((stream) => {
|
|
212
202
|
stream.language = 'en';
|
|
203
|
+
stream.originalLanguage = 'eng';
|
|
213
204
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
214
205
|
stream.mime('text/vtt', '');
|
|
215
206
|
});
|
|
216
207
|
manifest.addPartialTextStream((stream) => {
|
|
217
208
|
stream.language = 'es';
|
|
209
|
+
stream.originalLanguage = 'es';
|
|
218
210
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
219
211
|
stream.mime('text/vtt', '');
|
|
220
212
|
});
|
|
@@ -267,7 +259,8 @@ describe('HlsParser', () => {
|
|
|
267
259
|
].join('');
|
|
268
260
|
|
|
269
261
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
270
|
-
manifest.sequenceMode =
|
|
262
|
+
manifest.sequenceMode = sequenceMode;
|
|
263
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
271
264
|
manifest.anyTimeline();
|
|
272
265
|
manifest.addPartialVariant((variant) => {
|
|
273
266
|
variant.language = 'en';
|
|
@@ -279,6 +272,7 @@ describe('HlsParser', () => {
|
|
|
279
272
|
});
|
|
280
273
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
281
274
|
stream.language = 'en';
|
|
275
|
+
stream.originalLanguage = 'eng';
|
|
282
276
|
stream.channelsCount = 16;
|
|
283
277
|
stream.spatialAudio = true;
|
|
284
278
|
stream.mime('audio/mp4', 'mp4a');
|
|
@@ -286,11 +280,13 @@ describe('HlsParser', () => {
|
|
|
286
280
|
});
|
|
287
281
|
manifest.addPartialTextStream((stream) => {
|
|
288
282
|
stream.language = 'en';
|
|
283
|
+
stream.originalLanguage = 'eng';
|
|
289
284
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
290
285
|
stream.mime('text/vtt', '');
|
|
291
286
|
});
|
|
292
287
|
manifest.addPartialTextStream((stream) => {
|
|
293
288
|
stream.language = 'es';
|
|
289
|
+
stream.originalLanguage = 'es';
|
|
294
290
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
295
291
|
stream.mime('text/vtt', '');
|
|
296
292
|
});
|
|
@@ -339,7 +335,8 @@ describe('HlsParser', () => {
|
|
|
339
335
|
stream.size(960, 540);
|
|
340
336
|
});
|
|
341
337
|
});
|
|
342
|
-
manifest.sequenceMode =
|
|
338
|
+
manifest.sequenceMode = sequenceMode;
|
|
339
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
343
340
|
});
|
|
344
341
|
|
|
345
342
|
fakeNetEngine
|
|
@@ -377,7 +374,8 @@ describe('HlsParser', () => {
|
|
|
377
374
|
stream.mime('video/mp4', 'avc1.4d001e');
|
|
378
375
|
});
|
|
379
376
|
});
|
|
380
|
-
manifest.sequenceMode =
|
|
377
|
+
manifest.sequenceMode = sequenceMode;
|
|
378
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
381
379
|
});
|
|
382
380
|
|
|
383
381
|
await testHlsParser(master, media, manifest);
|
|
@@ -407,7 +405,8 @@ describe('HlsParser', () => {
|
|
|
407
405
|
stream.mime('video/mp4', 'avc1');
|
|
408
406
|
});
|
|
409
407
|
});
|
|
410
|
-
manifest.sequenceMode =
|
|
408
|
+
manifest.sequenceMode = sequenceMode;
|
|
409
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
411
410
|
});
|
|
412
411
|
|
|
413
412
|
await testHlsParser(master, media, manifest);
|
|
@@ -436,7 +435,8 @@ describe('HlsParser', () => {
|
|
|
436
435
|
stream.mime('video/mp4', 'avc1');
|
|
437
436
|
});
|
|
438
437
|
});
|
|
439
|
-
manifest.sequenceMode =
|
|
438
|
+
manifest.sequenceMode = sequenceMode;
|
|
439
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
440
440
|
});
|
|
441
441
|
|
|
442
442
|
await testHlsParser(master, media, manifest);
|
|
@@ -468,7 +468,8 @@ describe('HlsParser', () => {
|
|
|
468
468
|
stream.mime('video/mp4', 'avc1');
|
|
469
469
|
});
|
|
470
470
|
});
|
|
471
|
-
manifest.sequenceMode =
|
|
471
|
+
manifest.sequenceMode = sequenceMode;
|
|
472
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
472
473
|
});
|
|
473
474
|
|
|
474
475
|
await testHlsParser(master, media, manifest);
|
|
@@ -497,7 +498,8 @@ describe('HlsParser', () => {
|
|
|
497
498
|
stream.mime('audio/mp4', 'mp4a');
|
|
498
499
|
});
|
|
499
500
|
});
|
|
500
|
-
manifest.sequenceMode =
|
|
501
|
+
manifest.sequenceMode = sequenceMode;
|
|
502
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
501
503
|
});
|
|
502
504
|
|
|
503
505
|
await testHlsParser(master, media, manifest);
|
|
@@ -532,7 +534,8 @@ describe('HlsParser', () => {
|
|
|
532
534
|
stream.mime('audio/mp4', 'mp4a');
|
|
533
535
|
});
|
|
534
536
|
});
|
|
535
|
-
manifest.sequenceMode =
|
|
537
|
+
manifest.sequenceMode = sequenceMode;
|
|
538
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
536
539
|
});
|
|
537
540
|
|
|
538
541
|
await testHlsParser(master, media, manifest);
|
|
@@ -564,10 +567,11 @@ describe('HlsParser', () => {
|
|
|
564
567
|
stream.mime('video/mp4', 'avc1');
|
|
565
568
|
});
|
|
566
569
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
567
|
-
stream.mime('audio/mp4', '');
|
|
570
|
+
stream.mime('audio/mp4', 'mp4a.40.34');
|
|
568
571
|
});
|
|
569
572
|
});
|
|
570
|
-
manifest.sequenceMode =
|
|
573
|
+
manifest.sequenceMode = sequenceMode;
|
|
574
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
571
575
|
});
|
|
572
576
|
|
|
573
577
|
await testHlsParser(master, media, manifest);
|
|
@@ -592,10 +596,11 @@ describe('HlsParser', () => {
|
|
|
592
596
|
manifest.anyTimeline();
|
|
593
597
|
manifest.addPartialVariant((variant) => {
|
|
594
598
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
595
|
-
stream.mime('audio/aac', '');
|
|
599
|
+
stream.mime('audio/aac', 'mp4a.40.2');
|
|
596
600
|
});
|
|
597
601
|
});
|
|
598
|
-
manifest.sequenceMode =
|
|
602
|
+
manifest.sequenceMode = sequenceMode;
|
|
603
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
599
604
|
});
|
|
600
605
|
|
|
601
606
|
await testHlsParser(master, media, manifest);
|
|
@@ -619,10 +624,11 @@ describe('HlsParser', () => {
|
|
|
619
624
|
manifest.anyTimeline();
|
|
620
625
|
manifest.addPartialVariant((variant) => {
|
|
621
626
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
622
|
-
stream.mime('audio/mpeg', '');
|
|
627
|
+
stream.mime('audio/mpeg', 'mp4a.40.34');
|
|
623
628
|
});
|
|
624
629
|
});
|
|
625
|
-
manifest.sequenceMode =
|
|
630
|
+
manifest.sequenceMode = sequenceMode;
|
|
631
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
626
632
|
});
|
|
627
633
|
|
|
628
634
|
await testHlsParser(master, media, manifest);
|
|
@@ -658,7 +664,8 @@ describe('HlsParser', () => {
|
|
|
658
664
|
stream.mime('audio/mp4', 'flac');
|
|
659
665
|
});
|
|
660
666
|
});
|
|
661
|
-
manifest.sequenceMode =
|
|
667
|
+
manifest.sequenceMode = sequenceMode;
|
|
668
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
662
669
|
});
|
|
663
670
|
|
|
664
671
|
await testHlsParser(master, media, manifest);
|
|
@@ -694,7 +701,8 @@ describe('HlsParser', () => {
|
|
|
694
701
|
stream.mime('audio/mp4', 'opus');
|
|
695
702
|
});
|
|
696
703
|
});
|
|
697
|
-
manifest.sequenceMode =
|
|
704
|
+
manifest.sequenceMode = sequenceMode;
|
|
705
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
698
706
|
});
|
|
699
707
|
|
|
700
708
|
await testHlsParser(master, media, manifest);
|
|
@@ -733,7 +741,8 @@ describe('HlsParser', () => {
|
|
|
733
741
|
stream.mime('audio/mp4', 'mp4a');
|
|
734
742
|
});
|
|
735
743
|
});
|
|
736
|
-
manifest.sequenceMode =
|
|
744
|
+
manifest.sequenceMode = sequenceMode;
|
|
745
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
737
746
|
});
|
|
738
747
|
|
|
739
748
|
await testHlsParser(master, media, manifest);
|
|
@@ -770,7 +779,8 @@ describe('HlsParser', () => {
|
|
|
770
779
|
stream.mime('audio/mp4', 'mp4a');
|
|
771
780
|
});
|
|
772
781
|
});
|
|
773
|
-
manifest.sequenceMode =
|
|
782
|
+
manifest.sequenceMode = sequenceMode;
|
|
783
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
774
784
|
});
|
|
775
785
|
|
|
776
786
|
await testHlsParser(master, media, manifest);
|
|
@@ -801,7 +811,8 @@ describe('HlsParser', () => {
|
|
|
801
811
|
stream.mime('audio/mp4', 'mp4a');
|
|
802
812
|
});
|
|
803
813
|
});
|
|
804
|
-
manifest.sequenceMode =
|
|
814
|
+
manifest.sequenceMode = sequenceMode;
|
|
815
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
805
816
|
});
|
|
806
817
|
|
|
807
818
|
await testHlsParser(master, media, manifest);
|
|
@@ -831,7 +842,8 @@ describe('HlsParser', () => {
|
|
|
831
842
|
stream.mime('video/mp4', 'avc1,mp4a');
|
|
832
843
|
});
|
|
833
844
|
});
|
|
834
|
-
manifest.sequenceMode =
|
|
845
|
+
manifest.sequenceMode = sequenceMode;
|
|
846
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
835
847
|
});
|
|
836
848
|
|
|
837
849
|
await testHlsParser(master, media, manifest);
|
|
@@ -861,7 +873,8 @@ describe('HlsParser', () => {
|
|
|
861
873
|
stream.mime('video/mp4', /** @type {?} */ (jasmine.any(String)));
|
|
862
874
|
});
|
|
863
875
|
});
|
|
864
|
-
manifest.sequenceMode =
|
|
876
|
+
manifest.sequenceMode = sequenceMode;
|
|
877
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
865
878
|
});
|
|
866
879
|
|
|
867
880
|
await testHlsParser(master, media, manifest);
|
|
@@ -896,7 +909,8 @@ describe('HlsParser', () => {
|
|
|
896
909
|
stream.mime('audio/mp4', /** @type {?} */ (jasmine.any(String)));
|
|
897
910
|
});
|
|
898
911
|
});
|
|
899
|
-
manifest.sequenceMode =
|
|
912
|
+
manifest.sequenceMode = sequenceMode;
|
|
913
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
900
914
|
});
|
|
901
915
|
|
|
902
916
|
await testHlsParser(master, media, manifest);
|
|
@@ -927,7 +941,8 @@ describe('HlsParser', () => {
|
|
|
927
941
|
stream.mime('video/mp4', /** @type {?} */ (jasmine.any(String)));
|
|
928
942
|
});
|
|
929
943
|
});
|
|
930
|
-
manifest.sequenceMode =
|
|
944
|
+
manifest.sequenceMode = sequenceMode;
|
|
945
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
931
946
|
});
|
|
932
947
|
|
|
933
948
|
await testHlsParser(master, media, manifest);
|
|
@@ -958,7 +973,8 @@ describe('HlsParser', () => {
|
|
|
958
973
|
stream.mime('audio/mp4', /** @type {?} */ (jasmine.any(String)));
|
|
959
974
|
});
|
|
960
975
|
});
|
|
961
|
-
manifest.sequenceMode =
|
|
976
|
+
manifest.sequenceMode = sequenceMode;
|
|
977
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
962
978
|
});
|
|
963
979
|
|
|
964
980
|
await testHlsParser(master, media, manifest);
|
|
@@ -998,6 +1014,7 @@ describe('HlsParser', () => {
|
|
|
998
1014
|
});
|
|
999
1015
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
1000
1016
|
stream.language = 'en';
|
|
1017
|
+
stream.originalLanguage = 'eng';
|
|
1001
1018
|
});
|
|
1002
1019
|
});
|
|
1003
1020
|
manifest.addPartialVariant((variant) => {
|
|
@@ -1008,9 +1025,11 @@ describe('HlsParser', () => {
|
|
|
1008
1025
|
});
|
|
1009
1026
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
1010
1027
|
stream.language = 'fr';
|
|
1028
|
+
stream.originalLanguage = 'fr';
|
|
1011
1029
|
});
|
|
1012
1030
|
});
|
|
1013
|
-
manifest.sequenceMode =
|
|
1031
|
+
manifest.sequenceMode = sequenceMode;
|
|
1032
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1014
1033
|
});
|
|
1015
1034
|
|
|
1016
1035
|
await testHlsParser(master, media, manifest);
|
|
@@ -1044,6 +1063,7 @@ describe('HlsParser', () => {
|
|
|
1044
1063
|
variant.addPartialStream(ContentType.VIDEO);
|
|
1045
1064
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
1046
1065
|
stream.language = 'en';
|
|
1066
|
+
stream.originalLanguage = 'en';
|
|
1047
1067
|
});
|
|
1048
1068
|
});
|
|
1049
1069
|
manifest.addPartialVariant((variant) => {
|
|
@@ -1051,9 +1071,11 @@ describe('HlsParser', () => {
|
|
|
1051
1071
|
variant.addPartialStream(ContentType.VIDEO);
|
|
1052
1072
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
1053
1073
|
stream.language = 'fr';
|
|
1074
|
+
stream.originalLanguage = 'fr';
|
|
1054
1075
|
});
|
|
1055
1076
|
});
|
|
1056
|
-
manifest.sequenceMode =
|
|
1077
|
+
manifest.sequenceMode = sequenceMode;
|
|
1078
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1057
1079
|
});
|
|
1058
1080
|
|
|
1059
1081
|
await testHlsParser(master, media, manifest);
|
|
@@ -1203,6 +1225,7 @@ describe('HlsParser', () => {
|
|
|
1203
1225
|
variant.addPartialStream(ContentType.VIDEO);
|
|
1204
1226
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
1205
1227
|
stream.language = 'en';
|
|
1228
|
+
stream.originalLanguage = 'en';
|
|
1206
1229
|
});
|
|
1207
1230
|
});
|
|
1208
1231
|
manifest.addPartialVariant((variant) => {
|
|
@@ -1210,13 +1233,15 @@ describe('HlsParser', () => {
|
|
|
1210
1233
|
variant.addPartialStream(ContentType.VIDEO);
|
|
1211
1234
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
1212
1235
|
stream.language = 'en';
|
|
1236
|
+
stream.originalLanguage = 'en';
|
|
1213
1237
|
stream.roles = [
|
|
1214
1238
|
'public.accessibility.describes-video',
|
|
1215
1239
|
'public.accessibility.describes-music-and-sound',
|
|
1216
1240
|
];
|
|
1217
1241
|
});
|
|
1218
1242
|
});
|
|
1219
|
-
manifest.sequenceMode =
|
|
1243
|
+
manifest.sequenceMode = sequenceMode;
|
|
1244
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1220
1245
|
});
|
|
1221
1246
|
|
|
1222
1247
|
await testHlsParser(master, media, manifest);
|
|
@@ -1281,7 +1306,8 @@ describe('HlsParser', () => {
|
|
|
1281
1306
|
'public.accessibility.describes-music-and-sound',
|
|
1282
1307
|
];
|
|
1283
1308
|
});
|
|
1284
|
-
manifest.sequenceMode =
|
|
1309
|
+
manifest.sequenceMode = sequenceMode;
|
|
1310
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1285
1311
|
});
|
|
1286
1312
|
|
|
1287
1313
|
fakeNetEngine.setResponseText('test:/master', master);
|
|
@@ -1336,7 +1362,8 @@ describe('HlsParser', () => {
|
|
|
1336
1362
|
'public.accessibility.describes-music-and-sound',
|
|
1337
1363
|
];
|
|
1338
1364
|
});
|
|
1339
|
-
manifest.sequenceMode =
|
|
1365
|
+
manifest.sequenceMode = sequenceMode;
|
|
1366
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1340
1367
|
});
|
|
1341
1368
|
|
|
1342
1369
|
await testHlsParser(master, media, manifest);
|
|
@@ -1401,7 +1428,8 @@ describe('HlsParser', () => {
|
|
|
1401
1428
|
'public.accessibility.describes-music-and-sound',
|
|
1402
1429
|
];
|
|
1403
1430
|
});
|
|
1404
|
-
manifest.sequenceMode =
|
|
1431
|
+
manifest.sequenceMode = sequenceMode;
|
|
1432
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1405
1433
|
});
|
|
1406
1434
|
|
|
1407
1435
|
fakeNetEngine.setResponseText('test:/master', master);
|
|
@@ -1437,7 +1465,8 @@ describe('HlsParser', () => {
|
|
|
1437
1465
|
stream.mime('video/mp4', 'avc1');
|
|
1438
1466
|
});
|
|
1439
1467
|
});
|
|
1440
|
-
manifest.sequenceMode =
|
|
1468
|
+
manifest.sequenceMode = sequenceMode;
|
|
1469
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1441
1470
|
});
|
|
1442
1471
|
|
|
1443
1472
|
// The extra parameters should be stripped by the parser.
|
|
@@ -1491,11 +1520,13 @@ describe('HlsParser', () => {
|
|
|
1491
1520
|
});
|
|
1492
1521
|
manifest.addPartialTextStream((stream) => {
|
|
1493
1522
|
stream.language = 'en';
|
|
1523
|
+
stream.originalLanguage = 'eng';
|
|
1494
1524
|
stream.forced = true;
|
|
1495
1525
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
1496
1526
|
stream.mime('text/vtt', '');
|
|
1497
1527
|
});
|
|
1498
|
-
manifest.sequenceMode =
|
|
1528
|
+
manifest.sequenceMode = sequenceMode;
|
|
1529
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1499
1530
|
});
|
|
1500
1531
|
|
|
1501
1532
|
fakeNetEngine
|
|
@@ -1558,15 +1589,18 @@ describe('HlsParser', () => {
|
|
|
1558
1589
|
});
|
|
1559
1590
|
manifest.addPartialTextStream((stream) => {
|
|
1560
1591
|
stream.language = 'en';
|
|
1592
|
+
stream.originalLanguage = 'eng';
|
|
1561
1593
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
1562
1594
|
stream.mime('text/vtt', '');
|
|
1563
1595
|
});
|
|
1564
1596
|
manifest.addPartialTextStream((stream) => {
|
|
1565
1597
|
stream.language = 'es';
|
|
1598
|
+
stream.originalLanguage = 'es';
|
|
1566
1599
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
1567
1600
|
stream.mime('text/vtt', '');
|
|
1568
1601
|
});
|
|
1569
|
-
manifest.sequenceMode =
|
|
1602
|
+
manifest.sequenceMode = sequenceMode;
|
|
1603
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1570
1604
|
});
|
|
1571
1605
|
|
|
1572
1606
|
fakeNetEngine
|
|
@@ -1628,7 +1662,8 @@ describe('HlsParser', () => {
|
|
|
1628
1662
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
1629
1663
|
stream.mime('application/mp4', '');
|
|
1630
1664
|
});
|
|
1631
|
-
manifest.sequenceMode =
|
|
1665
|
+
manifest.sequenceMode = sequenceMode;
|
|
1666
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1632
1667
|
});
|
|
1633
1668
|
|
|
1634
1669
|
fakeNetEngine
|
|
@@ -1689,11 +1724,13 @@ describe('HlsParser', () => {
|
|
|
1689
1724
|
});
|
|
1690
1725
|
manifest.addPartialTextStream((stream) => {
|
|
1691
1726
|
stream.language = 'en';
|
|
1727
|
+
stream.originalLanguage = 'eng';
|
|
1692
1728
|
stream.forced = true;
|
|
1693
1729
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
1694
1730
|
stream.mime('text/vtt', '');
|
|
1695
1731
|
});
|
|
1696
|
-
manifest.sequenceMode =
|
|
1732
|
+
manifest.sequenceMode = sequenceMode;
|
|
1733
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1697
1734
|
});
|
|
1698
1735
|
|
|
1699
1736
|
fakeNetEngine
|
|
@@ -1756,7 +1793,8 @@ describe('HlsParser', () => {
|
|
|
1756
1793
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
1757
1794
|
stream.mime('text/vtt', '');
|
|
1758
1795
|
});
|
|
1759
|
-
manifest.sequenceMode =
|
|
1796
|
+
manifest.sequenceMode = sequenceMode;
|
|
1797
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
1760
1798
|
});
|
|
1761
1799
|
|
|
1762
1800
|
fakeNetEngine
|
|
@@ -2442,9 +2480,11 @@ describe('HlsParser', () => {
|
|
|
2442
2480
|
});
|
|
2443
2481
|
manifest.addPartialTextStream((stream) => {
|
|
2444
2482
|
stream.language = 'en';
|
|
2483
|
+
stream.originalLanguage = 'eng';
|
|
2445
2484
|
stream.mime('application/mp4', 'stpp.ttml.im1t');
|
|
2446
2485
|
});
|
|
2447
|
-
manifest.sequenceMode =
|
|
2486
|
+
manifest.sequenceMode = sequenceMode;
|
|
2487
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2448
2488
|
});
|
|
2449
2489
|
|
|
2450
2490
|
fakeNetEngine
|
|
@@ -2488,7 +2528,8 @@ describe('HlsParser', () => {
|
|
|
2488
2528
|
stream.language = 'en';
|
|
2489
2529
|
stream.mime('application/mp4', 'wvtt');
|
|
2490
2530
|
});
|
|
2491
|
-
manifest.sequenceMode =
|
|
2531
|
+
manifest.sequenceMode = sequenceMode;
|
|
2532
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2492
2533
|
});
|
|
2493
2534
|
|
|
2494
2535
|
fakeNetEngine
|
|
@@ -2539,7 +2580,8 @@ describe('HlsParser', () => {
|
|
|
2539
2580
|
manifest.addPartialTextStream((stream) => {
|
|
2540
2581
|
stream.mime('text/vtt', 'vtt');
|
|
2541
2582
|
});
|
|
2542
|
-
manifest.sequenceMode =
|
|
2583
|
+
manifest.sequenceMode = sequenceMode;
|
|
2584
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2543
2585
|
});
|
|
2544
2586
|
|
|
2545
2587
|
fakeNetEngine
|
|
@@ -2583,7 +2625,8 @@ describe('HlsParser', () => {
|
|
|
2583
2625
|
manifest.addPartialTextStream((stream) => {
|
|
2584
2626
|
stream.kind = TextStreamKind.SUBTITLE;
|
|
2585
2627
|
});
|
|
2586
|
-
manifest.sequenceMode =
|
|
2628
|
+
manifest.sequenceMode = sequenceMode;
|
|
2629
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2587
2630
|
});
|
|
2588
2631
|
|
|
2589
2632
|
fakeNetEngine
|
|
@@ -2652,7 +2695,8 @@ describe('HlsParser', () => {
|
|
|
2652
2695
|
stream.segmentIndex = new shaka.media.SegmentIndex(segments);
|
|
2653
2696
|
});
|
|
2654
2697
|
});
|
|
2655
|
-
manifest.sequenceMode =
|
|
2698
|
+
manifest.sequenceMode = sequenceMode;
|
|
2699
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2656
2700
|
});
|
|
2657
2701
|
|
|
2658
2702
|
fakeNetEngine
|
|
@@ -2752,8 +2796,8 @@ describe('HlsParser', () => {
|
|
|
2752
2796
|
'#EXTINF:5,\n',
|
|
2753
2797
|
'main.mp4\n',
|
|
2754
2798
|
'#EXT-X-PROGRAM-DATE-TIME:2000-01-01T00:00:15.00Z\n',
|
|
2755
|
-
'#EXT-X-PART:DURATION=2.5,URI="main.mp4"\n',
|
|
2756
|
-
'#EXT-X-PART:DURATION=2.5,URI="main.mp4"\n',
|
|
2799
|
+
'#EXT-X-PART:DURATION=2.5,URI="main.mp4",INDEPENDENT=YES\n',
|
|
2800
|
+
'#EXT-X-PART:DURATION=2.5,URI="main.mp4",INDEPENDENT=YES\n',
|
|
2757
2801
|
'#EXTINF:5,\n',
|
|
2758
2802
|
'main.mp4\n',
|
|
2759
2803
|
'#EXT-X-PROGRAM-DATE-TIME:2000-01-01T00:00:20.00Z\n',
|
|
@@ -2796,7 +2840,8 @@ describe('HlsParser', () => {
|
|
|
2796
2840
|
manifest.addPartialVariant((variant) => {
|
|
2797
2841
|
variant.addPartialStream(ContentType.VIDEO);
|
|
2798
2842
|
});
|
|
2799
|
-
manifest.sequenceMode =
|
|
2843
|
+
manifest.sequenceMode = sequenceMode;
|
|
2844
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2800
2845
|
});
|
|
2801
2846
|
|
|
2802
2847
|
fakeNetEngine
|
|
@@ -2835,7 +2880,8 @@ describe('HlsParser', () => {
|
|
|
2835
2880
|
manifest.addPartialVariant((variant) => {
|
|
2836
2881
|
variant.addPartialStream(ContentType.VIDEO);
|
|
2837
2882
|
});
|
|
2838
|
-
manifest.sequenceMode =
|
|
2883
|
+
manifest.sequenceMode = sequenceMode;
|
|
2884
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2839
2885
|
});
|
|
2840
2886
|
|
|
2841
2887
|
fakeNetEngine
|
|
@@ -2879,7 +2925,8 @@ describe('HlsParser', () => {
|
|
|
2879
2925
|
});
|
|
2880
2926
|
variant.addPartialStream(ContentType.AUDIO);
|
|
2881
2927
|
});
|
|
2882
|
-
manifest.sequenceMode =
|
|
2928
|
+
manifest.sequenceMode = sequenceMode;
|
|
2929
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2883
2930
|
});
|
|
2884
2931
|
|
|
2885
2932
|
await testHlsParser(master, media, manifest);
|
|
@@ -2965,7 +3012,8 @@ describe('HlsParser', () => {
|
|
|
2965
3012
|
stream.mime('audio/mp4', 'mp4a');
|
|
2966
3013
|
});
|
|
2967
3014
|
});
|
|
2968
|
-
manifest.sequenceMode =
|
|
3015
|
+
manifest.sequenceMode = sequenceMode;
|
|
3016
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
2969
3017
|
});
|
|
2970
3018
|
|
|
2971
3019
|
await testHlsParser(master, media, manifest);
|
|
@@ -3083,6 +3131,7 @@ describe('HlsParser', () => {
|
|
|
3083
3131
|
});
|
|
3084
3132
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
3085
3133
|
stream.language = 'en';
|
|
3134
|
+
stream.originalLanguage = 'eng';
|
|
3086
3135
|
});
|
|
3087
3136
|
});
|
|
3088
3137
|
manifest.addPartialVariant((variant) => {
|
|
@@ -3103,7 +3152,8 @@ describe('HlsParser', () => {
|
|
|
3103
3152
|
stream.language = 'de';
|
|
3104
3153
|
});
|
|
3105
3154
|
});
|
|
3106
|
-
manifest.sequenceMode =
|
|
3155
|
+
manifest.sequenceMode = sequenceMode;
|
|
3156
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3107
3157
|
});
|
|
3108
3158
|
|
|
3109
3159
|
fakeNetEngine
|
|
@@ -3237,7 +3287,8 @@ describe('HlsParser', () => {
|
|
|
3237
3287
|
});
|
|
3238
3288
|
});
|
|
3239
3289
|
});
|
|
3240
|
-
manifest.sequenceMode =
|
|
3290
|
+
manifest.sequenceMode = sequenceMode;
|
|
3291
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3241
3292
|
});
|
|
3242
3293
|
|
|
3243
3294
|
await testHlsParser(master, media, manifest);
|
|
@@ -3278,7 +3329,8 @@ describe('HlsParser', () => {
|
|
|
3278
3329
|
});
|
|
3279
3330
|
});
|
|
3280
3331
|
});
|
|
3281
|
-
manifest.sequenceMode =
|
|
3332
|
+
manifest.sequenceMode = sequenceMode;
|
|
3333
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3282
3334
|
});
|
|
3283
3335
|
|
|
3284
3336
|
await testHlsParser(master, media, manifest);
|
|
@@ -3316,7 +3368,8 @@ describe('HlsParser', () => {
|
|
|
3316
3368
|
});
|
|
3317
3369
|
});
|
|
3318
3370
|
});
|
|
3319
|
-
manifest.sequenceMode =
|
|
3371
|
+
manifest.sequenceMode = sequenceMode;
|
|
3372
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3320
3373
|
});
|
|
3321
3374
|
|
|
3322
3375
|
await testHlsParser(master, media, manifest);
|
|
@@ -3351,7 +3404,8 @@ describe('HlsParser', () => {
|
|
|
3351
3404
|
stream.addDrmInfo('org.w3.clearkey');
|
|
3352
3405
|
});
|
|
3353
3406
|
});
|
|
3354
|
-
manifest.sequenceMode =
|
|
3407
|
+
manifest.sequenceMode = sequenceMode;
|
|
3408
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3355
3409
|
});
|
|
3356
3410
|
|
|
3357
3411
|
await testHlsParser(master, media, manifest);
|
|
@@ -3385,7 +3439,8 @@ describe('HlsParser', () => {
|
|
|
3385
3439
|
stream.addDrmInfo('org.w3.clearkey');
|
|
3386
3440
|
});
|
|
3387
3441
|
});
|
|
3388
|
-
manifest.sequenceMode =
|
|
3442
|
+
manifest.sequenceMode = sequenceMode;
|
|
3443
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3389
3444
|
});
|
|
3390
3445
|
|
|
3391
3446
|
await testHlsParser(master, media, manifest);
|
|
@@ -3421,7 +3476,8 @@ describe('HlsParser', () => {
|
|
|
3421
3476
|
});
|
|
3422
3477
|
});
|
|
3423
3478
|
});
|
|
3424
|
-
manifest.sequenceMode =
|
|
3479
|
+
manifest.sequenceMode = sequenceMode;
|
|
3480
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3425
3481
|
});
|
|
3426
3482
|
|
|
3427
3483
|
fakeNetEngine.setResponseText('test:/master', master);
|
|
@@ -3453,7 +3509,8 @@ describe('HlsParser', () => {
|
|
|
3453
3509
|
});
|
|
3454
3510
|
});
|
|
3455
3511
|
});
|
|
3456
|
-
manifest.sequenceMode =
|
|
3512
|
+
manifest.sequenceMode = sequenceMode;
|
|
3513
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3457
3514
|
});
|
|
3458
3515
|
|
|
3459
3516
|
fakeNetEngine.setResponseText('test:/master', master);
|
|
@@ -3482,7 +3539,8 @@ describe('HlsParser', () => {
|
|
|
3482
3539
|
});
|
|
3483
3540
|
});
|
|
3484
3541
|
});
|
|
3485
|
-
manifest.sequenceMode =
|
|
3542
|
+
manifest.sequenceMode = sequenceMode;
|
|
3543
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3486
3544
|
});
|
|
3487
3545
|
|
|
3488
3546
|
fakeNetEngine.setResponseText('test:/master', master);
|
|
@@ -3509,7 +3567,8 @@ describe('HlsParser', () => {
|
|
|
3509
3567
|
stream.addDrmInfo('org.w3.clearkey');
|
|
3510
3568
|
});
|
|
3511
3569
|
});
|
|
3512
|
-
manifest.sequenceMode =
|
|
3570
|
+
manifest.sequenceMode = sequenceMode;
|
|
3571
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3513
3572
|
});
|
|
3514
3573
|
|
|
3515
3574
|
fakeNetEngine.setResponseText('test:/master', master);
|
|
@@ -3535,7 +3594,8 @@ describe('HlsParser', () => {
|
|
|
3535
3594
|
stream.addDrmInfo('org.w3.clearkey');
|
|
3536
3595
|
});
|
|
3537
3596
|
});
|
|
3538
|
-
manifest.sequenceMode =
|
|
3597
|
+
manifest.sequenceMode = sequenceMode;
|
|
3598
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3539
3599
|
});
|
|
3540
3600
|
|
|
3541
3601
|
fakeNetEngine.setResponseText('test:/master', master);
|
|
@@ -3573,7 +3633,8 @@ describe('HlsParser', () => {
|
|
|
3573
3633
|
stream.mime('audio/mp4', 'mp4a');
|
|
3574
3634
|
});
|
|
3575
3635
|
});
|
|
3576
|
-
manifest.sequenceMode =
|
|
3636
|
+
manifest.sequenceMode = sequenceMode;
|
|
3637
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
3577
3638
|
});
|
|
3578
3639
|
|
|
3579
3640
|
fakeNetEngine.setHeaders(
|
|
@@ -4017,6 +4078,7 @@ describe('HlsParser', () => {
|
|
|
4017
4078
|
});
|
|
4018
4079
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
4019
4080
|
stream.language = 'en';
|
|
4081
|
+
stream.originalLanguage = 'en';
|
|
4020
4082
|
});
|
|
4021
4083
|
});
|
|
4022
4084
|
manifest.addPartialVariant((variant) => {
|
|
@@ -4026,6 +4088,7 @@ describe('HlsParser', () => {
|
|
|
4026
4088
|
});
|
|
4027
4089
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
4028
4090
|
stream.language = 'fr';
|
|
4091
|
+
stream.originalLanguage = 'fr';
|
|
4029
4092
|
});
|
|
4030
4093
|
});
|
|
4031
4094
|
manifest.addPartialVariant((variant) => {
|
|
@@ -4035,6 +4098,7 @@ describe('HlsParser', () => {
|
|
|
4035
4098
|
});
|
|
4036
4099
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
4037
4100
|
stream.language = 'en';
|
|
4101
|
+
stream.originalLanguage = 'en';
|
|
4038
4102
|
});
|
|
4039
4103
|
});
|
|
4040
4104
|
manifest.addPartialVariant((variant) => {
|
|
@@ -4044,9 +4108,11 @@ describe('HlsParser', () => {
|
|
|
4044
4108
|
});
|
|
4045
4109
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
4046
4110
|
stream.language = 'fr';
|
|
4111
|
+
stream.originalLanguage = 'fr';
|
|
4047
4112
|
});
|
|
4048
4113
|
});
|
|
4049
|
-
manifest.sequenceMode =
|
|
4114
|
+
manifest.sequenceMode = sequenceMode;
|
|
4115
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4050
4116
|
});
|
|
4051
4117
|
|
|
4052
4118
|
await testHlsParser(master, media, manifest);
|
|
@@ -4096,7 +4162,8 @@ describe('HlsParser', () => {
|
|
|
4096
4162
|
stream.size(1920, 1080);
|
|
4097
4163
|
});
|
|
4098
4164
|
});
|
|
4099
|
-
manifest.sequenceMode =
|
|
4165
|
+
manifest.sequenceMode = sequenceMode;
|
|
4166
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4100
4167
|
});
|
|
4101
4168
|
|
|
4102
4169
|
const actual = await testHlsParser(master, media, manifest, media2);
|
|
@@ -4148,7 +4215,8 @@ describe('HlsParser', () => {
|
|
|
4148
4215
|
stream.mime('audio/mp4', 'mp4a');
|
|
4149
4216
|
});
|
|
4150
4217
|
});
|
|
4151
|
-
manifest.sequenceMode =
|
|
4218
|
+
manifest.sequenceMode = sequenceMode;
|
|
4219
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4152
4220
|
});
|
|
4153
4221
|
|
|
4154
4222
|
fakeNetEngine
|
|
@@ -4335,7 +4403,8 @@ describe('HlsParser', () => {
|
|
|
4335
4403
|
stream.mime('audio/mp4', 'mp4a');
|
|
4336
4404
|
});
|
|
4337
4405
|
});
|
|
4338
|
-
manifest.sequenceMode =
|
|
4406
|
+
manifest.sequenceMode = sequenceMode;
|
|
4407
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4339
4408
|
});
|
|
4340
4409
|
|
|
4341
4410
|
await testHlsParser(master, media, manifest);
|
|
@@ -4373,7 +4442,8 @@ describe('HlsParser', () => {
|
|
|
4373
4442
|
stream.mime('audio/mp4', 'mp4a');
|
|
4374
4443
|
});
|
|
4375
4444
|
});
|
|
4376
|
-
manifest.sequenceMode =
|
|
4445
|
+
manifest.sequenceMode = sequenceMode;
|
|
4446
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4377
4447
|
});
|
|
4378
4448
|
|
|
4379
4449
|
await testHlsParser(master, media, manifest);
|
|
@@ -4412,7 +4482,8 @@ describe('HlsParser', () => {
|
|
|
4412
4482
|
stream.mime('audio/mp4', 'mp4a');
|
|
4413
4483
|
});
|
|
4414
4484
|
});
|
|
4415
|
-
manifest.sequenceMode =
|
|
4485
|
+
manifest.sequenceMode = sequenceMode;
|
|
4486
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4416
4487
|
});
|
|
4417
4488
|
|
|
4418
4489
|
await testHlsParser(master, media, manifest);
|
|
@@ -4452,7 +4523,8 @@ describe('HlsParser', () => {
|
|
|
4452
4523
|
stream.mime('audio/mp4', 'mp4a');
|
|
4453
4524
|
});
|
|
4454
4525
|
});
|
|
4455
|
-
manifest.sequenceMode =
|
|
4526
|
+
manifest.sequenceMode = sequenceMode;
|
|
4527
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4456
4528
|
});
|
|
4457
4529
|
|
|
4458
4530
|
await testHlsParser(master, media, manifest);
|
|
@@ -4495,11 +4567,12 @@ describe('HlsParser', () => {
|
|
|
4495
4567
|
].join('');
|
|
4496
4568
|
|
|
4497
4569
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
4498
|
-
manifest.sequenceMode =
|
|
4570
|
+
manifest.sequenceMode = sequenceMode;
|
|
4571
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4499
4572
|
manifest.anyTimeline();
|
|
4500
4573
|
manifest.addPartialVariant((variant) => {
|
|
4501
4574
|
variant.addPartialStream(ContentType.VIDEO, (stream) => {
|
|
4502
|
-
stream.mime('video/
|
|
4575
|
+
stream.mime('video/mp4', 'avc1.42C01E');
|
|
4503
4576
|
});
|
|
4504
4577
|
});
|
|
4505
4578
|
});
|
|
@@ -4509,22 +4582,64 @@ describe('HlsParser', () => {
|
|
|
4509
4582
|
expect(actualManifest.presentationTimeline.getDuration()).toBe(5);
|
|
4510
4583
|
});
|
|
4511
4584
|
|
|
4512
|
-
it('
|
|
4585
|
+
it('parses #EXT-X-BITRATE', async () => {
|
|
4513
4586
|
const media = [
|
|
4514
4587
|
'#EXTM3U\n',
|
|
4515
4588
|
'#EXT-X-PLAYLIST-TYPE:VOD\n',
|
|
4516
4589
|
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
|
|
4517
4590
|
'#EXTINF:5,\n',
|
|
4518
4591
|
'#EXT-X-BYTERANGE:121090@616\n',
|
|
4592
|
+
'#EXT-X-BITRATE:385\n',
|
|
4593
|
+
'main.mp4\n',
|
|
4594
|
+
'#EXTINF:5,\n',
|
|
4595
|
+
'#EXT-X-BYTERANGE:121090@616\n',
|
|
4596
|
+
'main.mp4\n',
|
|
4597
|
+
'#EXTINF:5,\n',
|
|
4598
|
+
'#EXT-X-BYTERANGE:121090@616\n',
|
|
4599
|
+
'main.mp4\n',
|
|
4600
|
+
'#EXTINF:5,\n',
|
|
4601
|
+
'#EXT-X-BYTERANGE:121090@616\n',
|
|
4602
|
+
'#EXT-X-BITRATE:340\n',
|
|
4603
|
+
'main.mp4\n',
|
|
4604
|
+
'#EXT-X-BYTERANGE:121090@616\n',
|
|
4605
|
+
'#EXTINF:5,\n',
|
|
4606
|
+
'#EXT-X-BITRATE:300\n',
|
|
4519
4607
|
'main.mp4',
|
|
4520
4608
|
].join('');
|
|
4521
4609
|
|
|
4610
|
+
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
4611
|
+
manifest.sequenceMode = sequenceMode;
|
|
4612
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4613
|
+
manifest.anyTimeline();
|
|
4614
|
+
manifest.addPartialVariant((variant) => {
|
|
4615
|
+
variant.bandwidth = 359000;
|
|
4616
|
+
variant.addPartialStream(ContentType.VIDEO, (stream) => {
|
|
4617
|
+
stream.mime('video/mp4', 'avc1.42C01E');
|
|
4618
|
+
stream.bandwidth = 359000;
|
|
4619
|
+
});
|
|
4620
|
+
});
|
|
4621
|
+
});
|
|
4622
|
+
|
|
4623
|
+
await testHlsParser(media, '', manifest);
|
|
4624
|
+
});
|
|
4625
|
+
|
|
4626
|
+
it('honors hls.mediaPlaylistFullMimeType', async () => {
|
|
4627
|
+
const media = [
|
|
4628
|
+
'#EXTM3U\n',
|
|
4629
|
+
'#EXT-X-PLAYLIST-TYPE:VOD\n',
|
|
4630
|
+
'#EXT-X-MAP:URI="init.test",BYTERANGE="616@0"\n',
|
|
4631
|
+
'#EXTINF:5,\n',
|
|
4632
|
+
'#EXT-X-BYTERANGE:121090@616\n',
|
|
4633
|
+
'main.test',
|
|
4634
|
+
].join('');
|
|
4635
|
+
|
|
4522
4636
|
const config = shaka.util.PlayerConfiguration.createDefault().manifest;
|
|
4523
4637
|
config.hls.mediaPlaylistFullMimeType = 'audio/webm; codecs="vorbis"';
|
|
4524
4638
|
parser.configure(config);
|
|
4525
4639
|
|
|
4526
4640
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
4527
|
-
manifest.sequenceMode =
|
|
4641
|
+
manifest.sequenceMode = sequenceMode;
|
|
4642
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4528
4643
|
manifest.anyTimeline();
|
|
4529
4644
|
manifest.addPartialVariant((variant) => {
|
|
4530
4645
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
@@ -4550,7 +4665,8 @@ describe('HlsParser', () => {
|
|
|
4550
4665
|
parser.configure(config);
|
|
4551
4666
|
|
|
4552
4667
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
4553
|
-
manifest.sequenceMode =
|
|
4668
|
+
manifest.sequenceMode = sequenceMode;
|
|
4669
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4554
4670
|
manifest.anyTimeline();
|
|
4555
4671
|
manifest.addPartialVariant((variant) => {
|
|
4556
4672
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
@@ -4576,7 +4692,8 @@ describe('HlsParser', () => {
|
|
|
4576
4692
|
parser.configure(config);
|
|
4577
4693
|
|
|
4578
4694
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
4579
|
-
manifest.sequenceMode =
|
|
4695
|
+
manifest.sequenceMode = sequenceMode;
|
|
4696
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4580
4697
|
manifest.anyTimeline();
|
|
4581
4698
|
manifest.addPartialVariant((variant) => {
|
|
4582
4699
|
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
@@ -4626,7 +4743,8 @@ describe('HlsParser', () => {
|
|
|
4626
4743
|
].join('');
|
|
4627
4744
|
|
|
4628
4745
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
4629
|
-
manifest.sequenceMode =
|
|
4746
|
+
manifest.sequenceMode = sequenceMode;
|
|
4747
|
+
manifest.type = shaka.media.ManifestParser.HLS;
|
|
4630
4748
|
manifest.anyTimeline();
|
|
4631
4749
|
manifest.addPartialVariant((variant) => {
|
|
4632
4750
|
variant.language = 'en';
|
|
@@ -4783,7 +4901,9 @@ describe('HlsParser', () => {
|
|
|
4783
4901
|
|
|
4784
4902
|
// Before loading, all MIME types agree, and are defaulted to audio/mp4.
|
|
4785
4903
|
expect(actualAudio0.mimeType).toBe('audio/mp4');
|
|
4904
|
+
expect(actualAudio0.codecs).toBe('mp4a');
|
|
4786
4905
|
expect(actualAudio1.mimeType).toBe('audio/mp4');
|
|
4906
|
+
expect(actualAudio1.codecs).toBe('mp4a');
|
|
4787
4907
|
|
|
4788
4908
|
await actualAudio0.createSegmentIndex();
|
|
4789
4909
|
|
|
@@ -4792,8 +4912,29 @@ describe('HlsParser', () => {
|
|
|
4792
4912
|
// This is how we avoid having the unloaded tracks filtered out during
|
|
4793
4913
|
// startup.
|
|
4794
4914
|
expect(actualAudio0.mimeType).toBe('audio/aac');
|
|
4795
|
-
expect(actualAudio0.codecs).toBe('');
|
|
4915
|
+
expect(actualAudio0.codecs).toBe('mp4a');
|
|
4796
4916
|
expect(actualAudio1.mimeType).toBe('audio/aac');
|
|
4797
|
-
expect(actualAudio1.codecs).toBe('');
|
|
4917
|
+
expect(actualAudio1.codecs).toBe('mp4a');
|
|
4918
|
+
});
|
|
4919
|
+
|
|
4920
|
+
it('parses media playlists directly', async () => {
|
|
4921
|
+
const mediaPlaylist = [
|
|
4922
|
+
'#EXTM3U\n',
|
|
4923
|
+
'#EXT-X-TARGETDURATION:5\n',
|
|
4924
|
+
'#EXTINF:5,\n',
|
|
4925
|
+
'video1.ts\n',
|
|
4926
|
+
].join('');
|
|
4927
|
+
|
|
4928
|
+
fakeNetEngine
|
|
4929
|
+
.setResponseText('test:/master', mediaPlaylist)
|
|
4930
|
+
.setResponseValue('test:/video1.ts', tsSegmentData);
|
|
4931
|
+
|
|
4932
|
+
const actualManifest = await parser.start('test:/master', playerInterface);
|
|
4933
|
+
expect(actualManifest.variants.length).toBe(1);
|
|
4934
|
+
|
|
4935
|
+
const video = actualManifest.variants[0].video;
|
|
4936
|
+
|
|
4937
|
+
expect(video.width).toBe(256);
|
|
4938
|
+
expect(video.height).toBe(110);
|
|
4798
4939
|
});
|
|
4799
4940
|
});
|