shaka-player 3.2.2 → 3.2.5
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/.csslintrc +11 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/workflows/build-and-test.yaml +130 -0
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
- package/.github/workflows/demo-version-index.yaml +29 -0
- package/.github/workflows/nightly-demo.yaml +42 -0
- package/.github/workflows/release-please.yaml +145 -0
- package/.github/workflows/safari-homedir-launcher.sh +18 -0
- package/.github/workflows/selenium-lab-tests.yaml +93 -0
- package/AUTHORS +2 -0
- package/CHANGELOG.md +1598 -1525
- package/CONTRIBUTING.md +2 -2
- package/CONTRIBUTORS +2 -0
- package/README.md +7 -7
- package/app-engine/README.md +9 -0
- package/app-engine/demo-version-index/README.md +14 -0
- package/app-engine/demo-version-index/app.yaml +2 -0
- package/app-engine/demo-version-index/main.py +162 -0
- package/app-engine/demo-version-index/requirements.txt +6 -0
- package/app-engine/demo-version-index/templates/index.html +114 -0
- package/app-engine/shaka-player-demo/README.md +18 -0
- package/app-engine/shaka-player-demo/app.yaml +61 -0
- package/app-engine/shaka-player-demo/main.py +95 -0
- package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
- package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
- package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
- package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
- package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
- package/app-engine/shaka-player-demo/posters/standard.png +0 -0
- package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
- package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
- package/app-engine/shaka-player-demo/posters.py +110 -0
- package/app-engine/shaka-player-demo/requirements.txt +5 -0
- package/app-engine/shaka-player-demo/time.txt +1 -0
- package/build/README.md +1 -1
- package/build/checkversion.py +1 -1
- package/build/conformance.textproto +13 -0
- package/build/docker/Dockerfile +20 -0
- package/build/docker/docker-compose.yml +10 -0
- package/build/gendeps.py +18 -15
- package/build/shaka-lab.yaml +163 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +93 -28
- package/build/wrapper.template.js +2 -2
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/asset_card.js +1 -2
- package/demo/cast_receiver/index.html +1 -1
- package/demo/cast_receiver/receiver_app.css +14 -14
- package/demo/common/assets.js +2 -0
- package/demo/config.js +0 -1
- package/demo/custom.js +0 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/index.html +1 -1
- package/demo/main.js +3 -3
- package/dist/controls.css +2 -2
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +191 -194
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +191 -194
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +225 -219
- package/dist/locales.js +31 -31
- package/dist/receiver.compiled.debug.js +43 -45
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +43 -45
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +247 -227
- package/dist/shaka-player.compiled.debug.d.ts +247 -227
- package/dist/shaka-player.compiled.debug.externs.js +43 -16
- package/dist/shaka-player.compiled.debug.js +384 -388
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +43 -16
- package/dist/shaka-player.compiled.js +818 -817
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +291 -280
- package/dist/shaka-player.ui.debug.d.ts +291 -280
- package/dist/shaka-player.ui.debug.externs.js +45 -27
- package/dist/shaka-player.ui.debug.js +389 -394
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +45 -27
- package/dist/shaka-player.ui.js +964 -965
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/REDESIGN.md +33 -33
- package/docs/design/codec_preferences.md +1 -1
- package/docs/design/dash-audio-channels.md +3 -3
- package/docs/design/dash-manifests.md +1 -1
- package/docs/design/gap-jumping.md +3 -3
- package/docs/design/preload.md +2 -2
- package/docs/tutorials/faq.md +8 -8
- package/docs/tutorials/index.json +1 -0
- package/docs/tutorials/plugins.md +3 -3
- package/docs/tutorials/selenium-grid-config.md +122 -0
- package/docs/tutorials/welcome.md +10 -2
- package/externs/shaka/player.js +8 -0
- package/externs/shaka/text.js +10 -0
- package/karma.conf.js +156 -45
- package/lib/abr/simple_abr_manager.js +12 -6
- package/lib/ads/ad_manager.js +1 -0
- package/lib/cast/cast_proxy.js +6 -4
- package/lib/cast/cast_receiver.js +3 -0
- package/lib/cea/cea608_data_channel.js +2 -2
- package/lib/cea/cea708_service.js +5 -4
- package/lib/cea/mp4_cea_parser.js +11 -5
- package/lib/cea/sei_processor.js +6 -3
- package/lib/dash/dash_parser.js +43 -31
- package/lib/dash/mpd_utils.js +4 -5
- package/lib/dash/segment_list.js +1 -2
- package/lib/dash/segment_template.js +3 -3
- package/lib/hls/hls_parser.js +41 -9
- package/lib/hls/manifest_text_parser.js +4 -3
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/content_workarounds.js +2 -2
- package/lib/media/drm_engine.js +3 -2
- package/lib/media/media_source_engine.js +3 -2
- package/lib/media/mp4_segment_index_parser.js +1 -4
- package/lib/media/playhead.js +2 -2
- package/lib/media/presentation_timeline.js +18 -8
- package/lib/media/region_observer.js +39 -33
- package/lib/media/region_timeline.js +17 -19
- package/lib/media/segment_index.js +2 -1
- package/lib/media/segment_reference.js +19 -1
- package/lib/media/streaming_engine.js +12 -9
- package/lib/media/time_ranges_utils.js +1 -3
- package/lib/media/video_wrapper.js +1 -1
- package/lib/net/networking_engine.js +5 -1
- package/lib/offline/storage.js +12 -13
- package/lib/player.js +77 -36
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +32 -17
- package/lib/polyfill/mediasource.js +1 -1
- package/lib/text/cue.js +7 -1
- package/lib/text/simple_text_displayer.js +2 -1
- package/lib/text/ttml_text_parser.js +92 -63
- package/lib/text/ui_text_displayer.js +18 -12
- package/lib/util/buffer_utils.js +1 -3
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +1 -1
- package/lib/util/fake_event_target.js +21 -1
- package/lib/util/iterables.js +0 -46
- package/lib/util/mp4_box_parsers.js +1 -4
- package/lib/util/mp4_parser.js +5 -7
- package/lib/util/periods.js +8 -9
- package/lib/util/platform.js +3 -3
- package/lib/util/pssh.js +1 -4
- package/lib/util/stream_utils.js +88 -11
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -5
- package/lib/util/xml_utils.js +34 -7
- package/package.json +62 -40
- package/roadmap.md +17 -17
- package/test/abr/simple_abr_manager_unit.js +3 -8
- package/test/ads/ad_manager_unit.js +0 -6
- package/test/cast/cast_proxy_unit.js +0 -8
- package/test/cast/cast_receiver_integration.js +1 -18
- package/test/cast/cast_receiver_unit.js +1 -9
- package/test/cast/cast_sender_unit.js +0 -6
- package/test/cast/cast_utils_unit.js +0 -13
- package/test/cea/cea608_memory_unit.js +0 -5
- package/test/cea/cea708_service_unit.js +0 -7
- package/test/cea/cea708_window_unit.js +0 -5
- package/test/cea/cea_decoder_unit.js +0 -6
- package/test/cea/dtvcc_packet_builder_unit.js +0 -3
- package/test/cea/dtvcc_packet_unit.js +0 -5
- package/test/cea/mp4_cea_parser_unit.js +0 -4
- package/test/dash/dash_parser_content_protection_unit.js +1 -10
- package/test/dash/dash_parser_live_unit.js +45 -15
- package/test/dash/dash_parser_manifest_unit.js +37 -18
- package/test/dash/dash_parser_segment_base_unit.js +1 -8
- package/test/dash/dash_parser_segment_list_unit.js +1 -7
- package/test/dash/dash_parser_segment_template_unit.js +0 -9
- package/test/dash/mpd_utils_unit.js +3 -11
- package/test/demo/demo_unit.js +0 -5
- package/test/deprecate/enforcer_unit.js +0 -4
- package/test/deprecate/version_unit.js +0 -2
- package/test/hls/hls_live_unit.js +2 -14
- package/test/hls/hls_parser_unit.js +76 -15
- package/test/hls/manifest_text_parser_unit.js +0 -10
- package/test/media/adaptation_set_criteria_unit.js +3 -7
- package/test/media/adaptation_set_unit.js +0 -2
- package/test/media/buffering_observer_unit.js +1 -4
- package/test/media/closed_caption_parser_unit.js +0 -3
- package/test/media/drm_engine_integration.js +2 -15
- package/test/media/drm_engine_unit.js +7 -27
- package/test/media/manifest_parser_unit.js +0 -4
- package/test/media/media_source_engine_integration.js +0 -7
- package/test/media/media_source_engine_unit.js +1 -14
- package/test/media/mp4_segment_index_parser_unit.js +0 -4
- package/test/media/play_rate_controller_unit.js +0 -4
- package/test/media/playhead_unit.js +8 -16
- package/test/media/presentation_timeline_unit.js +4 -7
- package/test/media/region_observer_unit.js +40 -10
- package/test/media/region_timeline_unit.js +40 -25
- package/test/media/segment_index_unit.js +0 -6
- package/test/media/segment_reference_unit.js +0 -3
- package/test/media/stall_detector_unit.js +0 -5
- package/test/media/streaming_engine_integration.js +11 -37
- package/test/media/streaming_engine_unit.js +155 -34
- package/test/media/time_ranges_utils_unit.js +0 -2
- package/test/media/transmuxer_integration.js +0 -6
- package/test/media/webm_segment_index_parser_unit.js +0 -4
- package/test/net/data_uri_plugin_unit.js +0 -7
- package/test/net/http_plugin_unit.js +0 -9
- package/test/net/networking_engine_unit.js +0 -11
- package/test/offline/download_progress_estimator_unit.js +0 -2
- package/test/offline/indexeddb_storage_unit.js +0 -6
- package/test/offline/manifest_convert_unit.js +0 -8
- package/test/offline/offline_integration.js +1 -10
- package/test/offline/offline_manifest_parser_unit.js +0 -6
- package/test/offline/offline_scheme_unit.js +0 -8
- package/test/offline/offline_uri_unit.js +0 -2
- package/test/offline/storage_compatibility_unit.js +1 -14
- package/test/offline/storage_integration.js +1 -25
- package/test/player_external.js +2 -10
- package/test/player_integration.js +62 -36
- package/test/player_load_graph_integration.js +1 -6
- package/test/player_src_equals_external.js +3 -9
- package/test/player_src_equals_integration.js +41 -15
- package/test/player_unit.js +71 -46
- package/test/routing/walker_unit.js +0 -8
- package/test/test/assets/chapters.vtt +2 -2
- package/test/test/assets/chapters2.vtt +10 -0
- package/test/test/assets/large_file.mpd +1 -1
- package/test/test/boot.js +75 -22
- package/test/test/externs/jasmine.js +2 -2
- package/test/test/externs/karma.js +4 -0
- package/test/test/namespace.js +10 -0
- package/test/test/util/canned_idb.js +0 -8
- package/test/test/util/cea_utils.js +0 -6
- package/test/test/util/dash_parser_util.js +0 -13
- package/test/test/util/fake_ad.js +0 -3
- package/test/test/util/fake_ad_manager.js +0 -9
- package/test/test/util/fake_demo_main.js +0 -5
- package/test/test/util/fake_drm_engine.js +0 -6
- package/test/test/util/fake_media_source_engine.js +0 -7
- package/test/test/util/fake_networking_engine.js +0 -5
- package/test/test/util/fake_text_displayer.js +0 -5
- package/test/test/util/indexeddb_utils.js +1 -10
- package/test/test/util/jasmine_fetch.js +0 -1
- package/test/test/util/loader.js +0 -18
- package/test/test/util/manifest_generator.js +9 -14
- package/test/test/util/manifest_parser_util.js +0 -6
- package/test/test/util/offline_utils.js +0 -5
- package/test/test/util/simple_fakes.js +9 -26
- package/test/test/util/stream_generator.js +0 -14
- package/test/test/util/streaming_engine_util.js +0 -15
- package/test/test/util/test_scheme.js +1 -19
- package/test/test/util/ttml_utils.js +79 -0
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +15 -26
- package/test/test/util/waiter.js +84 -43
- package/test/text/cue_integration.js +0 -4
- package/test/text/lrc_text_parser_unit.js +0 -4
- package/test/text/mp4_ttml_parser_unit.js +10 -23
- package/test/text/mp4_vtt_parser_unit.js +1 -7
- package/test/text/sbv_text_parser_unit.js +0 -4
- package/test/text/simple_text_displayer_unit.js +1 -8
- package/test/text/srt_text_parser_unit.js +0 -4
- package/test/text/ssa_text_parser_unit.js +0 -5
- package/test/text/text_engine_unit.js +2 -7
- package/test/text/text_track_integration.js +0 -2
- package/test/text/ttml_text_parser_unit.js +495 -237
- package/test/text/ui_text_displayer_unit.js +44 -41
- package/test/text/vtt_text_parser_unit.js +0 -9
- package/test/text/web_vtt_generator_unit.js +0 -3
- package/test/ui/ad_ui_unit.js +0 -11
- package/test/ui/localization_unit.js +0 -3
- package/test/ui/text_displayer_layout_unit.js +9 -19
- package/test/ui/ui_customization_unit.js +0 -6
- package/test/ui/ui_integration.js +0 -16
- package/test/ui/ui_unit.js +1 -17
- package/test/util/abortable_operation_unit.js +4 -9
- package/test/util/array_utils_unit.js +0 -2
- package/test/util/buffer_utils_unit.js +0 -2
- package/test/util/data_view_reader_unit.js +0 -4
- package/test/util/ebml_parser_unit.js +0 -4
- package/test/util/event_manager_unit.js +0 -3
- package/test/util/fake_event_target_unit.js +0 -5
- package/test/util/functional_unit.js +1 -1
- package/test/util/iterables_unit.js +0 -64
- package/test/util/language_utils_unit.js +0 -3
- package/test/util/manifest_parser_utils_unit.js +0 -2
- package/test/util/mp4_box_parsers_unit.js +0 -5
- package/test/util/mp4_parser_unit.js +0 -4
- package/test/util/multi_map_unit.js +0 -3
- package/test/util/object_utils_unit.js +0 -2
- package/test/util/periods_unit.js +14 -7
- package/test/util/pssh_unit.js +0 -5
- package/test/util/state_history_unit.js +0 -2
- package/test/util/stream_utils_unit.js +39 -38
- package/test/util/string_utils_unit.js +0 -6
- package/test/util/text_parser_unit.js +0 -2
- package/test/util/xml_utils_unit.js +0 -4
- package/ui/controls.js +3 -0
- package/ui/less/ad_controls.less +4 -4
- package/ui/less/buttons.less +5 -9
- package/ui/less/containers.less +5 -7
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +5 -0
- package/ui/locales/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/ui/localization.js +12 -36
- package/ui/text_selection.js +1 -0
- package/externs/media_capabilities.js +0 -16
- package/externs/svgelement.js +0 -18
|
@@ -4,19 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('goog.asserts');
|
|
8
|
-
goog.require('shaka.hls.HlsParser');
|
|
9
|
-
goog.require('shaka.log');
|
|
10
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
11
|
-
goog.require('shaka.test.FakeNetworkingEngine');
|
|
12
|
-
goog.require('shaka.test.ManifestGenerator');
|
|
13
|
-
goog.require('shaka.test.ManifestParser');
|
|
14
|
-
goog.require('shaka.test.Util');
|
|
15
|
-
goog.require('shaka.util.Error');
|
|
16
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
17
|
-
goog.require('shaka.util.PlayerConfiguration');
|
|
18
|
-
goog.require('shaka.util.Uint8ArrayUtils');
|
|
19
|
-
|
|
20
7
|
describe('HlsParser', () => {
|
|
21
8
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
22
9
|
const ManifestParser = shaka.test.ManifestParser;
|
|
@@ -209,6 +196,80 @@ describe('HlsParser', () => {
|
|
|
209
196
|
expect(actual).toEqual(manifest);
|
|
210
197
|
});
|
|
211
198
|
|
|
199
|
+
it('parses manifest attributes with space', async () => {
|
|
200
|
+
const master = [
|
|
201
|
+
'#EXTM3U\n',
|
|
202
|
+
'#EXT-X-MEDIA:TYPE=AUDIO, GROUP-ID="aud1", LANGUAGE="eng", ',
|
|
203
|
+
'CHANNELS="16/JOC", URI="audio"\n',
|
|
204
|
+
'#EXT-X-MEDIA:TYPE=SUBTITLES, GROUP-ID="sub1", LANGUAGE="eng", ',
|
|
205
|
+
'URI="text"\n',
|
|
206
|
+
'#EXT-X-MEDIA:TYPE=SUBTITLES, GROUP-ID="sub2", LANGUAGE="es", ',
|
|
207
|
+
'URI="text2"\n',
|
|
208
|
+
'#EXT-X-STREAM-INF:BANDWIDTH=200, CODECS="avc1,mp4a", ',
|
|
209
|
+
'RESOLUTION=960x540, FRAME-RATE=60, AUDIO="aud1"\n',
|
|
210
|
+
'video\n',
|
|
211
|
+
].join('');
|
|
212
|
+
|
|
213
|
+
const media = [
|
|
214
|
+
'#EXTM3U\n',
|
|
215
|
+
'#EXT-X-PLAYLIST-TYPE:VOD\n',
|
|
216
|
+
'#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
|
|
217
|
+
'#EXTINF:5,\n',
|
|
218
|
+
'#EXT-X-BYTERANGE:121090@616\n',
|
|
219
|
+
'main.mp4',
|
|
220
|
+
].join('');
|
|
221
|
+
|
|
222
|
+
const textMedia = [
|
|
223
|
+
'#EXTM3U\n',
|
|
224
|
+
'#EXT-X-PLAYLIST-TYPE:VOD\n',
|
|
225
|
+
'#EXTINF:5,\n',
|
|
226
|
+
'#EXT-X-BYTERANGE:121090@616\n',
|
|
227
|
+
'main.vtt',
|
|
228
|
+
].join('');
|
|
229
|
+
|
|
230
|
+
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
231
|
+
manifest.anyTimeline();
|
|
232
|
+
manifest.addPartialVariant((variant) => {
|
|
233
|
+
variant.language = 'en';
|
|
234
|
+
variant.bandwidth = 200;
|
|
235
|
+
variant.addPartialStream(ContentType.VIDEO, (stream) => {
|
|
236
|
+
stream.frameRate = 60;
|
|
237
|
+
stream.mime('video/mp4', 'avc1');
|
|
238
|
+
stream.size(960, 540);
|
|
239
|
+
});
|
|
240
|
+
variant.addPartialStream(ContentType.AUDIO, (stream) => {
|
|
241
|
+
stream.language = 'en';
|
|
242
|
+
stream.channelsCount = 16;
|
|
243
|
+
stream.spatialAudio = true;
|
|
244
|
+
stream.mime('audio/mp4', 'mp4a');
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
manifest.addPartialTextStream((stream) => {
|
|
248
|
+
stream.language = 'en';
|
|
249
|
+
stream.kind = TextStreamKind.SUBTITLE;
|
|
250
|
+
stream.mime('text/vtt', '');
|
|
251
|
+
});
|
|
252
|
+
manifest.addPartialTextStream((stream) => {
|
|
253
|
+
stream.language = 'es';
|
|
254
|
+
stream.kind = TextStreamKind.SUBTITLE;
|
|
255
|
+
stream.mime('text/vtt', '');
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
fakeNetEngine
|
|
260
|
+
.setResponseText('test:/master', master)
|
|
261
|
+
.setResponseText('test:/audio', media)
|
|
262
|
+
.setResponseText('test:/video', media)
|
|
263
|
+
.setResponseText('test:/text', textMedia)
|
|
264
|
+
.setResponseText('test:/text2', textMedia)
|
|
265
|
+
.setResponseText('test:/main.vtt', vttText)
|
|
266
|
+
.setResponseValue('test:/init.mp4', initSegmentData)
|
|
267
|
+
.setResponseValue('test:/main.mp4', segmentData);
|
|
268
|
+
|
|
269
|
+
const actual = await parser.start('test:/master', playerInterface);
|
|
270
|
+
expect(actual).toEqual(manifest);
|
|
271
|
+
});
|
|
272
|
+
|
|
212
273
|
it('prioritize AVERAGE-BANDWIDTH to BANDWIDTH', async () => {
|
|
213
274
|
const master = [
|
|
214
275
|
'#EXTM3U\n',
|
|
@@ -2868,7 +2929,7 @@ describe('HlsParser', () => {
|
|
|
2868
2929
|
expect(audio0).toBe(audio1);
|
|
2869
2930
|
});
|
|
2870
2931
|
|
|
2871
|
-
// https://github.com/
|
|
2932
|
+
// https://github.com/shaka-project/shaka-player/issues/1664
|
|
2872
2933
|
it('correctly resolves relative playlist URIs', async () => {
|
|
2873
2934
|
const master = [
|
|
2874
2935
|
'#EXTM3U\n',
|
|
@@ -2911,7 +2972,7 @@ describe('HlsParser', () => {
|
|
|
2911
2972
|
expect(manifest.variants.length).toBe(1);
|
|
2912
2973
|
});
|
|
2913
2974
|
|
|
2914
|
-
// https://github.com/
|
|
2975
|
+
// https://github.com/shaka-project/shaka-player/issues/1908
|
|
2915
2976
|
it('correctly pairs variants with multiple video and audio', async () => {
|
|
2916
2977
|
const master = [
|
|
2917
2978
|
'#EXTM3U\n',
|
|
@@ -4,16 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.require('shaka.hls.Attribute');
|
|
9
|
-
goog.require('shaka.hls.ManifestTextParser');
|
|
10
|
-
goog.require('shaka.hls.PlaylistType');
|
|
11
|
-
goog.require('shaka.hls.Segment');
|
|
12
|
-
goog.require('shaka.hls.Tag');
|
|
13
|
-
goog.require('shaka.test.Util');
|
|
14
|
-
goog.require('shaka.util.Error');
|
|
15
|
-
goog.require('shaka.util.StringUtils');
|
|
16
|
-
|
|
17
7
|
describe('ManifestTextParser', () => {
|
|
18
8
|
/** @type {!shaka.hls.ManifestTextParser} */
|
|
19
9
|
let parser;
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.PreferenceBasedCriteria');
|
|
8
|
-
goog.require('shaka.test.ManifestGenerator');
|
|
9
|
-
goog.requireType('shaka.media.AdaptationSet');
|
|
10
|
-
|
|
11
7
|
describe('AdaptationSetCriteria', () => {
|
|
12
8
|
describe('preference based selection', () => {
|
|
13
9
|
it('chooses variants in user\'s preferred language', () => {
|
|
@@ -84,7 +80,7 @@ describe('AdaptationSetCriteria', () => {
|
|
|
84
80
|
});
|
|
85
81
|
|
|
86
82
|
it('chooses only one role, even if none is preferred', () => {
|
|
87
|
-
// Regression test for https://github.com/
|
|
83
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/949
|
|
88
84
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
89
85
|
manifest.addVariant(1, (variant) => {
|
|
90
86
|
variant.language = 'en';
|
|
@@ -136,7 +132,7 @@ describe('AdaptationSetCriteria', () => {
|
|
|
136
132
|
});
|
|
137
133
|
|
|
138
134
|
it('chooses only one role, even if all are primary', () => {
|
|
139
|
-
// Regression test for https://github.com/
|
|
135
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/949
|
|
140
136
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
141
137
|
manifest.addVariant(1, (variant) => {
|
|
142
138
|
variant.language = 'en';
|
|
@@ -194,7 +190,7 @@ describe('AdaptationSetCriteria', () => {
|
|
|
194
190
|
});
|
|
195
191
|
|
|
196
192
|
it('chooses only one language, even if all are primary', () => {
|
|
197
|
-
// Regression test for https://github.com/
|
|
193
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/918
|
|
198
194
|
const manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
199
195
|
manifest.addVariant(1, (variant) => {
|
|
200
196
|
variant.language = 'en';
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.BufferingObserver');
|
|
8
|
-
goog.require('shaka.util.Iterables');
|
|
9
|
-
|
|
10
7
|
describe('BufferingObserver', () => {
|
|
11
8
|
const BufferingObserver = shaka.media.BufferingObserver;
|
|
12
9
|
const State = shaka.media.BufferingObserver.State;
|
|
@@ -115,7 +112,7 @@ describe('BufferingObserver', () => {
|
|
|
115
112
|
/** @type {boolean} */
|
|
116
113
|
let changed;
|
|
117
114
|
|
|
118
|
-
for (
|
|
115
|
+
for (let lead = 0; lead < 5; lead++) {
|
|
119
116
|
changed = controller.update(lead, /* toEnd= */ false);
|
|
120
117
|
expect(changed).toBeFalsy();
|
|
121
118
|
}
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.ClosedCaptionParser');
|
|
8
|
-
goog.require('shaka.test.Util');
|
|
9
|
-
|
|
10
7
|
describe('ClosedCaptionParser', () => {
|
|
11
8
|
it('can handle empty caption packets', async () => {
|
|
12
9
|
const initSegment = await shaka.test.Util.fetch(
|
|
@@ -4,21 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.DrmEngine');
|
|
8
|
-
goog.require('shaka.media.MediaSourceEngine');
|
|
9
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
10
|
-
goog.require('shaka.test.FakeClosedCaptionParser');
|
|
11
|
-
goog.require('shaka.test.FakeTextDisplayer');
|
|
12
|
-
goog.require('shaka.test.ManifestGenerator');
|
|
13
|
-
goog.require('shaka.test.UiUtils');
|
|
14
|
-
goog.require('shaka.test.Util');
|
|
15
|
-
goog.require('shaka.test.Waiter');
|
|
16
|
-
goog.require('shaka.util.EventManager');
|
|
17
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
18
|
-
goog.require('shaka.util.Platform');
|
|
19
|
-
goog.require('shaka.util.PlayerConfiguration');
|
|
20
|
-
goog.require('shaka.util.PublicPromise');
|
|
21
|
-
|
|
22
7
|
describe('DrmEngine', () => {
|
|
23
8
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
24
9
|
|
|
@@ -271,6 +256,7 @@ describe('DrmEngine', () => {
|
|
|
271
256
|
video.play();
|
|
272
257
|
|
|
273
258
|
const waiter = new shaka.test.Waiter(eventManager).timeoutAfter(15);
|
|
259
|
+
waiter.setMediaSourceEngine(mediaSourceEngine);
|
|
274
260
|
await waiter.waitForMovement(video);
|
|
275
261
|
|
|
276
262
|
// Something should have played by now.
|
|
@@ -351,6 +337,7 @@ describe('DrmEngine', () => {
|
|
|
351
337
|
video.play();
|
|
352
338
|
|
|
353
339
|
const waiter = new shaka.test.Waiter(eventManager).timeoutAfter(15);
|
|
340
|
+
waiter.setMediaSourceEngine(mediaSourceEngine);
|
|
354
341
|
await waiter.waitForMovement(video);
|
|
355
342
|
|
|
356
343
|
// Something should have played by now.
|
|
@@ -4,26 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.log');
|
|
8
|
-
goog.require('shaka.media.DrmEngine');
|
|
9
|
-
goog.require('shaka.media.Transmuxer');
|
|
10
|
-
goog.require('shaka.net.DataUriPlugin');
|
|
11
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
12
|
-
goog.require('shaka.test.FakeNetworkingEngine');
|
|
13
|
-
goog.require('shaka.test.FakeVideo');
|
|
14
|
-
goog.require('shaka.test.ManifestGenerator');
|
|
15
|
-
goog.require('shaka.test.Util');
|
|
16
|
-
goog.require('shaka.util.AbortableOperation');
|
|
17
|
-
goog.require('shaka.util.BufferUtils');
|
|
18
|
-
goog.require('shaka.util.Error');
|
|
19
|
-
goog.require('shaka.util.Platform');
|
|
20
|
-
goog.require('shaka.util.PlayerConfiguration');
|
|
21
|
-
goog.require('shaka.util.Platform');
|
|
22
|
-
goog.require('shaka.util.PublicPromise');
|
|
23
|
-
goog.require('shaka.util.StringUtils');
|
|
24
|
-
goog.require('shaka.util.Uint8ArrayUtils');
|
|
25
|
-
|
|
26
|
-
|
|
27
7
|
describe('DrmEngine', () => {
|
|
28
8
|
const Util = shaka.test.Util;
|
|
29
9
|
|
|
@@ -31,7 +11,7 @@ describe('DrmEngine', () => {
|
|
|
31
11
|
navigator.requestMediaKeySystemAccess;
|
|
32
12
|
const originalLogError = shaka.log.error;
|
|
33
13
|
const originalBatchTime = shaka.media.DrmEngine.KEY_STATUS_BATCH_TIME;
|
|
34
|
-
const originalDecodingInfo =
|
|
14
|
+
const originalDecodingInfo = navigator.mediaCapabilities.decodingInfo;
|
|
35
15
|
|
|
36
16
|
/** @type {!jasmine.Spy} */
|
|
37
17
|
let decodingInfoSpy;
|
|
@@ -76,7 +56,7 @@ describe('DrmEngine', () => {
|
|
|
76
56
|
|
|
77
57
|
beforeEach(() => {
|
|
78
58
|
decodingInfoSpy = jasmine.createSpy('decodingInfo');
|
|
79
|
-
|
|
59
|
+
navigator.mediaCapabilities.decodingInfo =
|
|
80
60
|
shaka.test.Util.spyFunc(decodingInfoSpy);
|
|
81
61
|
|
|
82
62
|
logErrorSpy = jasmine.createSpy('shaka.log.error');
|
|
@@ -153,7 +133,7 @@ describe('DrmEngine', () => {
|
|
|
153
133
|
|
|
154
134
|
navigator.requestMediaKeySystemAccess =
|
|
155
135
|
originalRequestMediaKeySystemAccess;
|
|
156
|
-
|
|
136
|
+
navigator.mediaCapabilities.decodingInfo = originalDecodingInfo;
|
|
157
137
|
shaka.log.error = originalLogError;
|
|
158
138
|
});
|
|
159
139
|
|
|
@@ -925,7 +905,7 @@ describe('DrmEngine', () => {
|
|
|
925
905
|
.toHaveBeenCalledWith('cenc', initData1);
|
|
926
906
|
});
|
|
927
907
|
|
|
928
|
-
// https://github.com/
|
|
908
|
+
// https://github.com/shaka-project/shaka-player/issues/2754
|
|
929
909
|
it('ignores duplicate init data from newInitData', async () => {
|
|
930
910
|
/** @type {!Uint8Array} */
|
|
931
911
|
const initData = new Uint8Array(1);
|
|
@@ -1311,7 +1291,7 @@ describe('DrmEngine', () => {
|
|
|
1311
1291
|
expect(onKeyStatusSpy).toHaveBeenCalled();
|
|
1312
1292
|
});
|
|
1313
1293
|
|
|
1314
|
-
// See https://github.com/
|
|
1294
|
+
// See https://github.com/shaka-project/shaka-player/issues/1541
|
|
1315
1295
|
it('does not update public key statuses before callback', async () => {
|
|
1316
1296
|
await initAndAttach();
|
|
1317
1297
|
|
|
@@ -1349,7 +1329,7 @@ describe('DrmEngine', () => {
|
|
|
1349
1329
|
expect(keyIds.length).toBe(2);
|
|
1350
1330
|
});
|
|
1351
1331
|
|
|
1352
|
-
// See https://github.com/
|
|
1332
|
+
// See https://github.com/shaka-project/shaka-player/issues/1541
|
|
1353
1333
|
it('does not invoke callback until all sessions are loaded', async () => {
|
|
1354
1334
|
// Set up init data overrides in the manifest so that we get multiple
|
|
1355
1335
|
// sessions.
|
|
@@ -1962,7 +1942,7 @@ describe('DrmEngine', () => {
|
|
|
1962
1942
|
// this doesn't work if the session is not callable (no license request
|
|
1963
1943
|
// sent). So |session.closed| should never resolve and |session.close()|
|
|
1964
1944
|
// should be rejected and destroy() should still succeed.
|
|
1965
|
-
// https://github.com/
|
|
1945
|
+
// https://github.com/shaka-project/shaka-player/issues/664
|
|
1966
1946
|
await initAndAttach();
|
|
1967
1947
|
session1.closed = new shaka.util.PublicPromise();
|
|
1968
1948
|
session2.closed = new shaka.util.PublicPromise();
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.ManifestParser');
|
|
8
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
9
|
-
goog.require('shaka.test.FakeNetworkingEngine');
|
|
10
|
-
|
|
11
7
|
const testGetMimeType = async (expertedMimeType, contentType) => {
|
|
12
8
|
const netEngine = new shaka.test.FakeNetworkingEngine()
|
|
13
9
|
.setHeaders('dummy://foo', {'content-type': contentType});
|
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.ClosedCaptionParser');
|
|
8
|
-
goog.require('shaka.media.MediaSourceEngine');
|
|
9
|
-
goog.require('shaka.test.FakeTextDisplayer');
|
|
10
|
-
goog.require('shaka.test.TestScheme');
|
|
11
|
-
goog.require('shaka.test.UiUtils');
|
|
12
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
13
|
-
|
|
14
7
|
describe('MediaSourceEngine', () => {
|
|
15
8
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
16
9
|
const presentationDuration = 840;
|
|
@@ -4,19 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.require('goog.asserts');
|
|
9
|
-
goog.require('shaka.media.MediaSourceEngine');
|
|
10
|
-
goog.require('shaka.media.Transmuxer');
|
|
11
|
-
goog.require('shaka.test.FakeClosedCaptionParser');
|
|
12
|
-
goog.require('shaka.test.FakeTextDisplayer');
|
|
13
|
-
goog.require('shaka.test.FakeTransmuxer');
|
|
14
|
-
goog.require('shaka.test.StatusPromise');
|
|
15
|
-
goog.require('shaka.test.Util');
|
|
16
|
-
goog.require('shaka.text.TextEngine');
|
|
17
|
-
goog.require('shaka.util.Error');
|
|
18
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
19
|
-
|
|
20
7
|
/**
|
|
21
8
|
* @typedef {{
|
|
22
9
|
* length: number,
|
|
@@ -1127,7 +1114,7 @@ describe('MediaSourceEngine', () => {
|
|
|
1127
1114
|
expect(mockTextEngine.destroy).toHaveBeenCalled();
|
|
1128
1115
|
});
|
|
1129
1116
|
|
|
1130
|
-
// Regression test for https://github.com/
|
|
1117
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/984
|
|
1131
1118
|
it('destroys TextDisplayer on destroy', async () => {
|
|
1132
1119
|
await mediaSourceEngine.destroy();
|
|
1133
1120
|
expect(mockTextDisplayer.destroySpy).toHaveBeenCalled();
|
|
@@ -4,14 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.require('shaka.media.MediaSourcePlayhead');
|
|
9
|
-
goog.require('shaka.test.FakePresentationTimeline');
|
|
10
|
-
goog.require('shaka.test.FakeVideo');
|
|
11
|
-
goog.require('shaka.test.Util');
|
|
12
|
-
goog.require('shaka.util.PlayerConfiguration');
|
|
13
|
-
goog.requireType('shaka.media.Playhead');
|
|
14
|
-
|
|
15
7
|
/**
|
|
16
8
|
* @typedef {{start: number, end: number}}
|
|
17
9
|
*
|
|
@@ -332,8 +324,8 @@ describe('Playhead', () => {
|
|
|
332
324
|
});
|
|
333
325
|
|
|
334
326
|
// This is important for recovering from drift.
|
|
335
|
-
// See: https://github.com/
|
|
336
|
-
// TODO: Re-evaluate after https://github.com/
|
|
327
|
+
// See: https://github.com/shaka-project/shaka-player/issues/1105
|
|
328
|
+
// TODO: Re-evaluate after https://github.com/shaka-project/shaka-player/issues/999
|
|
337
329
|
it('does not change once the initial position is set', () => {
|
|
338
330
|
timeline.isLive.and.returnValue(true);
|
|
339
331
|
timeline.getDuration.and.returnValue(Infinity);
|
|
@@ -781,9 +773,9 @@ describe('Playhead', () => {
|
|
|
781
773
|
}); // clamps playhead even before seeking completes
|
|
782
774
|
|
|
783
775
|
// Regression test for:
|
|
784
|
-
// - https://github.com/
|
|
785
|
-
// - https://github.com/
|
|
786
|
-
// - https://github.com/
|
|
776
|
+
// - https://github.com/shaka-project/shaka-player/pull/2849
|
|
777
|
+
// - https://github.com/shaka-project/shaka-player/issues/2748
|
|
778
|
+
// - https://github.com/shaka-project/shaka-player/issues/2848
|
|
787
779
|
it('does not apply seek range before initial seek has completed', () => {
|
|
788
780
|
// These attributes allow the seek range callback to do its thing.
|
|
789
781
|
video.readyState = HTMLMediaElement.HAVE_METADATA;
|
|
@@ -1236,7 +1228,7 @@ describe('Playhead', () => {
|
|
|
1236
1228
|
it('works with rounding errors when seeking', () => {
|
|
1237
1229
|
// If the browser sets the time to slightly before where we seek to, we
|
|
1238
1230
|
// shouldn't get stuck in an infinite loop trying to jump the tiny gap.
|
|
1239
|
-
// https://github.com/
|
|
1231
|
+
// https://github.com/shaka-project/shaka-player/issues/1309
|
|
1240
1232
|
const buffered = [{start: 10, end: 20}];
|
|
1241
1233
|
video.buffered = createFakeBuffered(buffered);
|
|
1242
1234
|
video.readyState = HTMLMediaElement.HAVE_METADATA;
|
|
@@ -1295,7 +1287,7 @@ describe('Playhead', () => {
|
|
|
1295
1287
|
expect(video.currentTime).toBe(5);
|
|
1296
1288
|
});
|
|
1297
1289
|
|
|
1298
|
-
// Regression test for https://github.com/
|
|
1290
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/2987
|
|
1299
1291
|
it('does gap jump if paused at 0 and has autoplay', () => {
|
|
1300
1292
|
const buffered = [{start: 10, end: 20}];
|
|
1301
1293
|
video.buffered = createFakeBuffered(buffered);
|
|
@@ -1320,7 +1312,7 @@ describe('Playhead', () => {
|
|
|
1320
1312
|
expect(video.currentTime).toBe(10);
|
|
1321
1313
|
});
|
|
1322
1314
|
|
|
1323
|
-
// Regression test for https://github.com/
|
|
1315
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/3451
|
|
1324
1316
|
it('doesn\'t gap jump if paused at 0 and hasn\'t autoplay', () => {
|
|
1325
1317
|
const buffered = [{start: 10, end: 20}];
|
|
1326
1318
|
video.buffered = createFakeBuffered(buffered);
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.PresentationTimeline');
|
|
8
|
-
goog.require('shaka.test.ManifestParser');
|
|
9
|
-
|
|
10
7
|
describe('PresentationTimeline', () => {
|
|
11
8
|
const originalDateNow = Date.now;
|
|
12
9
|
const makeSegmentReference = (startTime, endTime) => {
|
|
@@ -183,7 +180,7 @@ describe('PresentationTimeline', () => {
|
|
|
183
180
|
|
|
184
181
|
// In spite of the current time, the explicit segment times will decide
|
|
185
182
|
// the availability window.
|
|
186
|
-
// See https://github.com/
|
|
183
|
+
// See https://github.com/shaka-project/shaka-player/issues/999
|
|
187
184
|
setElapsed(1000);
|
|
188
185
|
timeline.notifySegments([ref1, ref2, ref3, ref4, ref5]);
|
|
189
186
|
|
|
@@ -283,7 +280,7 @@ describe('PresentationTimeline', () => {
|
|
|
283
280
|
|
|
284
281
|
// In spite of the current time, the explicit segment times will decide
|
|
285
282
|
// the availability window.
|
|
286
|
-
// See https://github.com/
|
|
283
|
+
// See https://github.com/shaka-project/shaka-player/issues/999
|
|
287
284
|
setElapsed(1000);
|
|
288
285
|
timeline.notifySegments([ref1, ref2, ref3, ref4, ref5]);
|
|
289
286
|
|
|
@@ -396,12 +393,12 @@ describe('PresentationTimeline', () => {
|
|
|
396
393
|
expect(timeline.getSafeSeekRangeStart(25)).toBe(5);
|
|
397
394
|
});
|
|
398
395
|
|
|
399
|
-
// Regression test for https://github.com/
|
|
396
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/2831
|
|
400
397
|
it('will round up to the nearest ms', () => {
|
|
401
398
|
const timeline = makeVodTimeline(/* duration= */ 60);
|
|
402
399
|
// Seeking to this exact number may result in seeking to slightly less
|
|
403
400
|
// than that, due to rounding.
|
|
404
|
-
timeline.setUserSeekStart(1.
|
|
401
|
+
timeline.setUserSeekStart(1.458666666666666);
|
|
405
402
|
// So the safe range start should be slightly higher, with fewer digits.
|
|
406
403
|
expect(timeline.getSafeSeekRangeStart(0)).toBe(1.459);
|
|
407
404
|
});
|
|
@@ -4,17 +4,15 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.media.RegionObserver');
|
|
8
|
-
goog.require('shaka.media.RegionTimeline');
|
|
9
|
-
goog.require('shaka.test.Util');
|
|
10
|
-
goog.requireType('shaka.media.IPlayheadObserver');
|
|
11
|
-
|
|
12
7
|
describe('RegionObserver', () => {
|
|
13
8
|
/** @type {!shaka.media.RegionTimeline} */
|
|
14
9
|
let timeline;
|
|
15
10
|
/** @type {!shaka.media.RegionObserver} */
|
|
16
11
|
let observer;
|
|
17
12
|
|
|
13
|
+
/** @type {!jasmine.Spy} */
|
|
14
|
+
let onSeekRange;
|
|
15
|
+
|
|
18
16
|
/** @type {!jasmine.Spy} */
|
|
19
17
|
let onEnterRegion;
|
|
20
18
|
/** @type {!jasmine.Spy} */
|
|
@@ -23,18 +21,26 @@ describe('RegionObserver', () => {
|
|
|
23
21
|
let onSkipRegion;
|
|
24
22
|
|
|
25
23
|
beforeEach(() => {
|
|
24
|
+
onSeekRange = jasmine.createSpy('onSeekRange');
|
|
25
|
+
onSeekRange.and.returnValue({start: 0, end: 100});
|
|
26
|
+
|
|
26
27
|
onEnterRegion = jasmine.createSpy('onEnterRegion');
|
|
27
28
|
onExitRegion = jasmine.createSpy('onExitRegion');
|
|
28
29
|
onSkipRegion = jasmine.createSpy('onSkipRegion');
|
|
29
30
|
|
|
30
31
|
timeline = new shaka.media.RegionTimeline(
|
|
31
|
-
()
|
|
32
|
+
shaka.test.Util.spyFunc(onSeekRange));
|
|
32
33
|
|
|
33
34
|
observer = new shaka.media.RegionObserver(timeline);
|
|
34
|
-
observer.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
observer.addEventListener('enter', (event) => {
|
|
36
|
+
shaka.test.Util.spyFunc(onEnterRegion)(event['region'], event['seeking']);
|
|
37
|
+
});
|
|
38
|
+
observer.addEventListener('exit', (event) => {
|
|
39
|
+
shaka.test.Util.spyFunc(onExitRegion)(event['region'], event['seeking']);
|
|
40
|
+
});
|
|
41
|
+
observer.addEventListener('skip', (event) => {
|
|
42
|
+
shaka.test.Util.spyFunc(onSkipRegion)(event['region'], event['seeking']);
|
|
43
|
+
});
|
|
38
44
|
});
|
|
39
45
|
|
|
40
46
|
it('fires enter event when adding a region the playhead is in', () => {
|
|
@@ -313,6 +319,30 @@ describe('RegionObserver', () => {
|
|
|
313
319
|
expect(onSkipRegion).not.toHaveBeenCalled();
|
|
314
320
|
});
|
|
315
321
|
|
|
322
|
+
// See https://github.com/shaka-project/shaka-player/issues/3949
|
|
323
|
+
it('cleans up references to regions', async () => {
|
|
324
|
+
const region = createRegion('my-region', 0, 10);
|
|
325
|
+
timeline.addRegion(region);
|
|
326
|
+
|
|
327
|
+
// Poll so that RegionObserver will store regions.
|
|
328
|
+
poll(observer,
|
|
329
|
+
/* timeInSeconds= */ 5,
|
|
330
|
+
/* seeking= */ false);
|
|
331
|
+
|
|
332
|
+
// Hack to get a private member without the compiler complaining:
|
|
333
|
+
/** @type {Map} */
|
|
334
|
+
const regionMap = (/** @type {?} */(observer))['oldPosition_'];
|
|
335
|
+
expect(regionMap.size).not.toBe(0);
|
|
336
|
+
|
|
337
|
+
// Move the seek range so that the region will be removed.
|
|
338
|
+
onSeekRange.and.returnValue({start: 20, end: 100});
|
|
339
|
+
// Give the timeline time to filter regions
|
|
340
|
+
await shaka.test.Util.delay(
|
|
341
|
+
shaka.media.RegionTimeline.REGION_FILTER_INTERVAL * 2);
|
|
342
|
+
|
|
343
|
+
expect(regionMap.size).toBe(0);
|
|
344
|
+
});
|
|
345
|
+
|
|
316
346
|
/**
|
|
317
347
|
* @param {string} id
|
|
318
348
|
* @param {number} startTimeSeconds
|