shaka-player 4.4.3 → 4.6.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/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/workflows/release-please.yaml +2 -27
- package/AUTHORS +2 -0
- package/CHANGELOG.md +156 -39
- package/CODE_OF_CONDUCT.md +1 -1
- package/CONTRIBUTORS +2 -0
- package/README.md +54 -42
- package/demo/asset_card.js +18 -21
- package/demo/cast_receiver/index.html +0 -1
- package/demo/close_button.js +0 -3
- package/demo/common/asset.js +33 -22
- package/demo/common/assets.js +249 -60
- package/demo/config.js +219 -253
- package/demo/custom.js +88 -133
- package/demo/front.js +7 -10
- package/demo/index.html +19 -22
- package/demo/input.js +6 -11
- package/demo/input_container.js +8 -9
- package/demo/main.js +62 -126
- package/demo/search.js +29 -34
- package/demo/service_worker.js +0 -3
- package/demo/tooltip.js +3 -5
- package/demo/visualizer.js +3 -5
- package/demo/visualizer_button.js +1 -20
- package/dist/controls.css +1 -1
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +211 -228
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +211 -228
- package/dist/demo.compiled.map +4 -4
- package/dist/deps.js +42 -37
- package/dist/locales.js +34 -30
- package/dist/receiver.compiled.debug.js +64 -77
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +64 -77
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +343 -151
- package/dist/shaka-player.compiled.debug.d.ts +343 -151
- package/dist/shaka-player.compiled.debug.externs.js +356 -117
- package/dist/shaka-player.compiled.debug.js +952 -811
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +356 -117
- package/dist/shaka-player.compiled.js +1165 -1078
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +359 -153
- package/dist/shaka-player.ui.debug.d.ts +359 -153
- package/dist/shaka-player.ui.debug.externs.js +382 -117
- package/dist/shaka-player.ui.debug.js +1084 -918
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +382 -117
- package/dist/shaka-player.ui.js +1377 -1274
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/lcevc-integration.md +14 -14
- package/docs/tutorials/ad_monetization.md +54 -0
- package/docs/tutorials/basic-usage.md +2 -1
- package/docs/tutorials/errors.md +2 -1
- package/docs/tutorials/faq.md +27 -55
- package/docs/tutorials/index.json +2 -1
- package/docs/tutorials/lcevc.md +118 -0
- package/docs/tutorials/offline.md +10 -8
- package/docs/tutorials/plugins.md +5 -0
- package/docs/tutorials/ui-customization.md +17 -0
- package/docs/tutorials/ui.md +2 -1
- package/docs/tutorials/upgrade.md +3 -0
- package/externs/css_style_declaration.js +19 -0
- package/externs/lcevc.js +37 -13
- package/externs/managedmediasource.js +24 -0
- package/externs/media_remote.js +68 -0
- package/externs/mediatailor.js +193 -0
- package/externs/pictureinpicture.js +11 -0
- package/externs/shaka/abr_manager.js +6 -2
- package/externs/shaka/ads.js +27 -0
- package/externs/shaka/cea.js +7 -0
- package/externs/shaka/codecs.js +5 -3
- package/externs/shaka/manifest.js +31 -10
- package/externs/shaka/manifest_parser.js +24 -1
- package/externs/shaka/net.js +2 -2
- package/externs/shaka/offline.js +13 -2
- package/externs/shaka/player.js +65 -8
- package/externs/shaka/text.js +3 -1
- package/externs/shaka/transmuxer.js +1 -1
- package/karma.conf.js +7 -3
- package/lib/abr/simple_abr_manager.js +66 -9
- package/lib/ads/ad_manager.js +104 -50
- package/lib/ads/media_tailor_ad.js +297 -0
- package/lib/ads/media_tailor_ad_manager.js +839 -0
- package/lib/cast/cast_receiver.js +1 -1
- package/lib/cea/cea_decoder.js +28 -0
- package/lib/cea/dummy_caption_decoder.js +5 -0
- package/lib/cea/ts_cea_parser.js +15 -2
- package/lib/config/codec_switching_strategy.js +24 -0
- package/lib/dash/content_protection.js +120 -2
- package/lib/dash/dash_parser.js +322 -93
- package/lib/dash/mpd_utils.js +62 -37
- package/lib/dash/segment_base.js +17 -10
- package/lib/dash/segment_list.js +18 -9
- package/lib/dash/segment_template.js +122 -107
- package/lib/dependencies/all.js +8 -7
- package/lib/hls/hls_classes.js +28 -43
- package/lib/hls/hls_parser.js +798 -658
- package/lib/hls/hls_utils.js +64 -5
- package/lib/hls/manifest_text_parser.js +7 -11
- package/lib/lcevc/lcevc_dec.js +220 -0
- package/lib/media/adaptation_set.js +32 -14
- package/lib/media/adaptation_set_criteria.js +86 -16
- package/lib/media/closed_caption_parser.js +13 -0
- package/lib/media/content_workarounds.js +6 -0
- package/lib/media/drm_engine.js +8 -13
- package/lib/media/manifest_parser.js +8 -113
- package/lib/media/media_source_capabilities.js +10 -3
- package/lib/media/media_source_engine.js +286 -44
- package/lib/media/play_rate_controller.js +8 -38
- package/lib/media/presentation_timeline.js +7 -1
- package/lib/media/quality_observer.js +1 -1
- package/lib/media/segment_index.js +6 -6
- package/lib/media/segment_prefetch.js +92 -24
- package/lib/media/segment_reference.js +73 -7
- package/lib/media/segment_utils.js +343 -0
- package/lib/media/stall_detector.js +0 -3
- package/lib/media/streaming_engine.js +73 -38
- package/lib/mss/mss_parser.js +19 -2
- package/lib/net/networking_engine.js +67 -12
- package/lib/net/networking_utils.js +95 -0
- package/lib/offline/indexeddb/v1_storage_cell.js +3 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +3 -0
- package/lib/offline/manifest_converter.js +3 -0
- package/lib/offline/offline_manifest_parser.js +10 -0
- package/lib/offline/storage.js +14 -7
- package/lib/player.js +1098 -1537
- package/lib/polyfill/mediasource.js +22 -1
- package/lib/text/cue.js +15 -0
- package/lib/text/mp4_ttml_parser.js +2 -2
- package/lib/text/srt_text_parser.js +2 -2
- package/lib/text/stub_text_displayer.js +51 -0
- package/lib/text/text_engine.js +3 -2
- package/lib/text/ttml_text_parser.js +45 -5
- package/lib/text/ui_text_displayer.js +8 -0
- package/lib/text/vtt_text_parser.js +40 -22
- package/lib/transmuxer/aac_transmuxer.js +1 -1
- package/lib/transmuxer/ac3_transmuxer.js +1 -1
- package/lib/transmuxer/ec3_transmuxer.js +1 -1
- package/lib/transmuxer/h264.js +5 -4
- package/lib/transmuxer/h265.js +863 -0
- package/lib/transmuxer/mp3_transmuxer.js +1 -1
- package/lib/transmuxer/mpeg_ts_transmuxer.js +4 -3
- package/lib/transmuxer/mss_transmuxer.js +1 -1
- package/lib/transmuxer/ts_transmuxer.js +187 -22
- package/lib/util/buffer_utils.js +26 -4
- package/lib/util/content_steering_manager.js +358 -0
- package/lib/util/error.js +30 -15
- package/lib/util/exp_golomb.js +30 -2
- package/lib/util/fairplay_utils.js +1 -1
- package/lib/util/fake_event.js +8 -1
- package/lib/util/id3_utils.js +50 -1
- package/lib/util/manifest_parser_utils.js +12 -8
- package/lib/util/mp4_generator.js +6 -8
- package/lib/util/mutex.js +59 -0
- package/lib/util/object_utils.js +1 -1
- package/lib/util/periods.js +156 -179
- package/lib/util/platform.js +44 -3
- package/lib/util/player_configuration.js +43 -6
- package/lib/util/state_history.js +6 -2
- package/lib/util/stream_utils.js +206 -283
- package/lib/util/ts_parser.js +335 -98
- package/lib/util/uint8array_utils.js +5 -1
- package/lib/util/xml_utils.js +5 -0
- package/maintained-branches.md +3 -2
- package/package.json +4 -6
- package/roadmap.md +25 -5
- package/shaka-player.uncompiled.js +2 -2
- package/support.html +0 -1
- package/test/abr/simple_abr_manager_unit.js +33 -33
- package/test/ads/ad_manager_unit.js +3 -2
- package/test/cast/cast_receiver_integration.js +50 -4
- package/test/cast/cast_utils_unit.js +2 -0
- package/test/cea/cea_decoder_unit.js +7 -0
- package/test/codec_switching/codec_switching_integration.js +182 -0
- package/test/dash/dash_parser_content_protection_unit.js +2 -0
- package/test/dash/dash_parser_integration.js +74 -0
- package/test/dash/dash_parser_live_unit.js +2 -19
- package/test/dash/dash_parser_manifest_unit.js +536 -2
- package/test/dash/dash_parser_segment_base_unit.js +2 -0
- package/test/dash/dash_parser_segment_list_unit.js +2 -0
- package/test/dash/dash_parser_segment_template_unit.js +2 -0
- package/test/dash/mpd_utils_unit.js +61 -30
- package/test/demo/demo_unit.js +0 -16
- package/test/hls/hls_live_unit.js +14 -3
- package/test/hls/hls_parser_unit.js +385 -33
- package/test/hls/manifest_text_parser_unit.js +32 -99
- package/test/media/adaptation_set_criteria_unit.js +284 -15
- package/test/media/adaptation_set_unit.js +2 -0
- package/test/media/content_workarounds_unit.js +1 -1
- package/test/media/drm_engine_unit.js +3 -3
- package/test/media/media_source_engine_unit.js +166 -2
- package/test/media/play_rate_controller_unit.js +0 -48
- package/test/media/segment_index_unit.js +5 -4
- package/test/media/segment_prefetch_unit.js +1 -1
- package/test/media/streaming_engine_unit.js +17 -17
- package/test/mss/mss_parser_unit.js +2 -0
- package/test/mss/mss_player_integration.js +3 -2
- package/test/net/networking_engine_unit.js +3 -3
- package/test/{media/manifest_parser_unit.js → net/networking_utils_unit.js} +2 -2
- package/test/offline/manifest_convert_unit.js +14 -0
- package/test/offline/offline_integration.js +2 -1
- package/test/offline/storage_integration.js +22 -13
- package/test/player_external.js +4 -2
- package/test/player_integration.js +15 -4
- package/test/player_load_graph_integration.js +47 -151
- package/test/player_src_equals_external.js +1 -0
- package/test/player_src_equals_integration.js +71 -4
- package/test/player_unit.js +182 -158
- package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/dash.mpd +18 -0
- package/test/test/assets/dash-aes-128/license +1 -0
- package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
- package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
- package/test/test/assets/dash-multi-codec/dash.mpd +32 -0
- package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
- package/test/test/assets/hls-ts-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-h265/hevc.m3u8 +6 -0
- package/test/test/assets/hls-ts-h265/index.m3u8 +7 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +9 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +24 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +14 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +23 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
- package/test/test/util/dash_parser_util.js +4 -0
- package/test/test/util/fake_ad_manager.js +20 -0
- package/test/test/util/fake_media_source_engine.js +13 -2
- package/test/test/util/fake_networking_engine.js +9 -1
- package/test/test/util/fake_segment_prefetch.js +3 -0
- package/test/test/util/manifest_generator.js +11 -3
- package/test/test/util/manifest_parser_util.js +14 -2
- package/test/test/util/mss_parser_util.js +4 -0
- package/test/test/util/offline_utils.js +2 -0
- package/test/test/util/simple_fakes.js +2 -2
- package/test/test/util/streaming_engine_util.js +10 -4
- package/test/test/util/test_scheme.js +6 -0
- package/test/test/util/ui_utils.js +4 -3
- package/test/text/mp4_ttml_parser_unit.js +4 -4
- package/test/text/srt_text_parser_unit.js +1 -1
- package/test/text/text_displayer_layout_unit.js +1 -1
- package/test/text/text_engine_unit.js +6 -0
- package/test/text/ttml_text_parser_unit.js +85 -2
- package/test/text/vtt_text_parser_unit.js +103 -31
- package/test/transmuxer/transmuxer_engine_integration.js +9 -0
- package/test/transmuxer/transmuxer_integration.js +150 -3
- package/test/ui/ad_ui_unit.js +2 -2
- package/test/ui/ui_customization_unit.js +17 -16
- package/test/ui/ui_integration.js +30 -20
- package/test/ui/ui_unit.js +28 -29
- package/test/util/buffer_utils_unit.js +1 -1
- package/test/util/content_steering_manager_unit.js +427 -0
- package/test/util/id3_utils_unit.js +52 -0
- package/test/util/stream_utils_unit.js +207 -169
- package/test/util/ts_parser_unit.js +3 -3
- package/third_party/closure-uri/uri.js +13 -1
- package/ui/audio_language_selection.js +9 -2
- package/ui/controls.js +125 -0
- package/ui/externs/ui.js +24 -2
- package/ui/language_utils.js +43 -8
- package/ui/less/range_elements.less +33 -0
- package/ui/locales/en.json +1 -0
- package/ui/locales/es-419.json +1 -0
- package/ui/locales/es.json +1 -0
- package/ui/locales/source.json +4 -0
- package/ui/localization.js +10 -0
- package/ui/pip_button.js +22 -120
- package/ui/remote_button.js +203 -0
- package/ui/resolution_selection.js +47 -10
- package/ui/seek_bar.js +296 -3
- package/ui/text_selection.js +2 -1
- package/ui/ui.js +11 -4
- package/demo/common/message_ids.js +0 -309
- package/demo/locales/en.json +0 -288
- package/demo/locales/source.json +0 -1146
- package/externs/mux.js +0 -69
- package/lib/lcevc/lcevc_dil.js +0 -152
- package/lib/routing/node.js +0 -23
- package/lib/routing/payload.js +0 -43
- package/lib/routing/walker.js +0 -587
- package/lib/transmuxer/muxjs_transmuxer.js +0 -242
- package/test/routing/walker_unit.js +0 -504
- package/test/transmuxer/muxjs_transmuxer_integration.js +0 -177
|
@@ -36,10 +36,7 @@ describe('ManifestTextParser', () => {
|
|
|
36
36
|
|
|
37
37
|
// playlist text:
|
|
38
38
|
'#EXTM3U\n' +
|
|
39
|
-
'#EXT-X-TARGETDURATION:6\n'
|
|
40
|
-
|
|
41
|
-
// manifest URI:
|
|
42
|
-
'https://test/manifest.m3u8');
|
|
39
|
+
'#EXT-X-TARGETDURATION:6\n');
|
|
43
40
|
});
|
|
44
41
|
|
|
45
42
|
it('parses a Master Playlist', () => {
|
|
@@ -60,10 +57,7 @@ describe('ManifestTextParser', () => {
|
|
|
60
57
|
'#EXTM3U\n' +
|
|
61
58
|
'#EXT-X-TARGETDURATION:6\n' +
|
|
62
59
|
'#EXT-X-STREAM-INF:BANDWIDTH=2165224\n' +
|
|
63
|
-
'prog_index.m3u8'
|
|
64
|
-
|
|
65
|
-
// manifest URI:
|
|
66
|
-
'https://test/manifest.m3u8');
|
|
60
|
+
'prog_index.m3u8');
|
|
67
61
|
});
|
|
68
62
|
|
|
69
63
|
it('ignores comments', () => {
|
|
@@ -78,10 +72,7 @@ describe('ManifestTextParser', () => {
|
|
|
78
72
|
// playlist text:
|
|
79
73
|
'#EXTM3U\n' +
|
|
80
74
|
'#Comment\n' +
|
|
81
|
-
'#EXT-X-TARGETDURATION:6'
|
|
82
|
-
|
|
83
|
-
// manifest URI:
|
|
84
|
-
'https://test/manifest.m3u8');
|
|
75
|
+
'#EXT-X-TARGETDURATION:6');
|
|
85
76
|
});
|
|
86
77
|
|
|
87
78
|
/**
|
|
@@ -94,7 +85,7 @@ describe('ManifestTextParser', () => {
|
|
|
94
85
|
shaka.util.Error.Severity.CRITICAL,
|
|
95
86
|
shaka.util.Error.Category.MANIFEST,
|
|
96
87
|
code));
|
|
97
|
-
expect(() => parser.parsePlaylist(data
|
|
88
|
+
expect(() => parser.parsePlaylist(data)).toThrow(error);
|
|
98
89
|
}
|
|
99
90
|
});
|
|
100
91
|
|
|
@@ -110,10 +101,7 @@ describe('ManifestTextParser', () => {
|
|
|
110
101
|
|
|
111
102
|
// playlist text:
|
|
112
103
|
'#EXTM3U\n' +
|
|
113
|
-
'#EXT-X-INDEPENDENT-SEGMENTS'
|
|
114
|
-
|
|
115
|
-
// manifest URI:
|
|
116
|
-
'https://test/manifest.m3u8');
|
|
104
|
+
'#EXT-X-INDEPENDENT-SEGMENTS');
|
|
117
105
|
|
|
118
106
|
verifyPlaylist(
|
|
119
107
|
{
|
|
@@ -125,10 +113,7 @@ describe('ManifestTextParser', () => {
|
|
|
125
113
|
|
|
126
114
|
// playlist text:
|
|
127
115
|
'#EXTM3U\n' +
|
|
128
|
-
'#EXT-X-PLAYLIST-TYPE:VOD'
|
|
129
|
-
|
|
130
|
-
// manifest URI:
|
|
131
|
-
'https://test/manifest.m3u8');
|
|
116
|
+
'#EXT-X-PLAYLIST-TYPE:VOD');
|
|
132
117
|
|
|
133
118
|
verifyPlaylist(
|
|
134
119
|
{
|
|
@@ -140,10 +125,7 @@ describe('ManifestTextParser', () => {
|
|
|
140
125
|
|
|
141
126
|
// playlist text:
|
|
142
127
|
'#EXTM3U\n' +
|
|
143
|
-
'#EXT-X-MEDIA-SEQUENCE:1'
|
|
144
|
-
|
|
145
|
-
// manifest URI:
|
|
146
|
-
'https://test/manifest.m3u8');
|
|
128
|
+
'#EXT-X-MEDIA-SEQUENCE:1');
|
|
147
129
|
});
|
|
148
130
|
|
|
149
131
|
it('parses tags with attributes', () => {
|
|
@@ -158,10 +140,7 @@ describe('ManifestTextParser', () => {
|
|
|
158
140
|
|
|
159
141
|
// playlist text:
|
|
160
142
|
'#EXTM3U\n' +
|
|
161
|
-
'#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS'
|
|
162
|
-
|
|
163
|
-
// manifest URI:
|
|
164
|
-
'https://test/manifest.m3u8');
|
|
143
|
+
'#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS');
|
|
165
144
|
|
|
166
145
|
verifyPlaylist(
|
|
167
146
|
{
|
|
@@ -177,10 +156,7 @@ describe('ManifestTextParser', () => {
|
|
|
177
156
|
|
|
178
157
|
// playlist text:
|
|
179
158
|
'#EXTM3U\n' +
|
|
180
|
-
'#EXT-X-MEDIA:URI="main.mp4",BYTERANGE="720@0"'
|
|
181
|
-
|
|
182
|
-
// manifest URI:
|
|
183
|
-
'https://test/manifest.m3u8');
|
|
159
|
+
'#EXT-X-MEDIA:URI="main.mp4",BYTERANGE="720@0"');
|
|
184
160
|
});
|
|
185
161
|
|
|
186
162
|
it('parses tags with commas in attribute values', () => {
|
|
@@ -197,10 +173,7 @@ describe('ManifestTextParser', () => {
|
|
|
197
173
|
|
|
198
174
|
// playlist text:
|
|
199
175
|
'#EXTM3U\n' +
|
|
200
|
-
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2"'
|
|
201
|
-
|
|
202
|
-
// manifest URI:
|
|
203
|
-
'https://test/manifest.m3u8');
|
|
176
|
+
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2"');
|
|
204
177
|
|
|
205
178
|
verifyPlaylist(
|
|
206
179
|
{
|
|
@@ -216,10 +189,7 @@ describe('ManifestTextParser', () => {
|
|
|
216
189
|
|
|
217
190
|
// playlist text:
|
|
218
191
|
'#EXTM3U\n' +
|
|
219
|
-
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2,avc2.64000"'
|
|
220
|
-
|
|
221
|
-
// manifest URI:
|
|
222
|
-
'https://test/manifest.m3u8');
|
|
192
|
+
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2,avc2.64000"');
|
|
223
193
|
|
|
224
194
|
verifyPlaylist(
|
|
225
195
|
{
|
|
@@ -236,10 +206,7 @@ describe('ManifestTextParser', () => {
|
|
|
236
206
|
|
|
237
207
|
// playlist text:
|
|
238
208
|
'#EXTM3U\n' +
|
|
239
|
-
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2",AUDIO="a1,a2"'
|
|
240
|
-
|
|
241
|
-
// manifest URI:
|
|
242
|
-
'https://test/manifest.m3u8');
|
|
209
|
+
'#EXT-X-MEDIA:CODECS="avc1.64002a,mp4a.40.2",AUDIO="a1,a2"');
|
|
243
210
|
|
|
244
211
|
verifyPlaylist(
|
|
245
212
|
{
|
|
@@ -255,10 +222,7 @@ describe('ManifestTextParser', () => {
|
|
|
255
222
|
|
|
256
223
|
// playlist text:
|
|
257
224
|
'#EXTM3U\n' +
|
|
258
|
-
'#EXT-X-MEDIA:CODECS="av01.0.08M.08,mp4a.40.2"'
|
|
259
|
-
|
|
260
|
-
// manifest URI:
|
|
261
|
-
'https://test/manifest.m3u8');
|
|
225
|
+
'#EXT-X-MEDIA:CODECS="av01.0.08M.08,mp4a.40.2"');
|
|
262
226
|
});
|
|
263
227
|
|
|
264
228
|
it('rejects invalid tags', () => {
|
|
@@ -268,7 +232,7 @@ describe('ManifestTextParser', () => {
|
|
|
268
232
|
shaka.util.Error.Code.INVALID_HLS_TAG,
|
|
269
233
|
'invalid tag'));
|
|
270
234
|
const text = shaka.util.StringUtils.toUTF8('#EXTM3U\ninvalid tag');
|
|
271
|
-
expect(() => parser.parsePlaylist(text
|
|
235
|
+
expect(() => parser.parsePlaylist(text)).toThrow(error);
|
|
272
236
|
});
|
|
273
237
|
});
|
|
274
238
|
|
|
@@ -307,7 +271,7 @@ describe('ManifestTextParser', () => {
|
|
|
307
271
|
new shaka.hls.Tag(/* id= */ 0, 'EXT-X-MEDIA-SEQUENCE', [], '1'),
|
|
308
272
|
],
|
|
309
273
|
segments: [
|
|
310
|
-
new shaka.hls.Segment('https://test/
|
|
274
|
+
new shaka.hls.Segment('https://test/test.mp4',
|
|
311
275
|
[
|
|
312
276
|
new shaka.hls.Tag(/* id= */ 2, 'EXTINF', [], '5.99467'),
|
|
313
277
|
]),
|
|
@@ -318,10 +282,7 @@ describe('ManifestTextParser', () => {
|
|
|
318
282
|
'#EXTM3U\n' +
|
|
319
283
|
'#EXT-X-MEDIA-SEQUENCE:1\n' +
|
|
320
284
|
'#EXTINF:5.99467\n' +
|
|
321
|
-
'https://test/test.mp4\n'
|
|
322
|
-
|
|
323
|
-
// manifest URI:
|
|
324
|
-
'https://test/manifest.m3u8');
|
|
285
|
+
'https://test/test.mp4\n');
|
|
325
286
|
});
|
|
326
287
|
|
|
327
288
|
it('handles tags with both value and attributes', () => {
|
|
@@ -332,7 +293,7 @@ describe('ManifestTextParser', () => {
|
|
|
332
293
|
new shaka.hls.Tag(/* id= */ 0, 'EXT-X-MEDIA-SEQUENCE', [], '1'),
|
|
333
294
|
],
|
|
334
295
|
segments: [
|
|
335
|
-
new shaka.hls.Segment('https://test/
|
|
296
|
+
new shaka.hls.Segment('https://test/test.mp4', [
|
|
336
297
|
new shaka.hls.Tag(
|
|
337
298
|
/* id= */ 2,
|
|
338
299
|
'EXTINF',
|
|
@@ -346,10 +307,7 @@ describe('ManifestTextParser', () => {
|
|
|
346
307
|
'#EXTM3U\n' +
|
|
347
308
|
'#EXT-X-MEDIA-SEQUENCE:1\n' +
|
|
348
309
|
'#EXTINF:5.99467,pid=180\n' +
|
|
349
|
-
'https://test/test.mp4\n'
|
|
350
|
-
|
|
351
|
-
// manifest URI:
|
|
352
|
-
'https://test/manifest.m3u8');
|
|
310
|
+
'https://test/test.mp4\n');
|
|
353
311
|
});
|
|
354
312
|
|
|
355
313
|
it('handles manifests with a segment tag before a playlist tag', () => {
|
|
@@ -360,7 +318,7 @@ describe('ManifestTextParser', () => {
|
|
|
360
318
|
new shaka.hls.Tag(/* id= */ 2, 'EXT-X-TARGETDURATION', [], '6'),
|
|
361
319
|
],
|
|
362
320
|
segments: [
|
|
363
|
-
new shaka.hls.Segment('https://test/
|
|
321
|
+
new shaka.hls.Segment('https://test/test.mp4',
|
|
364
322
|
[
|
|
365
323
|
new shaka.hls.Tag(/* id= */ 1, 'EXT-X-KEY',
|
|
366
324
|
[
|
|
@@ -378,22 +336,18 @@ describe('ManifestTextParser', () => {
|
|
|
378
336
|
'#EXT-X-KEY:METHOD="AES-128",URI="http://key.com",IV="123"\n' +
|
|
379
337
|
'#EXT-X-TARGETDURATION:6\n' +
|
|
380
338
|
'#EXTINF:5.99467\n' +
|
|
381
|
-
'https://test/test.mp4\n'
|
|
382
|
-
|
|
383
|
-
// manifest URI:
|
|
384
|
-
'https://test/manifest.m3u8');
|
|
339
|
+
'https://test/test.mp4\n');
|
|
385
340
|
});
|
|
386
341
|
|
|
387
342
|
it('tracks playlist URI', () => {
|
|
388
343
|
verifyPlaylist(
|
|
389
344
|
{
|
|
390
|
-
absoluteUri: 'https://test/manifest.m3u8',
|
|
391
345
|
type: shaka.hls.PlaylistType.MEDIA,
|
|
392
346
|
tags: [
|
|
393
347
|
new shaka.hls.Tag(/* id= */ 0, 'EXT-X-MEDIA-SEQUENCE', [], '1'),
|
|
394
348
|
],
|
|
395
349
|
segments: [
|
|
396
|
-
new shaka.hls.Segment('
|
|
350
|
+
new shaka.hls.Segment('test.mp4',
|
|
397
351
|
[
|
|
398
352
|
new shaka.hls.Tag(/* id= */ 2, 'EXTINF', [], '5.99467'),
|
|
399
353
|
]),
|
|
@@ -404,10 +358,7 @@ describe('ManifestTextParser', () => {
|
|
|
404
358
|
'#EXTM3U\n' +
|
|
405
359
|
'#EXT-X-MEDIA-SEQUENCE:1\n' +
|
|
406
360
|
'#EXTINF:5.99467\n' +
|
|
407
|
-
'test.mp4\n'
|
|
408
|
-
|
|
409
|
-
// manifest URI:
|
|
410
|
-
'https://test/manifest.m3u8');
|
|
361
|
+
'test.mp4\n');
|
|
411
362
|
});
|
|
412
363
|
});
|
|
413
364
|
|
|
@@ -427,17 +378,14 @@ describe('ManifestTextParser', () => {
|
|
|
427
378
|
new shaka.hls.Tag(/* id= */ 0, 'EXT-X-TARGETDURATION', [], '6'),
|
|
428
379
|
],
|
|
429
380
|
segments: [
|
|
430
|
-
new shaka.hls.Segment('
|
|
381
|
+
new shaka.hls.Segment('uri',
|
|
431
382
|
[new shaka.hls.Tag(2, 'EXTINF', [], '5')]),
|
|
432
|
-
new shaka.hls.Segment('
|
|
383
|
+
new shaka.hls.Segment('uri2',
|
|
433
384
|
[new shaka.hls.Tag(3, 'EXTINF', [], '4')]),
|
|
434
385
|
],
|
|
435
386
|
},
|
|
436
387
|
|
|
437
|
-
manifestText
|
|
438
|
-
|
|
439
|
-
// manifest URI:
|
|
440
|
-
'https://test/manifest.m3u8');
|
|
388
|
+
manifestText);
|
|
441
389
|
});
|
|
442
390
|
|
|
443
391
|
it('identifies playlist tags', () => {
|
|
@@ -449,19 +397,16 @@ describe('ManifestTextParser', () => {
|
|
|
449
397
|
new shaka.hls.Tag(/* id= */ 4, 'EXT-X-ENDLIST', []),
|
|
450
398
|
],
|
|
451
399
|
segments: [
|
|
452
|
-
new shaka.hls.Segment('
|
|
400
|
+
new shaka.hls.Segment('uri',
|
|
453
401
|
[new shaka.hls.Tag(2, 'EXTINF', [], '5')]),
|
|
454
|
-
new shaka.hls.Segment('
|
|
402
|
+
new shaka.hls.Segment('uri2',
|
|
455
403
|
[new shaka.hls.Tag(3, 'EXTINF', [], '4')]),
|
|
456
404
|
],
|
|
457
405
|
},
|
|
458
406
|
|
|
459
407
|
// Append a playlist tag to the manifest text so it appears after
|
|
460
408
|
// segment-related tags.
|
|
461
|
-
manifestText + '#EXT-X-ENDLIST'
|
|
462
|
-
|
|
463
|
-
// manifest URI:
|
|
464
|
-
'https://test/manifest.m3u8');
|
|
409
|
+
manifestText + '#EXT-X-ENDLIST');
|
|
465
410
|
});
|
|
466
411
|
|
|
467
412
|
it('parses segments with partial segments', () => {
|
|
@@ -508,14 +453,12 @@ describe('ManifestTextParser', () => {
|
|
|
508
453
|
],
|
|
509
454
|
segments: [
|
|
510
455
|
new shaka.hls.Segment(
|
|
511
|
-
/* absoluteMediaPlaylistUri= */ 'https://test/manifest.m3u8',
|
|
512
456
|
/* verbatimSegmentUri= */ 'uri',
|
|
513
457
|
/* tags= */ [
|
|
514
458
|
new shaka.hls.Tag(3, 'EXTINF', [], '5'),
|
|
515
459
|
mapTag,
|
|
516
460
|
]),
|
|
517
461
|
new shaka.hls.Segment(
|
|
518
|
-
/* absoluteMediaPlaylistUri= */ 'https://test/manifest.m3u8',
|
|
519
462
|
/* verbatimSegmentUri= */ 'uri2',
|
|
520
463
|
/* tags= */ [
|
|
521
464
|
new shaka.hls.Tag(6, 'EXTINF', [], '2'),
|
|
@@ -523,15 +466,12 @@ describe('ManifestTextParser', () => {
|
|
|
523
466
|
],
|
|
524
467
|
/* partialSegments= */ partialSegments1),
|
|
525
468
|
new shaka.hls.Segment(
|
|
526
|
-
/* absoluteMediaPlaylistUri= */ '',
|
|
527
469
|
/* verbatimSegmentUri= */ '',
|
|
528
470
|
/* tags= */ [mapTag],
|
|
529
471
|
/* partialSegments= */ partialSegments2),
|
|
530
472
|
],
|
|
531
473
|
},
|
|
532
|
-
manifestTextWithPartialSegments
|
|
533
|
-
// manifest URI:
|
|
534
|
-
'https://test/manifest.m3u8');
|
|
474
|
+
manifestTextWithPartialSegments);
|
|
535
475
|
});
|
|
536
476
|
|
|
537
477
|
it('parses segments with preload hint segments', () => {
|
|
@@ -577,22 +517,18 @@ describe('ManifestTextParser', () => {
|
|
|
577
517
|
],
|
|
578
518
|
segments: [
|
|
579
519
|
new shaka.hls.Segment(
|
|
580
|
-
/* absoluteMediaPlaylistUri= */ 'https://test/manifest.m3u8',
|
|
581
520
|
/* verbatimSegmentUri= */ 'uri',
|
|
582
521
|
/* tags= */ [
|
|
583
522
|
new shaka.hls.Tag(3, 'EXTINF', [], '5'),
|
|
584
523
|
mapTag,
|
|
585
524
|
]),
|
|
586
525
|
new shaka.hls.Segment(
|
|
587
|
-
/* absoluteMediaPlaylistUri= */ '',
|
|
588
526
|
/* verbatimSegmentUri= */ '',
|
|
589
527
|
/* tags= */ [preloadMapTag],
|
|
590
528
|
/* partialSegments= */ preloadSegment),
|
|
591
529
|
],
|
|
592
530
|
},
|
|
593
|
-
manifestTextWithPreloadSegments
|
|
594
|
-
// manifest URI:
|
|
595
|
-
'https://test/manifest.m3u8');
|
|
531
|
+
manifestTextWithPreloadSegments);
|
|
596
532
|
});
|
|
597
533
|
});
|
|
598
534
|
|
|
@@ -600,13 +536,10 @@ describe('ManifestTextParser', () => {
|
|
|
600
536
|
/**
|
|
601
537
|
* @param {!Object} expectedPlaylist
|
|
602
538
|
* @param {string} playlistText
|
|
603
|
-
* @param {string} absoluteManifestUri
|
|
604
539
|
*/
|
|
605
|
-
function verifyPlaylist(expectedPlaylist, playlistText
|
|
540
|
+
function verifyPlaylist(expectedPlaylist, playlistText) {
|
|
606
541
|
const playlistBuffer = shaka.util.StringUtils.toUTF8(playlistText);
|
|
607
|
-
const actualPlaylist =
|
|
608
|
-
parser.parsePlaylist(playlistBuffer, absoluteManifestUri);
|
|
609
|
-
|
|
542
|
+
const actualPlaylist = parser.parsePlaylist(playlistBuffer);
|
|
610
543
|
expect(actualPlaylist).toEqual(jasmine.objectContaining(expectedPlaylist));
|
|
611
544
|
}
|
|
612
545
|
});
|