shaka-player 3.3.2 → 4.0.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/.csslintrc +11 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/pull_request_template.md +6 -34
- package/.github/workflows/build-and-test.yaml +129 -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 +37 -0
- package/.github/workflows/nightly-demo.yaml +42 -0
- package/.github/workflows/release-please.yaml +168 -0
- package/.github/workflows/safari-homedir-launcher.sh +18 -0
- package/.github/workflows/selenium-lab-tests.yaml +92 -0
- package/.github/workflows/sync-labels.yaml +33 -0
- package/.github/workflows/update-issues.yaml +29 -0
- package/.github/workflows/validate-pr-title.yaml +35 -0
- package/AUTHORS +3 -0
- package/CHANGELOG.md +1866 -1675
- package/CONTRIBUTING.md +2 -2
- package/CONTRIBUTORS +3 -0
- package/README.md +16 -13
- 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 +28 -0
- package/app-engine/demo-version-index/generate.py +164 -0
- package/app-engine/demo-version-index/main.py +11 -0
- package/app-engine/demo-version-index/requirements.txt +5 -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 +3 -3
- package/build/checkversion.py +1 -1
- package/build/compiler.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 +161 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +94 -29
- package/build/types/core +0 -1
- package/build/types/polyfill +1 -3
- 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/asset.js +17 -1
- package/demo/common/assets.js +31 -0
- package/demo/common/message_ids.js +6 -3
- package/demo/config.js +10 -12
- package/demo/custom.js +39 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/demo_utils.js +0 -1
- package/demo/index.html +1 -1
- package/demo/locales/en.json +6 -3
- package/demo/locales/source.json +22 -10
- package/demo/main.js +12 -9
- package/demo/search.js +2 -1
- package/dist/controls.css +3 -3
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +236 -232
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +236 -232
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +229 -226
- package/dist/locales.js +34 -32
- package/dist/receiver.compiled.debug.js +75 -73
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +75 -73
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +321 -314
- package/dist/shaka-player.compiled.debug.d.ts +321 -314
- package/dist/shaka-player.compiled.debug.externs.js +140 -129
- package/dist/shaka-player.compiled.debug.js +527 -592
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +140 -129
- package/dist/shaka-player.compiled.js +836 -860
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +367 -358
- package/dist/shaka-player.ui.debug.d.ts +367 -358
- package/dist/shaka-player.ui.debug.externs.js +148 -129
- package/dist/shaka-player.ui.debug.js +586 -649
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +148 -129
- package/dist/shaka-player.ui.js +1008 -1028
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/REDESIGN.md +33 -33
- package/docs/design/bg-fetch.md +2 -2
- 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/config.md +0 -2
- package/docs/tutorials/drm-config.md +5 -0
- package/docs/tutorials/fairplay.md +7 -22
- package/docs/tutorials/faq.md +8 -19
- package/docs/tutorials/index.json +3 -8
- package/docs/tutorials/plugins.md +4 -6
- package/docs/tutorials/selenium-grid-config.md +122 -0
- package/docs/tutorials/upgrade.md +83 -11
- package/docs/tutorials/welcome.md +10 -2
- package/externs/cmcd.js +1 -1
- package/externs/polyfill.js +15 -0
- package/externs/shaka/manifest.js +5 -1
- package/externs/shaka/net.js +12 -0
- package/externs/shaka/offline.js +5 -1
- package/externs/shaka/player.js +39 -32
- package/externs/shaka/text.js +12 -12
- package/externs/sourcebuffer.js +15 -0
- package/karma.conf.js +137 -30
- package/lib/abr/simple_abr_manager.js +12 -6
- package/lib/ads/client_side_ad.js +13 -2
- package/lib/ads/client_side_ad_manager.js +22 -4
- package/lib/cast/cast_proxy.js +3 -4
- package/lib/cast/cast_utils.js +0 -1
- 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/content_protection.js +85 -5
- package/lib/dash/dash_parser.js +10 -12
- 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 +386 -749
- package/lib/hls/manifest_text_parser.js +5 -6
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/content_workarounds.js +2 -2
- package/lib/media/drm_engine.js +105 -55
- package/lib/media/gap_jumping_controller.js +10 -45
- package/lib/media/media_source_engine.js +90 -17
- package/lib/media/mp4_segment_index_parser.js +1 -4
- package/lib/media/playhead.js +4 -7
- package/lib/media/presentation_timeline.js +19 -10
- package/lib/media/segment_index.js +13 -46
- package/lib/media/segment_reference.js +47 -1
- package/lib/media/streaming_engine.js +35 -17
- package/lib/media/time_ranges_utils.js +5 -12
- package/lib/media/video_wrapper.js +1 -1
- package/lib/net/networking_engine.js +4 -1
- 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 +1 -0
- package/lib/offline/storage.js +104 -136
- package/lib/player.js +50 -216
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +15 -9
- package/lib/polyfill/mediasource.js +0 -28
- package/lib/polyfill/patchedmediakeys_nop.js +2 -0
- package/lib/polyfill/patchedmediakeys_webkit.js +2 -0
- package/lib/polyfill/symbol.js +46 -0
- package/lib/text/cue.js +1 -7
- package/lib/text/lrc_text_parser.js +8 -0
- package/lib/text/mp4_ttml_parser.js +8 -0
- package/lib/text/mp4_vtt_parser.js +8 -0
- package/lib/text/sbv_text_parser.js +8 -0
- package/lib/text/simple_text_displayer.js +3 -8
- package/lib/text/srt_text_parser.js +8 -0
- package/lib/text/ssa_text_parser.js +8 -0
- package/lib/text/text_engine.js +19 -3
- package/lib/text/ttml_text_parser.js +16 -5
- package/lib/text/ui_text_displayer.js +2 -8
- package/lib/text/vtt_text_parser.js +24 -2
- package/lib/text/web_vtt_generator.js +1 -7
- package/lib/util/buffer_utils.js +1 -3
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +10 -14
- package/lib/util/fairplay_utils.js +109 -0
- package/lib/util/functional.js +0 -42
- package/lib/util/iterables.js +0 -46
- package/lib/util/mime_utils.js +2 -0
- package/lib/util/mp4_box_parsers.js +1 -4
- package/lib/util/mp4_parser.js +5 -7
- package/lib/util/periods.js +10 -11
- package/lib/util/platform.js +48 -3
- package/lib/util/player_configuration.js +12 -6
- package/lib/util/pssh.js +24 -8
- package/lib/util/stream_utils.js +96 -25
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -21
- package/lib/util/xml_utils.js +16 -8
- package/package.json +61 -36
- package/roadmap.md +27 -27
- package/shaka-player.uncompiled.js +1 -3
- 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 +1 -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 +45 -10
- package/test/dash/dash_parser_live_unit.js +2 -15
- package/test/dash/dash_parser_manifest_unit.js +2 -40
- 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 +3 -13
- package/test/dash/mpd_utils_unit.js +3 -11
- package/test/demo/demo_unit.js +2 -6
- package/test/deprecate/enforcer_unit.js +0 -4
- package/test/deprecate/version_unit.js +0 -2
- package/test/hls/hls_live_unit.js +101 -234
- package/test/hls/hls_parser_unit.js +517 -447
- 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 +90 -144
- package/test/media/manifest_parser_unit.js +0 -4
- package/test/media/media_source_engine_integration.js +26 -10
- package/test/media/media_source_engine_unit.js +8 -20
- 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 +35 -207
- package/test/media/presentation_timeline_unit.js +4 -7
- package/test/media/quality_observer_unit.js +0 -4
- package/test/media/region_observer_unit.js +1 -6
- package/test/media/region_timeline_unit.js +0 -3
- package/test/media/segment_index_unit.js +15 -31
- 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 +13 -75
- package/test/media/streaming_engine_unit.js +14 -37
- package/test/media/time_ranges_utils_unit.js +0 -7
- 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 +34 -12
- package/test/offline/offline_integration.js +1 -10
- package/test/offline/offline_manifest_parser_unit.js +1 -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 +6 -31
- package/test/player_external.js +1 -15
- package/test/player_integration.js +38 -28
- 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 +0 -7
- package/test/player_unit.js +78 -37
- package/test/routing/walker_unit.js +0 -8
- 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 +11 -11
- 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 +12 -15
- package/test/test/util/manifest_parser_util.js +4 -7
- package/test/test/util/offline_utils.js +1 -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 +1 -15
- package/test/test/util/test_scheme.js +25 -20
- package/test/test/util/ttml_utils.js +0 -2
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +9 -23
- package/test/test/util/waiter.js +84 -43
- package/test/text/cue_integration.js +2 -6
- package/test/text/lrc_text_parser_unit.js +6 -11
- package/test/text/mp4_ttml_parser_unit.js +6 -10
- package/test/text/mp4_vtt_parser_unit.js +7 -12
- package/test/text/sbv_text_parser_unit.js +5 -10
- package/test/text/simple_text_displayer_unit.js +1 -8
- package/test/text/srt_text_parser_unit.js +5 -10
- package/test/text/ssa_text_parser_unit.js +17 -34
- package/test/text/text_engine_unit.js +47 -12
- package/test/text/text_track_integration.js +0 -2
- package/test/text/ttml_text_parser_unit.js +79 -88
- package/test/text/ui_text_displayer_unit.js +44 -41
- package/test/text/vtt_text_parser_unit.js +55 -66
- 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 +1 -12
- package/test/ui/ui_customization_unit.js +0 -6
- package/test/ui/ui_integration.js +0 -32
- package/test/ui/ui_unit.js +28 -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/cmcd_manager_unit.js +3 -3
- 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/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 +26 -15
- 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 +65 -40
- package/ui/fullscreen_button.js +26 -6
- package/ui/less/ad_controls.less +6 -6
- package/ui/less/buttons.less +6 -6
- package/ui/less/containers.less +10 -12
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +7 -2
- package/ui/less/tooltip.less +4 -4
- package/ui/locales/en.json +1 -0
- package/ui/locales/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/ui/locales/source.json +5 -0
- package/ui/resolution_selection.js +31 -33
- package/ui/seek_bar.js +2 -1
- package/ui/ui.js +0 -17
- package/.github/workflows/build_and_test.yaml +0 -73
- package/.github/workflows/release.yaml +0 -53
- package/docs/tutorials/upgrade-v2-5.md +0 -441
- package/docs/tutorials/upgrade-v3.md +0 -38
- package/externs/svgelement.js +0 -18
- package/externs/webcrypto.js +0 -18
- package/lib/polyfill/mathround.js +0 -49
- package/lib/polyfill/patchedmediakeys_apple.js +0 -744
- package/lib/polyfill/patchedmediakeys_ms.js +0 -698
- package/lib/util/mutex.js +0 -52
- package/test/util/functional_unit.js +0 -82
|
@@ -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
|
|
|
@@ -776,11 +756,6 @@ describe('DrmEngine', () => {
|
|
|
776
756
|
expect(mockVideo.setMediaKeys).not.toHaveBeenCalled();
|
|
777
757
|
});
|
|
778
758
|
|
|
779
|
-
it('sets MediaKeys for encrypted content', async () => {
|
|
780
|
-
await initAndAttach();
|
|
781
|
-
expect(mockVideo.setMediaKeys).toHaveBeenCalledWith(mockMediaKeys);
|
|
782
|
-
});
|
|
783
|
-
|
|
784
759
|
it('sets server certificate if present in config', async () => {
|
|
785
760
|
const cert = new Uint8Array(1);
|
|
786
761
|
config.advanced['drm.abc'] = createAdvancedConfig(cert);
|
|
@@ -877,7 +852,7 @@ describe('DrmEngine', () => {
|
|
|
877
852
|
/** @type {!Uint8Array} */
|
|
878
853
|
const initData1 = new Uint8Array(5);
|
|
879
854
|
/** @type {!Uint8Array} */
|
|
880
|
-
const initData2 = new Uint8Array(
|
|
855
|
+
const initData2 = new Uint8Array(1);
|
|
881
856
|
/** @type {!Uint8Array} */
|
|
882
857
|
const initData3 = new Uint8Array(10);
|
|
883
858
|
|
|
@@ -925,7 +900,7 @@ describe('DrmEngine', () => {
|
|
|
925
900
|
.toHaveBeenCalledWith('cenc', initData1);
|
|
926
901
|
});
|
|
927
902
|
|
|
928
|
-
// https://github.com/
|
|
903
|
+
// https://github.com/shaka-project/shaka-player/issues/2754
|
|
929
904
|
it('ignores duplicate init data from newInitData', async () => {
|
|
930
905
|
/** @type {!Uint8Array} */
|
|
931
906
|
const initData = new Uint8Array(1);
|
|
@@ -1019,12 +994,23 @@ describe('DrmEngine', () => {
|
|
|
1019
994
|
mockVideo.setMediaKeys.and.returnValue(Promise.reject(
|
|
1020
995
|
new Error('whoops!')));
|
|
1021
996
|
|
|
1022
|
-
|
|
997
|
+
tweakDrmInfos((drmInfos) => {
|
|
998
|
+
drmInfos[0].initData = [
|
|
999
|
+
{initData: new Uint8Array(1), initDataType: 'cenc', keyId: null},
|
|
1000
|
+
];
|
|
1001
|
+
});
|
|
1002
|
+
|
|
1003
|
+
onErrorSpy.and.stub();
|
|
1004
|
+
|
|
1005
|
+
await initAndAttach();
|
|
1006
|
+
|
|
1007
|
+
expect(onErrorSpy).toHaveBeenCalled();
|
|
1008
|
+
const error = onErrorSpy.calls.argsFor(0)[0];
|
|
1009
|
+
shaka.test.Util.expectToEqualError(error, new shaka.util.Error(
|
|
1023
1010
|
shaka.util.Error.Severity.CRITICAL,
|
|
1024
1011
|
shaka.util.Error.Category.DRM,
|
|
1025
1012
|
shaka.util.Error.Code.FAILED_TO_ATTACH_TO_VIDEO,
|
|
1026
1013
|
'whoops!'));
|
|
1027
|
-
await expectAsync(initAndAttach()).toBeRejectedWith(expected);
|
|
1028
1014
|
});
|
|
1029
1015
|
|
|
1030
1016
|
it('fails with an error if setServerCertificate fails', async () => {
|
|
@@ -1087,10 +1073,8 @@ describe('DrmEngine', () => {
|
|
|
1087
1073
|
const initData1 = new Uint8Array(1);
|
|
1088
1074
|
const initData2 = new Uint8Array(2);
|
|
1089
1075
|
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
mockVideo.on['encrypted'](
|
|
1093
|
-
{initDataType: 'cenc', initData: initData2, keyId: null});
|
|
1076
|
+
await sendEncryptedEvent('webm', initData1);
|
|
1077
|
+
await sendEncryptedEvent('cenc', initData2);
|
|
1094
1078
|
|
|
1095
1079
|
expect(mockMediaKeys.createSession).toHaveBeenCalledTimes(2);
|
|
1096
1080
|
expect(session1.generateRequest)
|
|
@@ -1101,32 +1085,23 @@ describe('DrmEngine', () => {
|
|
|
1101
1085
|
|
|
1102
1086
|
it('suppresses duplicate initDatas', async () => {
|
|
1103
1087
|
await initAndAttach();
|
|
1088
|
+
|
|
1104
1089
|
const initData1 = new Uint8Array(1);
|
|
1105
|
-
const initData2 = new Uint8Array(1); // identical to initData1
|
|
1106
1090
|
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
mockVideo.on['encrypted'](
|
|
1110
|
-
{initDataType: 'cenc', initData: initData2, keyId: null});
|
|
1091
|
+
await sendEncryptedEvent('webm', initData1);
|
|
1092
|
+
await sendEncryptedEvent('cenc'); // identical to webm initData
|
|
1111
1093
|
|
|
1112
1094
|
expect(mockMediaKeys.createSession).toHaveBeenCalledTimes(1);
|
|
1113
1095
|
expect(session1.generateRequest)
|
|
1114
1096
|
.toHaveBeenCalledWith('webm', initData1);
|
|
1115
1097
|
});
|
|
1116
1098
|
|
|
1117
|
-
it('
|
|
1118
|
-
// Set up an init data override in the manifest:
|
|
1119
|
-
tweakDrmInfos((drmInfos) => {
|
|
1120
|
-
drmInfos[0].initData = [
|
|
1121
|
-
{initData: new Uint8Array(0), initDataType: 'cenc', keyId: null},
|
|
1122
|
-
];
|
|
1123
|
-
});
|
|
1124
|
-
|
|
1099
|
+
it('set media keys when not already done at startup', async () => {
|
|
1125
1100
|
await initAndAttach();
|
|
1126
|
-
|
|
1101
|
+
await sendEncryptedEvent();
|
|
1102
|
+
|
|
1103
|
+
expect(mockVideo.setMediaKeys).toHaveBeenCalledTimes(1);
|
|
1127
1104
|
expect(mockMediaKeys.createSession).toHaveBeenCalledTimes(1);
|
|
1128
|
-
// We aren't even listening for 'encrypted' events.
|
|
1129
|
-
expect(mockVideo.on['encrypted']).toBe(undefined);
|
|
1130
1105
|
});
|
|
1131
1106
|
|
|
1132
1107
|
it('dispatches an error if createSession fails', async () => {
|
|
@@ -1134,9 +1109,7 @@ describe('DrmEngine', () => {
|
|
|
1134
1109
|
onErrorSpy.and.stub();
|
|
1135
1110
|
|
|
1136
1111
|
await initAndAttach();
|
|
1137
|
-
|
|
1138
|
-
mockVideo.on['encrypted'](
|
|
1139
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1112
|
+
await sendEncryptedEvent();
|
|
1140
1113
|
|
|
1141
1114
|
expect(onErrorSpy).toHaveBeenCalled();
|
|
1142
1115
|
const error = onErrorSpy.calls.argsFor(0)[0];
|
|
@@ -1156,9 +1129,7 @@ describe('DrmEngine', () => {
|
|
|
1156
1129
|
onErrorSpy.and.stub();
|
|
1157
1130
|
|
|
1158
1131
|
await initAndAttach();
|
|
1159
|
-
|
|
1160
|
-
mockVideo.on['encrypted'](
|
|
1161
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1132
|
+
await sendEncryptedEvent();
|
|
1162
1133
|
|
|
1163
1134
|
expect(onErrorSpy).toHaveBeenCalled();
|
|
1164
1135
|
const error = onErrorSpy.calls.argsFor(0)[0];
|
|
@@ -1172,9 +1143,7 @@ describe('DrmEngine', () => {
|
|
|
1172
1143
|
describe('message', () => {
|
|
1173
1144
|
it('is listened for', async () => {
|
|
1174
1145
|
await initAndAttach();
|
|
1175
|
-
|
|
1176
|
-
mockVideo.on['encrypted'](
|
|
1177
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1146
|
+
await sendEncryptedEvent();
|
|
1178
1147
|
|
|
1179
1148
|
expect(session1.addEventListener).toHaveBeenCalledWith(
|
|
1180
1149
|
'message', jasmine.any(Function), jasmine.anything());
|
|
@@ -1214,9 +1183,7 @@ describe('DrmEngine', () => {
|
|
|
1214
1183
|
onErrorSpy.and.stub();
|
|
1215
1184
|
|
|
1216
1185
|
await initAndAttach();
|
|
1217
|
-
|
|
1218
|
-
mockVideo.on['encrypted'](
|
|
1219
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1186
|
+
await sendEncryptedEvent();
|
|
1220
1187
|
|
|
1221
1188
|
// Simulate a permission error from the web server.
|
|
1222
1189
|
const netError = new shaka.util.Error(
|
|
@@ -1252,9 +1219,7 @@ describe('DrmEngine', () => {
|
|
|
1252
1219
|
async function sendMessageTest(
|
|
1253
1220
|
expectedUrl, messageType = 'license-request') {
|
|
1254
1221
|
await initAndAttach();
|
|
1255
|
-
|
|
1256
|
-
mockVideo.on['encrypted'](
|
|
1257
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1222
|
+
await sendEncryptedEvent();
|
|
1258
1223
|
|
|
1259
1224
|
const operation = shaka.util.AbortableOperation.completed({});
|
|
1260
1225
|
fakeNetEngine.request.and.returnValue(operation);
|
|
@@ -1276,9 +1241,7 @@ describe('DrmEngine', () => {
|
|
|
1276
1241
|
describe('keystatuseschange', () => {
|
|
1277
1242
|
it('is listened for', async () => {
|
|
1278
1243
|
await initAndAttach();
|
|
1279
|
-
|
|
1280
|
-
mockVideo.on['encrypted'](
|
|
1281
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1244
|
+
await sendEncryptedEvent();
|
|
1282
1245
|
|
|
1283
1246
|
expect(session1.addEventListener).toHaveBeenCalledWith(
|
|
1284
1247
|
'keystatuseschange', jasmine.any(Function), jasmine.anything());
|
|
@@ -1286,9 +1249,7 @@ describe('DrmEngine', () => {
|
|
|
1286
1249
|
|
|
1287
1250
|
it('triggers callback', async () => {
|
|
1288
1251
|
await initAndAttach();
|
|
1289
|
-
|
|
1290
|
-
mockVideo.on['encrypted'](
|
|
1291
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1252
|
+
await sendEncryptedEvent();
|
|
1292
1253
|
|
|
1293
1254
|
const keyId1 = makeKeyId(1);
|
|
1294
1255
|
const keyId2 = makeKeyId(2);
|
|
@@ -1311,13 +1272,10 @@ describe('DrmEngine', () => {
|
|
|
1311
1272
|
expect(onKeyStatusSpy).toHaveBeenCalled();
|
|
1312
1273
|
});
|
|
1313
1274
|
|
|
1314
|
-
// See https://github.com/
|
|
1275
|
+
// See https://github.com/shaka-project/shaka-player/issues/1541
|
|
1315
1276
|
it('does not update public key statuses before callback', async () => {
|
|
1316
1277
|
await initAndAttach();
|
|
1317
|
-
|
|
1318
|
-
const initData = new Uint8Array(0);
|
|
1319
|
-
mockVideo.on['encrypted'](
|
|
1320
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1278
|
+
await sendEncryptedEvent();
|
|
1321
1279
|
|
|
1322
1280
|
const keyId1 = makeKeyId(1);
|
|
1323
1281
|
const keyId2 = makeKeyId(2);
|
|
@@ -1349,7 +1307,7 @@ describe('DrmEngine', () => {
|
|
|
1349
1307
|
expect(keyIds.length).toBe(2);
|
|
1350
1308
|
});
|
|
1351
1309
|
|
|
1352
|
-
// See https://github.com/
|
|
1310
|
+
// See https://github.com/shaka-project/shaka-player/issues/1541
|
|
1353
1311
|
it('does not invoke callback until all sessions are loaded', async () => {
|
|
1354
1312
|
// Set up init data overrides in the manifest so that we get multiple
|
|
1355
1313
|
// sessions.
|
|
@@ -1394,9 +1352,7 @@ describe('DrmEngine', () => {
|
|
|
1394
1352
|
await initAndAttach();
|
|
1395
1353
|
expect(onErrorSpy).not.toHaveBeenCalled();
|
|
1396
1354
|
|
|
1397
|
-
|
|
1398
|
-
mockVideo.on['encrypted'](
|
|
1399
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1355
|
+
await sendEncryptedEvent();
|
|
1400
1356
|
|
|
1401
1357
|
const keyId1 = makeKeyId(1);
|
|
1402
1358
|
const keyId2 = makeKeyId(2);
|
|
@@ -1443,9 +1399,7 @@ describe('DrmEngine', () => {
|
|
|
1443
1399
|
await initAndAttach();
|
|
1444
1400
|
expect(onErrorSpy).not.toHaveBeenCalled();
|
|
1445
1401
|
|
|
1446
|
-
|
|
1447
|
-
mockVideo.on['encrypted'](
|
|
1448
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1402
|
+
await sendEncryptedEvent();
|
|
1449
1403
|
|
|
1450
1404
|
const keyId1 = makeKeyId(1);
|
|
1451
1405
|
const keyId2 = makeKeyId(2);
|
|
@@ -1489,9 +1443,7 @@ describe('DrmEngine', () => {
|
|
|
1489
1443
|
const license = new Uint8Array(0);
|
|
1490
1444
|
|
|
1491
1445
|
await initAndAttach();
|
|
1492
|
-
|
|
1493
|
-
mockVideo.on['encrypted'](
|
|
1494
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1446
|
+
await sendEncryptedEvent();
|
|
1495
1447
|
|
|
1496
1448
|
fakeNetEngine.setResponseValue('http://abc.drm/license', license);
|
|
1497
1449
|
const message = new Uint8Array(0);
|
|
@@ -1550,9 +1502,8 @@ describe('DrmEngine', () => {
|
|
|
1550
1502
|
|
|
1551
1503
|
it('publishes an event if update succeeds', async () => {
|
|
1552
1504
|
await initAndAttach();
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1505
|
+
await sendEncryptedEvent();
|
|
1506
|
+
|
|
1556
1507
|
const message = new Uint8Array(0);
|
|
1557
1508
|
session1.on['message']({target: session1, message: message});
|
|
1558
1509
|
session1.update.and.returnValue(Promise.resolve());
|
|
@@ -1568,9 +1519,7 @@ describe('DrmEngine', () => {
|
|
|
1568
1519
|
const license = new Uint8Array(0);
|
|
1569
1520
|
|
|
1570
1521
|
await initAndAttach();
|
|
1571
|
-
|
|
1572
|
-
mockVideo.on['encrypted'](
|
|
1573
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
1522
|
+
await sendEncryptedEvent();
|
|
1574
1523
|
|
|
1575
1524
|
fakeNetEngine.setResponseValue('http://abc.drm/license', license);
|
|
1576
1525
|
const message = new Uint8Array(0);
|
|
@@ -1591,12 +1540,9 @@ describe('DrmEngine', () => {
|
|
|
1591
1540
|
describe('destroy', () => {
|
|
1592
1541
|
it('tears down MediaKeys and active sessions', async () => {
|
|
1593
1542
|
await initAndAttach();
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1598
|
-
mockVideo.on['encrypted'](
|
|
1599
|
-
{initDataType: 'webm', initData: initData2, keyId: null});
|
|
1543
|
+
|
|
1544
|
+
await sendEncryptedEvent('webm');
|
|
1545
|
+
await sendEncryptedEvent('cenc', new Uint8Array(2));
|
|
1600
1546
|
|
|
1601
1547
|
const message = new Uint8Array(0);
|
|
1602
1548
|
session1.on['message']({target: session1, message: message});
|
|
@@ -1621,12 +1567,8 @@ describe('DrmEngine', () => {
|
|
|
1621
1567
|
drmEngine.configure(config);
|
|
1622
1568
|
|
|
1623
1569
|
await initAndAttach();
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
mockVideo.on['encrypted'](
|
|
1627
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1628
|
-
mockVideo.on['encrypted'](
|
|
1629
|
-
{initDataType: 'webm', initData: initData2, keyId: null});
|
|
1570
|
+
await sendEncryptedEvent('webm');
|
|
1571
|
+
await sendEncryptedEvent('cenc', new Uint8Array(2));
|
|
1630
1572
|
|
|
1631
1573
|
const message = new Uint8Array(0);
|
|
1632
1574
|
session1.on['message']({target: session1, message: message});
|
|
@@ -1647,12 +1589,8 @@ describe('DrmEngine', () => {
|
|
|
1647
1589
|
|
|
1648
1590
|
it('swallows errors when closing sessions', async () => {
|
|
1649
1591
|
await initAndAttach();
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
mockVideo.on['encrypted'](
|
|
1653
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1654
|
-
mockVideo.on['encrypted'](
|
|
1655
|
-
{initDataType: 'webm', initData: initData2, keyId: null});
|
|
1592
|
+
await sendEncryptedEvent('webm');
|
|
1593
|
+
await sendEncryptedEvent('cenc', new Uint8Array(2));
|
|
1656
1594
|
|
|
1657
1595
|
const message = new Uint8Array(0);
|
|
1658
1596
|
session1.on['message']({target: session1, message: message});
|
|
@@ -1668,12 +1606,8 @@ describe('DrmEngine', () => {
|
|
|
1668
1606
|
|
|
1669
1607
|
it('swallows errors when clearing MediaKeys', async () => {
|
|
1670
1608
|
await initAndAttach();
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
mockVideo.on['encrypted'](
|
|
1674
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1675
|
-
mockVideo.on['encrypted'](
|
|
1676
|
-
{initDataType: 'webm', initData: initData2, keyId: null});
|
|
1609
|
+
await sendEncryptedEvent('webm');
|
|
1610
|
+
await sendEncryptedEvent('cenc', new Uint8Array(2));
|
|
1677
1611
|
|
|
1678
1612
|
const message = new Uint8Array(0);
|
|
1679
1613
|
session1.on['message']({target: session1, message: message});
|
|
@@ -1752,6 +1686,14 @@ describe('DrmEngine', () => {
|
|
|
1752
1686
|
const p1 = new shaka.util.PublicPromise();
|
|
1753
1687
|
mockVideo.setMediaKeys.and.returnValue(p1);
|
|
1754
1688
|
|
|
1689
|
+
onErrorSpy.and.stub();
|
|
1690
|
+
|
|
1691
|
+
tweakDrmInfos((drmInfos) => {
|
|
1692
|
+
drmInfos[0].initData = [
|
|
1693
|
+
{initData: new Uint8Array(1), initDataType: 'cenc', keyId: null},
|
|
1694
|
+
];
|
|
1695
|
+
});
|
|
1696
|
+
|
|
1755
1697
|
const init = expectAsync(initAndAttach()).toBeRejected();
|
|
1756
1698
|
|
|
1757
1699
|
await shaka.test.Util.shortDelay();
|
|
@@ -1765,10 +1707,12 @@ describe('DrmEngine', () => {
|
|
|
1765
1707
|
const destroy = drmEngine.destroy();
|
|
1766
1708
|
const fail = async () => {
|
|
1767
1709
|
await shaka.test.Util.shortDelay();
|
|
1768
|
-
|
|
1710
|
+
shaka.log.warning('fail');
|
|
1711
|
+
p1.reject(new Error('titi'));
|
|
1769
1712
|
};
|
|
1770
1713
|
const success = async () => {
|
|
1771
1714
|
await shaka.test.Util.shortDelay();
|
|
1715
|
+
shaka.log.warning('success');
|
|
1772
1716
|
p2.resolve();
|
|
1773
1717
|
};
|
|
1774
1718
|
await Promise.all([init, destroy, fail(), success()]);
|
|
@@ -1780,6 +1724,12 @@ describe('DrmEngine', () => {
|
|
|
1780
1724
|
const p1 = new shaka.util.PublicPromise();
|
|
1781
1725
|
mockVideo.setMediaKeys.and.returnValue(p1);
|
|
1782
1726
|
|
|
1727
|
+
tweakDrmInfos((drmInfos) => {
|
|
1728
|
+
drmInfos[0].initData = [
|
|
1729
|
+
{initData: new Uint8Array(1), initDataType: 'cenc', keyId: null},
|
|
1730
|
+
];
|
|
1731
|
+
});
|
|
1732
|
+
|
|
1783
1733
|
const init = expectAsync(initAndAttach()).toBeRejected();
|
|
1784
1734
|
|
|
1785
1735
|
await shaka.test.Util.shortDelay();
|
|
@@ -1857,9 +1807,7 @@ describe('DrmEngine', () => {
|
|
|
1857
1807
|
session1.generateRequest.and.returnValue(p);
|
|
1858
1808
|
|
|
1859
1809
|
await initAndAttach();
|
|
1860
|
-
|
|
1861
|
-
mockVideo.on['encrypted'](
|
|
1862
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1810
|
+
await sendEncryptedEvent();
|
|
1863
1811
|
|
|
1864
1812
|
// We are now blocked on generateRequest:
|
|
1865
1813
|
expect(session1.generateRequest).toHaveBeenCalledTimes(1);
|
|
@@ -1878,9 +1826,7 @@ describe('DrmEngine', () => {
|
|
|
1878
1826
|
fakeNetEngine.request.and.returnValue(operation);
|
|
1879
1827
|
|
|
1880
1828
|
await initAndAttach();
|
|
1881
|
-
|
|
1882
|
-
mockVideo.on['encrypted'](
|
|
1883
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1829
|
+
await sendEncryptedEvent();
|
|
1884
1830
|
|
|
1885
1831
|
const message = new Uint8Array(0);
|
|
1886
1832
|
session1.on['message']({target: session1, message: message});
|
|
@@ -1909,9 +1855,7 @@ describe('DrmEngine', () => {
|
|
|
1909
1855
|
fakeNetEngine.request.and.returnValue(operation);
|
|
1910
1856
|
|
|
1911
1857
|
await initAndAttach();
|
|
1912
|
-
|
|
1913
|
-
mockVideo.on['encrypted'](
|
|
1914
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1858
|
+
await sendEncryptedEvent();
|
|
1915
1859
|
|
|
1916
1860
|
const message = new Uint8Array(0);
|
|
1917
1861
|
session1.on['message']({target: session1, message: message});
|
|
@@ -1939,9 +1883,7 @@ describe('DrmEngine', () => {
|
|
|
1939
1883
|
session1.update.and.returnValue(p);
|
|
1940
1884
|
|
|
1941
1885
|
await initAndAttach();
|
|
1942
|
-
|
|
1943
|
-
mockVideo.on['encrypted'](
|
|
1944
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1886
|
+
await sendEncryptedEvent();
|
|
1945
1887
|
|
|
1946
1888
|
const message = new Uint8Array(0);
|
|
1947
1889
|
session1.on['message']({target: session1, message: message});
|
|
@@ -1962,7 +1904,7 @@ describe('DrmEngine', () => {
|
|
|
1962
1904
|
// this doesn't work if the session is not callable (no license request
|
|
1963
1905
|
// sent). So |session.closed| should never resolve and |session.close()|
|
|
1964
1906
|
// should be rejected and destroy() should still succeed.
|
|
1965
|
-
// https://github.com/
|
|
1907
|
+
// https://github.com/shaka-project/shaka-player/issues/664
|
|
1966
1908
|
await initAndAttach();
|
|
1967
1909
|
session1.closed = new shaka.util.PublicPromise();
|
|
1968
1910
|
session2.closed = new shaka.util.PublicPromise();
|
|
@@ -1975,12 +1917,8 @@ describe('DrmEngine', () => {
|
|
|
1975
1917
|
session1.close.and.returnValue(rejected);
|
|
1976
1918
|
session2.close.and.returnValue(rejected);
|
|
1977
1919
|
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
mockVideo.on['encrypted'](
|
|
1981
|
-
{initDataType: 'webm', initData: initData1, keyId: null});
|
|
1982
|
-
mockVideo.on['encrypted'](
|
|
1983
|
-
{initDataType: 'webm', initData: initData2, keyId: null});
|
|
1920
|
+
await sendEncryptedEvent('webm');
|
|
1921
|
+
await sendEncryptedEvent('cenc', new Uint8Array(2));
|
|
1984
1922
|
|
|
1985
1923
|
// Still resolve these since we are mocking close and closed. This
|
|
1986
1924
|
// ensures DrmEngine is in the correct state.
|
|
@@ -2205,9 +2143,7 @@ describe('DrmEngine', () => {
|
|
|
2205
2143
|
mockVideo.paused = true;
|
|
2206
2144
|
|
|
2207
2145
|
await initAndAttach();
|
|
2208
|
-
|
|
2209
|
-
mockVideo.on['encrypted'](
|
|
2210
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
2146
|
+
await sendEncryptedEvent();
|
|
2211
2147
|
|
|
2212
2148
|
const operation = shaka.util.AbortableOperation.completed({});
|
|
2213
2149
|
fakeNetEngine.request.and.returnValue(operation);
|
|
@@ -2233,9 +2169,7 @@ describe('DrmEngine', () => {
|
|
|
2233
2169
|
mockVideo.paused = true;
|
|
2234
2170
|
|
|
2235
2171
|
await initAndAttach();
|
|
2236
|
-
|
|
2237
|
-
mockVideo.on['encrypted'](
|
|
2238
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
2172
|
+
await sendEncryptedEvent();
|
|
2239
2173
|
|
|
2240
2174
|
const operation = shaka.util.AbortableOperation.completed({});
|
|
2241
2175
|
fakeNetEngine.request.and.returnValue(operation);
|
|
@@ -2350,10 +2284,9 @@ describe('DrmEngine', () => {
|
|
|
2350
2284
|
session1.expiration = NaN;
|
|
2351
2285
|
|
|
2352
2286
|
await initAndAttach();
|
|
2353
|
-
|
|
2287
|
+
await sendEncryptedEvent();
|
|
2288
|
+
|
|
2354
2289
|
const message = new Uint8Array(0);
|
|
2355
|
-
mockVideo.on['encrypted'](
|
|
2356
|
-
{initDataType: 'webm', initData: initData, keyId: null});
|
|
2357
2290
|
session1.on['message']({target: session1, message: message});
|
|
2358
2291
|
session1.update.and.returnValue(Promise.resolve());
|
|
2359
2292
|
});
|
|
@@ -2516,4 +2449,17 @@ describe('DrmEngine', () => {
|
|
|
2516
2449
|
callback(manifest.variants[0].audio.drmInfos);
|
|
2517
2450
|
}
|
|
2518
2451
|
}
|
|
2452
|
+
|
|
2453
|
+
/**
|
|
2454
|
+
*
|
|
2455
|
+
* @param {string} initDataType
|
|
2456
|
+
* @param {Uint8Array} initData
|
|
2457
|
+
* @param {string|null} keyId
|
|
2458
|
+
*/
|
|
2459
|
+
async function sendEncryptedEvent(
|
|
2460
|
+
initDataType = 'cenc', initData = new Uint8Array(1), keyId = null) {
|
|
2461
|
+
mockVideo.on['encrypted']({initDataType, initData, keyId});
|
|
2462
|
+
|
|
2463
|
+
await Util.shortDelay();
|
|
2464
|
+
}
|
|
2519
2465
|
});
|
|
@@ -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});
|