shaka-player 4.6.4 → 4.7.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/README.md +1 -0
- package/dist/controls.css +1 -1
- package/dist/controls.css.map +1 -1
- package/dist/deps.js +9 -5
- package/dist/locales.js +29 -29
- package/dist/shaka-player.compiled.d.ts +46 -3
- package/dist/shaka-player.compiled.debug.d.ts +46 -3
- package/dist/shaka-player.compiled.debug.externs.js +45 -0
- package/dist/shaka-player.compiled.debug.js +382 -351
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +45 -0
- package/dist/shaka-player.compiled.js +1135 -1121
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +68 -4
- package/dist/shaka-player.ui.debug.d.ts +68 -4
- package/dist/shaka-player.ui.debug.externs.js +77 -0
- package/dist/shaka-player.ui.debug.js +428 -392
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +77 -0
- package/dist/shaka-player.ui.js +1304 -1290
- package/dist/shaka-player.ui.map +4 -4
- package/externs/mediasession.js +7 -0
- package/externs/shaka/abr_manager.js +8 -0
- package/externs/shaka/manifest.js +3 -3
- package/externs/shaka/player.js +59 -4
- package/lib/abr/simple_abr_manager.js +41 -15
- package/lib/cea/cea708_service.js +1 -1
- package/lib/cea/cea708_window.js +95 -7
- package/lib/dash/dash_parser.js +55 -11
- package/lib/media/adaptation_set_criteria.js +76 -10
- package/lib/media/media_source_engine.js +42 -18
- package/lib/media/segment_reference.js +12 -0
- package/lib/media/streaming_engine.js +55 -3
- package/lib/player.js +92 -6
- package/lib/util/cmsd_manager.js +269 -0
- package/lib/util/content_steering_manager.js +5 -1
- package/lib/util/mime_utils.js +6 -2
- package/lib/util/periods.js +108 -39
- package/lib/util/player_configuration.js +19 -5
- package/lib/util/stream_utils.js +82 -13
- package/package.json +1 -1
- package/ui/audio_language_selection.js +3 -0
- package/ui/controls.js +60 -0
- package/ui/externs/ui.js +12 -1
- package/ui/hidden_fast_forward_button.js +32 -0
- package/ui/hidden_rewind_button.js +32 -0
- package/ui/hidden_seek_button.js +121 -0
- package/ui/less/buttons.less +50 -0
- package/ui/less/containers.less +18 -0
- package/ui/resolution_selection.js +2 -0
- package/ui/ui.js +2 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -75
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
- package/.github/ISSUE_TEMPLATE/question.md +0 -26
- package/.github/config.yml +0 -1
- package/.github/workflows/appspot.yaml +0 -39
- package/.github/workflows/build-and-test.yaml +0 -222
- package/.github/workflows/compute-incremental-coverage.py +0 -265
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +0 -56
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +0 -37
- package/.github/workflows/deflake.yaml +0 -31
- package/.github/workflows/demo-version-index.yaml +0 -43
- package/.github/workflows/nightly-demo.yaml +0 -42
- package/.github/workflows/release-please.yaml +0 -193
- package/.github/workflows/report-incremental-coverage.yaml +0 -39
- package/.github/workflows/safari-homedir-launcher.sh +0 -18
- package/.github/workflows/selenium-lab-tests.yaml +0 -370
- package/.github/workflows/shaka-bot-commands/command-help.sh +0 -27
- package/.github/workflows/shaka-bot-commands/command-test.sh +0 -56
- package/.github/workflows/shaka-bot-commands/lib.sh +0 -83
- package/.github/workflows/shaka-bot-commands/main.sh +0 -51
- package/.github/workflows/sync-labels.yaml +0 -33
- package/.github/workflows/talk-to-shaka-bot.yaml +0 -29
- package/.github/workflows/update-issues.yaml +0 -31
- package/.github/workflows/update-screenshots.yaml +0 -142
- package/.github/workflows/validate-pr-title.yaml +0 -27
- package/CHANGELOG.md +0 -5774
- package/CODE_OF_CONDUCT.md +0 -93
- package/CONTRIBUTING.md +0 -76
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/app_logo_144.png +0 -0
- package/demo/app_logo_192.png +0 -0
- package/demo/app_logo_256.png +0 -0
- package/demo/app_logo_384.png +0 -0
- package/demo/app_logo_512.png +0 -0
- package/demo/app_manifest.json +0 -29
- package/demo/asset_card.js +0 -410
- package/demo/autoTemplate.txt +0 -61
- package/demo/cast_receiver/idle1.jpg +0 -0
- package/demo/cast_receiver/idle2.jpg +0 -0
- package/demo/cast_receiver/idle3.jpg +0 -0
- package/demo/cast_receiver/index.html +0 -75
- package/demo/cast_receiver/receiver_app.css +0 -111
- package/demo/cast_receiver/receiver_app.js +0 -158
- package/demo/close_button.js +0 -60
- package/demo/common/asset.js +0 -510
- package/demo/common/assets.js +0 -1634
- package/demo/config.js +0 -859
- package/demo/custom.js +0 -907
- package/demo/customWarning.txt +0 -8
- package/demo/demo.less +0 -591
- package/demo/demo_uncompiled.js +0 -11
- package/demo/demo_utils.js +0 -113
- package/demo/favicon.ico +0 -0
- package/demo/front.js +0 -156
- package/demo/icons/README.md +0 -4
- package/demo/icons/baseline-audiotrack-24px.svg +0 -1
- package/demo/icons/baseline-closed_caption-24px.svg +0 -1
- package/demo/icons/baseline-fast_forward-24px.svg +0 -1
- package/demo/icons/baseline-language-24px.svg +0 -1
- package/demo/icons/baseline-live_tv-24px.svg +0 -1
- package/demo/icons/baseline-subtitles-24px.svg +0 -1
- package/demo/icons/baseline-surround_sound-24px.svg +0 -1
- package/demo/icons/custom_ad.svg +0 -1
- package/demo/icons/custom_box_with_text.svg +0 -1
- package/demo/icons/custom_clear_key.svg +0 -1
- package/demo/icons/custom_high_definition.svg +0 -1
- package/demo/icons/custom_playready.svg +0 -1
- package/demo/icons/custom_ultra_high_definition.svg +0 -1
- package/demo/icons/custom_widevine.svg +0 -1
- package/demo/index.html +0 -173
- package/demo/input.js +0 -270
- package/demo/input_container.js +0 -218
- package/demo/load.js +0 -156
- package/demo/main.js +0 -1854
- package/demo/search.js +0 -452
- package/demo/service_worker.js +0 -355
- package/demo/shaka_logo_trans.png +0 -0
- package/demo/tooltip.js +0 -29
- package/demo/visualizer.js +0 -335
- package/demo/visualizer_button.js +0 -84
- package/dist/demo.compiled.debug.js +0 -340
- package/dist/demo.compiled.debug.map +0 -8
- package/dist/demo.compiled.js +0 -340
- package/dist/demo.compiled.map +0 -8
- package/dist/demo.css +0 -6
- package/dist/demo.css.map +0 -1
- package/dist/receiver.compiled.debug.js +0 -187
- package/dist/receiver.compiled.debug.map +0 -8
- package/dist/receiver.compiled.js +0 -187
- package/dist/receiver.compiled.map +0 -8
- package/docs/announcement-list-join-group.png +0 -0
- package/docs/api-mainpage.md +0 -28
- package/docs/design/REDESIGN.md +0 -283
- package/docs/design/architecture.md +0 -13
- package/docs/design/bg-fetch-after.gv +0 -29
- package/docs/design/bg-fetch-after.gv.png +0 -0
- package/docs/design/bg-fetch-before.gv +0 -18
- package/docs/design/bg-fetch-before.gv.png +0 -0
- package/docs/design/bg-fetch.md +0 -134
- package/docs/design/cast.gv +0 -35
- package/docs/design/cast.gv.png +0 -0
- package/docs/design/chromecast.md +0 -151
- package/docs/design/codec_preferences.md +0 -158
- package/docs/design/dash-audio-channels.md +0 -123
- package/docs/design/dash-manifests.md +0 -248
- package/docs/design/dash-timeline.svg +0 -4
- package/docs/design/dataflow.gv +0 -66
- package/docs/design/dataflow.gv.png +0 -0
- package/docs/design/export.md +0 -70
- package/docs/design/fuzzy-locale-matching.md +0 -40
- package/docs/design/gap-jumping.md +0 -151
- package/docs/design/lcevc-architecture.png +0 -0
- package/docs/design/lcevc-demo.png +0 -0
- package/docs/design/lcevc-integration.md +0 -72
- package/docs/design/locale_compatibility.svg +0 -1
- package/docs/design/locales_tree.svg +0 -1
- package/docs/design/localization-design-principles.md +0 -158
- package/docs/design/newdemo.gv +0 -83
- package/docs/design/newdemo.gv.png +0 -0
- package/docs/design/offline.gv +0 -43
- package/docs/design/offline.gv.png +0 -0
- package/docs/design/offline.md +0 -153
- package/docs/design/ownership.gv +0 -76
- package/docs/design/ownership.gv.png +0 -0
- package/docs/design/preload.md +0 -299
- package/docs/design/preload.png +0 -0
- package/docs/design/talking-about-languages.md +0 -46
- package/docs/design/timeline.svg +0 -152
- package/docs/design/ui.md +0 -31
- package/docs/design/ui_player_relationships.svg +0 -1
- package/docs/jsdoc-plugin.js +0 -74
- package/docs/jsdoc-template/README.md +0 -1
- package/docs/jsdoc-template/publish.js +0 -879
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docs/jsdoc-template/static/scripts/linenumber.js +0 -44
- package/docs/jsdoc-template/static/scripts/show-widget.js +0 -55
- package/docs/jsdoc-template/static/styles/jsdoc-default.css +0 -438
- package/docs/jsdoc-template/tmpl/augments.tmpl +0 -10
- package/docs/jsdoc-template/tmpl/container.tmpl +0 -205
- package/docs/jsdoc-template/tmpl/details.tmpl +0 -152
- package/docs/jsdoc-template/tmpl/example.tmpl +0 -2
- package/docs/jsdoc-template/tmpl/examples.tmpl +0 -13
- package/docs/jsdoc-template/tmpl/exceptions.tmpl +0 -32
- package/docs/jsdoc-template/tmpl/layout.tmpl +0 -50
- package/docs/jsdoc-template/tmpl/mainpage.tmpl +0 -14
- package/docs/jsdoc-template/tmpl/members.tmpl +0 -47
- package/docs/jsdoc-template/tmpl/method.tmpl +0 -140
- package/docs/jsdoc-template/tmpl/modifies.tmpl +0 -14
- package/docs/jsdoc-template/tmpl/params.tmpl +0 -131
- package/docs/jsdoc-template/tmpl/properties.tmpl +0 -125
- package/docs/jsdoc-template/tmpl/returns.tmpl +0 -19
- package/docs/jsdoc-template/tmpl/source.tmpl +0 -8
- package/docs/jsdoc-template/tmpl/tutorial.tmpl +0 -21
- package/docs/jsdoc-template/tmpl/type.tmpl +0 -7
- package/docs/jsdoc.conf.json +0 -38
- package/docs/shaka-player-logo.png +0 -0
- package/docs/style.md +0 -174
- package/docs/tutorials/a11y.md +0 -64
- package/docs/tutorials/ad_monetization.md +0 -292
- package/docs/tutorials/application-level-redirects.md +0 -94
- package/docs/tutorials/architecture.md +0 -32
- package/docs/tutorials/basic-usage.md +0 -89
- package/docs/tutorials/blob-url.md +0 -15
- package/docs/tutorials/config.md +0 -148
- package/docs/tutorials/debugging.md +0 -189
- package/docs/tutorials/drm-config.md +0 -274
- package/docs/tutorials/errors.md +0 -95
- package/docs/tutorials/fairplay.md +0 -242
- package/docs/tutorials/faq.md +0 -252
- package/docs/tutorials/index.json +0 -29
- package/docs/tutorials/lcevc.md +0 -118
- package/docs/tutorials/license-server-auth.md +0 -248
- package/docs/tutorials/license-wrapping.md +0 -168
- package/docs/tutorials/manifest-parser.md +0 -365
- package/docs/tutorials/network-and-buffering-config.md +0 -119
- package/docs/tutorials/offline.md +0 -683
- package/docs/tutorials/plugins.md +0 -184
- package/docs/tutorials/selenium-grid-config.md +0 -174
- package/docs/tutorials/service-worker.md +0 -106
- package/docs/tutorials/ui-customization.md +0 -288
- package/docs/tutorials/ui.md +0 -232
- package/docs/tutorials/upgrade-manifest.md +0 -281
- package/docs/tutorials/upgrade.md +0 -104
- package/docs/tutorials/welcome.md +0 -108
- package/docs/tutorials/widevine-service-certs.md +0 -45
- package/karma.conf.js +0 -879
- package/maintained-branches.md +0 -15
- package/roadmap.md +0 -186
- package/test/abr/simple_abr_manager_unit.js +0 -398
- package/test/ads/ad_manager_unit.js +0 -260
- package/test/assumptions/uint8_array_unit.js +0 -22
- package/test/cast/cast_proxy_unit.js +0 -736
- package/test/cast/cast_receiver_integration.js +0 -488
- package/test/cast/cast_receiver_unit.js +0 -1183
- package/test/cast/cast_sender_unit.js +0 -973
- package/test/cast/cast_utils_unit.js +0 -311
- package/test/cea/cea608_memory_unit.js +0 -411
- package/test/cea/cea708_service_unit.js +0 -674
- package/test/cea/cea708_window_unit.js +0 -373
- package/test/cea/cea_decoder_unit.js +0 -615
- package/test/cea/dtvcc_packet_builder_unit.js +0 -158
- package/test/cea/dtvcc_packet_unit.js +0 -60
- package/test/cea/mp4_cea_parser_unit.js +0 -127
- package/test/codec_switching/codec_switching_integration.js +0 -182
- package/test/dash/dash_parser_content_protection_unit.js +0 -998
- package/test/dash/dash_parser_integration.js +0 -74
- package/test/dash/dash_parser_live_unit.js +0 -1542
- package/test/dash/dash_parser_manifest_unit.js +0 -3121
- package/test/dash/dash_parser_segment_base_unit.js +0 -421
- package/test/dash/dash_parser_segment_list_unit.js +0 -380
- package/test/dash/dash_parser_segment_template_unit.js +0 -910
- package/test/dash/mpd_utils_unit.js +0 -794
- package/test/demo/demo_unit.js +0 -108
- package/test/deprecate/enforcer_unit.js +0 -74
- package/test/deprecate/version_unit.js +0 -57
- package/test/hls/hls_live_unit.js +0 -1330
- package/test/hls/hls_parser_unit.js +0 -5276
- package/test/hls/manifest_text_parser_unit.js +0 -545
- package/test/media/adaptation_set_criteria_unit.js +0 -806
- package/test/media/adaptation_set_unit.js +0 -229
- package/test/media/buffering_observer_unit.js +0 -143
- package/test/media/closed_caption_parser_unit.js +0 -18
- package/test/media/content_workarounds_unit.js +0 -43
- package/test/media/drm_engine_integration.js +0 -356
- package/test/media/drm_engine_unit.js +0 -2805
- package/test/media/media_source_engine_integration.js +0 -691
- package/test/media/media_source_engine_unit.js +0 -1512
- package/test/media/mp4_segment_index_parser_unit.js +0 -80
- package/test/media/play_rate_controller_unit.js +0 -69
- package/test/media/playhead_unit.js +0 -1394
- package/test/media/presentation_timeline_unit.js +0 -477
- package/test/media/quality_observer_unit.js +0 -138
- package/test/media/region_observer_unit.js +0 -374
- package/test/media/region_timeline_unit.js +0 -139
- package/test/media/segment_index_unit.js +0 -1080
- package/test/media/segment_prefetch_unit.js +0 -243
- package/test/media/segment_reference_unit.js +0 -63
- package/test/media/stall_detector_unit.js +0 -184
- package/test/media/streaming_engine_integration.js +0 -632
- package/test/media/streaming_engine_unit.js +0 -4211
- package/test/media/time_ranges_utils_unit.js +0 -123
- package/test/media/webm_segment_index_parser_unit.js +0 -90
- package/test/mss/mss_parser_content_protection_unit.js +0 -49
- package/test/mss/mss_parser_unit.js +0 -474
- package/test/mss/mss_player_integration.js +0 -124
- package/test/net/data_uri_plugin_unit.js +0 -105
- package/test/net/http_plugin_unit.js +0 -439
- package/test/net/networking_engine_unit.js +0 -1236
- package/test/net/networking_utils_unit.js +0 -37
- package/test/offline/download_progress_estimator_unit.js +0 -90
- package/test/offline/indexeddb_storage_unit.js +0 -192
- package/test/offline/manifest_convert_unit.js +0 -622
- package/test/offline/offline_integration.js +0 -168
- package/test/offline/offline_manifest_parser_unit.js +0 -231
- package/test/offline/offline_scheme_unit.js +0 -154
- package/test/offline/offline_uri_unit.js +0 -59
- package/test/offline/storage_compatibility_unit.js +0 -344
- package/test/offline/storage_integration.js +0 -1858
- package/test/player_external.js +0 -237
- package/test/player_integration.js +0 -1371
- package/test/player_load_graph_integration.js +0 -865
- package/test/player_src_equals_external.js +0 -154
- package/test/player_src_equals_integration.js +0 -527
- package/test/player_unit.js +0 -4434
- package/test/polyfill/media_capabilities_unit.js +0 -277
- package/test/polyfill/patchedmediakeys_apple_unit.js +0 -130
- package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
- package/test/test/assets/3675/dash_0.mpd +0 -30
- package/test/test/assets/3675/dash_1.mpd +0 -30
- package/test/test/assets/3675/dash_2.mpd +0 -30
- package/test/test/assets/3675/dash_3.mpd +0 -30
- package/test/test/assets/3675/dash_4.mpd +0 -30
- package/test/test/assets/3675/dash_5.mpd +0 -26
- package/test/test/assets/3675/init-stream0.m4s +0 -0
- package/test/test/assets/audio-xhe-aac.mp4 +0 -0
- package/test/test/assets/audio.ts +0 -0
- package/test/test/assets/captions-test.ts +0 -0
- package/test/test/assets/cea-init.mp4 +0 -0
- package/test/test/assets/cea-segment.mp4 +0 -0
- package/test/test/assets/chapters.srt +0 -11
- package/test/test/assets/chapters.vtt +0 -10
- package/test/test/assets/chapters2.vtt +0 -10
- 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 +0 -18
- package/test/test/assets/dash-aes-128/license +0 -1
- 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 +0 -32
- package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
- package/test/test/assets/db-dump-v1.json +0 -1
- package/test/test/assets/db-dump-v2-broken.json +0 -1
- package/test/test/assets/db-dump-v2-clean.json +0 -1
- package/test/test/assets/db-dump-v3.json +0 -1
- package/test/test/assets/db-dump-v4-broken.json +0 -1
- package/test/test/assets/db-dump-v5.json +0 -1
- package/test/test/assets/empty_caption_video_init.mp4 +0 -0
- package/test/test/assets/empty_caption_video_segment.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-audio-init.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-audio-segment.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-video-init.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-video-segment.mp4 +0 -0
- package/test/test/assets/green-pixel.mp4 +0 -0
- package/test/test/assets/green-pixel.txt +0 -15
- package/test/test/assets/h265-cea-init.mp4 +0 -0
- package/test/test/assets/h265-cea-segment.mp4 +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
- package/test/test/assets/hls-raw-aac/manifest.m3u8 +0 -4
- package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +0 -14
- package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +0 -31
- package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +0 -31
- package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +0 -13
- package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/playlist.m3u8 +0 -4
- package/test/test/assets/hls-ts-aac/playlist.m3u8 +0 -23
- package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
- package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +0 -19
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
- package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +0 -19
- package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
- package/test/test/assets/hls-ts-h264/prog_index.m3u8 +0 -25
- package/test/test/assets/hls-ts-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-h265/hevc.m3u8 +0 -6
- package/test/test/assets/hls-ts-h265/index.m3u8 +0 -7
- package/test/test/assets/hls-ts-mp3/manifest.m3u8 +0 -13
- package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +0 -17
- package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +0 -4
- 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 +0 -9
- package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +0 -24
- 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 +0 -14
- package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +0 -23
- 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/assets/id3-metadata.aac +0 -0
- package/test/test/assets/id3-metadata.ts +0 -0
- package/test/test/assets/index-segment.mp4 +0 -0
- package/test/test/assets/index-segment.webm +0 -0
- package/test/test/assets/init-segment.webm +0 -0
- package/test/test/assets/large_file.mpd +0 -4930
- package/test/test/assets/multidrm-audio-init.mp4 +0 -0
- package/test/test/assets/multidrm-audio-segment.mp4 +0 -0
- package/test/test/assets/multidrm-video-init.mp4 +0 -0
- package/test/test/assets/multidrm-video-segment.mp4 +0 -0
- package/test/test/assets/multiple-trun-init.mp4 +0 -0
- package/test/test/assets/multiple-trun-segment.mp4 +0 -0
- package/test/test/assets/sintel-audio-init.mp4 +0 -0
- package/test/test/assets/sintel-audio-segment.mp4 +0 -0
- package/test/test/assets/sintel-video-init.mp4 +0 -0
- package/test/test/assets/sintel-video-segment.mp4 +0 -0
- package/test/test/assets/small.mp4 +0 -0
- package/test/test/assets/text-clip-alt.vtt +0 -63
- package/test/test/assets/text-clip.vtt +0 -63
- package/test/test/assets/thumbnails-sprites.vtt +0 -10
- package/test/test/assets/thumbnails.vtt +0 -10
- package/test/test/assets/ttml-init.mp4 +0 -0
- package/test/test/assets/ttml-segment-multiplemdat.mp4 +0 -0
- package/test/test/assets/ttml-segment.mp4 +0 -0
- package/test/test/assets/video.ts +0 -0
- package/test/test/assets/vtt-init.mp4 +0 -0
- package/test/test/assets/vtt-segment-multi-payload.mp4 +0 -0
- package/test/test/assets/vtt-segment-no-duration.mp4 +0 -0
- package/test/test/assets/vtt-segment-settings.mp4 +0 -0
- package/test/test/assets/vtt-segment.mp4 +0 -0
- package/test/test/boot.js +0 -495
- package/test/test/externs/filters.js +0 -44
- package/test/test/externs/fontfaceonload.js +0 -29
- package/test/test/externs/jasmine.js +0 -670
- package/test/test/externs/karma.js +0 -26
- package/test/test/externs/require.js +0 -21
- package/test/test/externs/sprintf.js +0 -18
- package/test/test/namespace.js +0 -10
- package/test/test/util/canned_idb.js +0 -379
- package/test/test/util/cea_utils.js +0 -60
- package/test/test/util/dash_parser_util.js +0 -329
- package/test/test/util/fake_ad.js +0 -321
- package/test/test/util/fake_ad_manager.js +0 -122
- package/test/test/util/fake_demo_main.js +0 -144
- package/test/test/util/fake_drm_engine.js +0 -103
- package/test/test/util/fake_media_source_engine.js +0 -464
- package/test/test/util/fake_networking_engine.js +0 -381
- package/test/test/util/fake_segment_prefetch.js +0 -84
- package/test/test/util/fake_text_displayer.js +0 -60
- package/test/test/util/id3_generator.js +0 -100
- package/test/test/util/indexeddb_utils.js +0 -124
- package/test/test/util/jasmine_fetch.js +0 -382
- package/test/test/util/layout_tests.js +0 -435
- package/test/test/util/loader.js +0 -88
- package/test/test/util/manifest_generator.js +0 -705
- package/test/test/util/manifest_parser_util.js +0 -101
- package/test/test/util/mss_parser_util.js +0 -119
- package/test/test/util/offline_utils.js +0 -105
- package/test/test/util/simple_fakes.js +0 -535
- package/test/test/util/stream_generator.js +0 -676
- package/test/test/util/streaming_engine_util.js +0 -506
- package/test/test/util/test_scheme.js +0 -778
- package/test/test/util/ttml_utils.js +0 -77
- package/test/test/util/ui_utils.js +0 -183
- package/test/test/util/util.js +0 -374
- package/test/test/util/waiter.js +0 -406
- package/test/text/cue_integration.js +0 -51
- package/test/text/lrc_text_parser_unit.js +0 -98
- package/test/text/mp4_ttml_parser_unit.js +0 -171
- package/test/text/mp4_vtt_parser_unit.js +0 -195
- package/test/text/sbv_text_parser_unit.js +0 -81
- package/test/text/simple_text_displayer_unit.js +0 -468
- package/test/text/srt_text_parser_unit.js +0 -163
- package/test/text/ssa_text_parser_unit.js +0 -382
- package/test/text/text_displayer_layout_unit.js +0 -323
- package/test/text/text_engine_unit.js +0 -500
- package/test/text/text_track_integration.js +0 -186
- package/test/text/ttml_text_parser_unit.js +0 -2176
- package/test/text/ui_text_displayer_unit.js +0 -608
- package/test/text/vtt_text_parser_unit.js +0 -1363
- package/test/text/web_vtt_generator_unit.js +0 -144
- package/test/text/web_vtt_layout_integration.js +0 -524
- package/test/transmuxer/transmuxer_engine_integration.js +0 -69
- package/test/transmuxer/transmuxer_integration.js +0 -443
- package/test/ui/ad_ui_unit.js +0 -369
- package/test/ui/localization_unit.js +0 -508
- package/test/ui/ui_customization_unit.js +0 -208
- package/test/ui/ui_integration.js +0 -669
- package/test/ui/ui_unit.js +0 -902
- package/test/util/abortable_operation_unit.js +0 -624
- package/test/util/array_utils_unit.js +0 -58
- package/test/util/buffer_utils_unit.js +0 -185
- package/test/util/cmcd_manager_unit.js +0 -440
- package/test/util/content_steering_manager_unit.js +0 -427
- package/test/util/data_view_reader_unit.js +0 -254
- package/test/util/ebml_parser_unit.js +0 -297
- package/test/util/event_manager_unit.js +0 -185
- package/test/util/fake_event_target_unit.js +0 -123
- package/test/util/id3_utils_unit.js +0 -168
- package/test/util/iterables_unit.js +0 -68
- package/test/util/language_utils_unit.js +0 -240
- package/test/util/manifest_parser_utils_unit.js +0 -55
- package/test/util/mime_utils_unit.js +0 -64
- package/test/util/mp4_box_parsers_unit.js +0 -246
- package/test/util/mp4_parser_unit.js +0 -373
- package/test/util/multi_map_unit.js +0 -94
- package/test/util/object_utils_unit.js +0 -79
- package/test/util/periods_unit.js +0 -1623
- package/test/util/pssh_unit.js +0 -226
- package/test/util/state_history_unit.js +0 -101
- package/test/util/stream_utils_unit.js +0 -1068
- package/test/util/string_utils_unit.js +0 -166
- package/test/util/text_parser_unit.js +0 -165
- package/test/util/ts_parser_unit.js +0 -77
- package/test/util/xml_utils_unit.js +0 -444
package/test/test/util/waiter.js
DELETED
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
/*! @license
|
|
2
|
-
* Shaka Player
|
|
3
|
-
* Copyright 2016 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
shaka.test.Waiter = class {
|
|
8
|
-
/** @param {!shaka.util.EventManager} eventManager */
|
|
9
|
-
constructor(eventManager) {
|
|
10
|
-
/** @private {shaka.util.EventManager} */
|
|
11
|
-
this.eventManager_ = eventManager;
|
|
12
|
-
|
|
13
|
-
/** @private {boolean} */
|
|
14
|
-
this.failOnTimeout_ = true;
|
|
15
|
-
|
|
16
|
-
/** @private {number} */
|
|
17
|
-
this.timeoutSeconds_ = 5;
|
|
18
|
-
|
|
19
|
-
/** @private {shaka.Player} */
|
|
20
|
-
this.player_ = null;
|
|
21
|
-
|
|
22
|
-
/** @private {shaka.media.MediaSourceEngine} */
|
|
23
|
-
this.mediaSourceEngine_ = null;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// TODO: Consider replacing this with a settings argument on the individual
|
|
27
|
-
// waiters, or resetting these settings after each wait.
|
|
28
|
-
/**
|
|
29
|
-
* Change the timeout time for subsequent wait operations.
|
|
30
|
-
*
|
|
31
|
-
* @param {number} timeoutSeconds
|
|
32
|
-
* @return {!shaka.test.Waiter}
|
|
33
|
-
*/
|
|
34
|
-
timeoutAfter(timeoutSeconds) {
|
|
35
|
-
this.timeoutSeconds_ = timeoutSeconds;
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// TODO: Consider replacing this with a settings argument on the individual
|
|
40
|
-
// waiters, or resetting these settings after each wait.
|
|
41
|
-
/**
|
|
42
|
-
* Change the timeout behavior (pass or fail) for subsequent wait operations.
|
|
43
|
-
*
|
|
44
|
-
* @param {boolean} shouldFailOnTimeout
|
|
45
|
-
* @return {!shaka.test.Waiter}
|
|
46
|
-
*/
|
|
47
|
-
failOnTimeout(shouldFailOnTimeout) {
|
|
48
|
-
this.failOnTimeout_ = shouldFailOnTimeout;
|
|
49
|
-
return this;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* For tests with access to MediaSourceEngine, this can provide better
|
|
54
|
-
* debugging for buffered ranges on failure.
|
|
55
|
-
*
|
|
56
|
-
* @param {shaka.Player} player
|
|
57
|
-
* @return {!shaka.test.Waiter}
|
|
58
|
-
*/
|
|
59
|
-
setPlayer(player) {
|
|
60
|
-
this.player_ = player;
|
|
61
|
-
return this;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* For tests with access to MediaSourceEngine, this can provide better
|
|
66
|
-
* debugging for buffered ranges on failure.
|
|
67
|
-
*
|
|
68
|
-
* @param {shaka.media.MediaSourceEngine} mediaSourceEngine
|
|
69
|
-
* @return {!shaka.test.Waiter}
|
|
70
|
-
*/
|
|
71
|
-
setMediaSourceEngine(mediaSourceEngine) {
|
|
72
|
-
this.mediaSourceEngine_ = mediaSourceEngine;
|
|
73
|
-
return this;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Wait for the video playhead to move forward by some meaningful delta. The
|
|
78
|
-
* Promise is resolved when the playhead moves or the video ends.
|
|
79
|
-
*
|
|
80
|
-
* @param {!HTMLMediaElement} mediaElement
|
|
81
|
-
* @return {!Promise}
|
|
82
|
-
*/
|
|
83
|
-
waitForMovement(mediaElement) {
|
|
84
|
-
console.assert(!mediaElement.ended, 'Video should not be ended!');
|
|
85
|
-
const timeGoal = mediaElement.currentTime + 1;
|
|
86
|
-
return this.waitUntilPlayheadReaches(mediaElement, timeGoal);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Wait for the video playhead to move forward by some meaningful delta.
|
|
91
|
-
* If this happens before |timeout| seconds pass, the Promise is resolved.
|
|
92
|
-
* Otherwise, the Promise is rejected.
|
|
93
|
-
*
|
|
94
|
-
* @param {!HTMLMediaElement} target
|
|
95
|
-
* @param {number} timeout in seconds, after which the Promise fails
|
|
96
|
-
* @return {!Promise}
|
|
97
|
-
*/
|
|
98
|
-
waitForMovementOrFailOnTimeout(target, timeout) {
|
|
99
|
-
this.timeoutAfter(timeout).failOnTimeout(true);
|
|
100
|
-
return this.waitForMovement(target);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Wait for the video playhead to reach a certain target time.
|
|
105
|
-
* Promise is resolved when the playhead reaches |timeGoal| or the video ends.
|
|
106
|
-
*
|
|
107
|
-
* @param {!HTMLMediaElement} mediaElement
|
|
108
|
-
* @param {number} timeGoal
|
|
109
|
-
* @return {!Promise}
|
|
110
|
-
*/
|
|
111
|
-
waitUntilPlayheadReaches(mediaElement, timeGoal) {
|
|
112
|
-
this.macPlaybackWorkaround_(mediaElement);
|
|
113
|
-
|
|
114
|
-
// The name of what we're waiting for
|
|
115
|
-
const goalName = 'movement from ' + mediaElement.currentTime +
|
|
116
|
-
' to ' + timeGoal;
|
|
117
|
-
|
|
118
|
-
// The conditions for success
|
|
119
|
-
const p = new Promise((resolve) => {
|
|
120
|
-
this.eventManager_.listen(mediaElement, 'timeupdate', () => {
|
|
121
|
-
if (mediaElement.currentTime >= timeGoal || mediaElement.ended) {
|
|
122
|
-
this.eventManager_.unlisten(mediaElement, 'timeupdate');
|
|
123
|
-
resolve();
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
// The cleanup on timeout
|
|
129
|
-
const cleanup = () => {
|
|
130
|
-
this.eventManager_.unlisten(mediaElement, 'timeupdate');
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Wait for the video playhead to reach a certain target time.
|
|
138
|
-
* If the playhead reaches |timeGoal| or the video ends before |timeout|
|
|
139
|
-
* seconds pass, the Promise is resolved.
|
|
140
|
-
* Otherwise, the Promise is rejected.
|
|
141
|
-
* @param {!HTMLMediaElement} mediaElement
|
|
142
|
-
* @param {number} timeGoal The time to wait for the playhead to reach.
|
|
143
|
-
* @param {number} timeout Timeout in seconds, after which the Promise fails.
|
|
144
|
-
* @return {!Promise}
|
|
145
|
-
*/
|
|
146
|
-
waitUntilPlayheadReachesOrFailOnTimeout(mediaElement, timeGoal, timeout) {
|
|
147
|
-
this.timeoutAfter(timeout).failOnTimeout(true);
|
|
148
|
-
return this.waitUntilPlayheadReaches(mediaElement, timeGoal);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Wait for the video to end.
|
|
153
|
-
*
|
|
154
|
-
* @param {!HTMLMediaElement} mediaElement
|
|
155
|
-
* @return {!Promise}
|
|
156
|
-
*/
|
|
157
|
-
waitForEnd(mediaElement) {
|
|
158
|
-
this.macPlaybackWorkaround_(mediaElement);
|
|
159
|
-
|
|
160
|
-
// The name of what we're waiting for.
|
|
161
|
-
const goalName = 'end of media';
|
|
162
|
-
|
|
163
|
-
// The conditions for success. Don't rely on either time, or the ended
|
|
164
|
-
// flag, or the ended event, specifically. Any of these is sufficient.
|
|
165
|
-
// This flexibility cuts down on test flake on Safari (currently 14) in
|
|
166
|
-
// particular, where the flag might be set, but the ended event did not
|
|
167
|
-
// fire. We also see flake on Firefox (currently 99), where test playbacks
|
|
168
|
-
// sometimes stop right before duration is reached. (Duration 60.01, audio
|
|
169
|
-
// buffered to 60.01, video buffered to exactly 60.)
|
|
170
|
-
const hasEnded = () => {
|
|
171
|
-
return mediaElement.currentTime >= mediaElement.duration - 0.1 ||
|
|
172
|
-
mediaElement.ended;
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
if (hasEnded()) {
|
|
176
|
-
return Promise.resolve();
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Cleanup on timeout.
|
|
180
|
-
let timer = null;
|
|
181
|
-
const cleanup = () => {
|
|
182
|
-
if (timer) {
|
|
183
|
-
timer.stop();
|
|
184
|
-
}
|
|
185
|
-
this.eventManager_.unlisten(mediaElement, 'timeupdate');
|
|
186
|
-
this.eventManager_.unlisten(mediaElement, 'ended');
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const p = new Promise((resolve) => {
|
|
190
|
-
const check = () => {
|
|
191
|
-
if (hasEnded()) {
|
|
192
|
-
cleanup();
|
|
193
|
-
resolve();
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
// In Firefox 99, there appears to be some bug in the browser preventing
|
|
198
|
-
// events from being triggered at the end of the presentation. So we
|
|
199
|
-
// check for the end once per second. Without this, StreamingEngine
|
|
200
|
-
// integration tests were failing.
|
|
201
|
-
timer = new shaka.util.Timer(check);
|
|
202
|
-
timer.tickEvery(/* seconds= */ 1);
|
|
203
|
-
this.eventManager_.listen(mediaElement, 'timeupdate', check);
|
|
204
|
-
this.eventManager_.listen(mediaElement, 'ended', check);
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Wait for the video to end or for |timeout| seconds to pass, whichever
|
|
212
|
-
* occurs first. The Promise is resolved when either of these happens.
|
|
213
|
-
*
|
|
214
|
-
* @param {!HTMLMediaElement} mediaElement
|
|
215
|
-
* @param {number} timeout in seconds, after which the Promise succeeds
|
|
216
|
-
* @return {!Promise}
|
|
217
|
-
*/
|
|
218
|
-
waitForEndOrTimeout(mediaElement, timeout) {
|
|
219
|
-
this.failOnTimeout(false).timeoutAfter(timeout);
|
|
220
|
-
return this.waitForEnd(mediaElement);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Wait until a certain amount of content is buffered.
|
|
225
|
-
*
|
|
226
|
-
* @param {!HTMLMediaElement} mediaElement
|
|
227
|
-
* @param {number} bufferingGoal in seconds, after which the Promise succeeds
|
|
228
|
-
* @return {!Promise}
|
|
229
|
-
*/
|
|
230
|
-
waitUntilBuffered(mediaElement, bufferingGoal) {
|
|
231
|
-
// The name of what we're waiting for.
|
|
232
|
-
const goalName = `${bufferingGoal} seconds buffered`;
|
|
233
|
-
|
|
234
|
-
// The conditions for success.
|
|
235
|
-
const bufferedEnough = () => {
|
|
236
|
-
const end = shaka.media.TimeRangesUtils.bufferEnd(mediaElement.buffered);
|
|
237
|
-
if (end == null) {
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
return end - mediaElement.currentTime >= bufferingGoal;
|
|
241
|
-
};
|
|
242
|
-
|
|
243
|
-
if (bufferedEnough()) {
|
|
244
|
-
return Promise.resolve();
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// Cleanup on timeout.
|
|
248
|
-
let timer = null;
|
|
249
|
-
const cleanup = () => {
|
|
250
|
-
if (timer) {
|
|
251
|
-
timer.stop();
|
|
252
|
-
}
|
|
253
|
-
this.eventManager_.unlisten(mediaElement, 'timeupdate');
|
|
254
|
-
this.eventManager_.unlisten(mediaElement, 'ended');
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
const p = new Promise((resolve) => {
|
|
258
|
-
const check = () => {
|
|
259
|
-
if (bufferedEnough()) {
|
|
260
|
-
cleanup();
|
|
261
|
-
resolve();
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
timer = new shaka.util.Timer(check);
|
|
266
|
-
timer.tickEvery(/* seconds= */ 1);
|
|
267
|
-
this.eventManager_.listen(mediaElement, 'timeupdate', check);
|
|
268
|
-
this.eventManager_.listen(mediaElement, 'ended', check);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Wait for the given event.
|
|
276
|
-
*
|
|
277
|
-
* @param {!EventTarget} target
|
|
278
|
-
* @param {string} eventName
|
|
279
|
-
* @return {!Promise}
|
|
280
|
-
*/
|
|
281
|
-
waitForEvent(target, eventName) {
|
|
282
|
-
// The name of what we're waiting for
|
|
283
|
-
const goalName = 'event ' + eventName;
|
|
284
|
-
|
|
285
|
-
// The conditions for success
|
|
286
|
-
const p = new Promise((resolve) => {
|
|
287
|
-
this.eventManager_.listenOnce(target, eventName, resolve);
|
|
288
|
-
});
|
|
289
|
-
|
|
290
|
-
// The cleanup on timeout
|
|
291
|
-
const cleanup = () => {
|
|
292
|
-
this.eventManager_.unlisten(target, eventName);
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
return this.waitUntilGeneric_(goalName, p, cleanup, target);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* Wait for a certain Promise to be resolved, or throw on timeout.
|
|
300
|
-
*
|
|
301
|
-
* @param {!Promise} p
|
|
302
|
-
* @param {string} label A name to give the Promise in error messages.
|
|
303
|
-
* @return {!Promise}
|
|
304
|
-
*/
|
|
305
|
-
waitForPromise(p, label) {
|
|
306
|
-
const cleanup = () => {};
|
|
307
|
-
const target = null;
|
|
308
|
-
return this.waitUntilGeneric_(label, p, cleanup, target);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Wait for a certain Promise to be resolved, or throw on timeout.
|
|
313
|
-
* Handles all debug logging and timeouts generically.
|
|
314
|
-
*
|
|
315
|
-
* @param {string} goalName
|
|
316
|
-
* @param {!Promise} p
|
|
317
|
-
* @param {function()} cleanupOnTimeout
|
|
318
|
-
* @param {EventTarget} target
|
|
319
|
-
* @return {!Promise}
|
|
320
|
-
* @private
|
|
321
|
-
*/
|
|
322
|
-
waitUntilGeneric_(goalName, p, cleanupOnTimeout, target) {
|
|
323
|
-
let goalMet = false;
|
|
324
|
-
const startTime = Date.now();
|
|
325
|
-
shaka.log.debug('Waiting for ' + goalName);
|
|
326
|
-
|
|
327
|
-
// Cache the value of this when we start, in case it changes during the
|
|
328
|
-
// async work below.
|
|
329
|
-
const failOnTimeout = this.failOnTimeout_;
|
|
330
|
-
|
|
331
|
-
// The original stacktrace will be lost if we create the Error in the
|
|
332
|
-
// timeout callback below. Create the Error now so that it has a more
|
|
333
|
-
// useful stacktrace on timeout.
|
|
334
|
-
const error = new Error('Timeout waiting for ' + goalName);
|
|
335
|
-
|
|
336
|
-
const success = p.then(() => {
|
|
337
|
-
goalMet = true;
|
|
338
|
-
const endTime = Date.now();
|
|
339
|
-
const seconds = ((endTime - startTime) / 1000).toFixed(2);
|
|
340
|
-
shaka.log.debug(goalName + ' after ' + seconds + ' seconds');
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
const timeout = shaka.test.Util.delay(this.timeoutSeconds_).then(() => {
|
|
344
|
-
// Avoid error logs and cleanup callback if we've already met the goal.
|
|
345
|
-
if (goalMet) {
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
cleanupOnTimeout();
|
|
350
|
-
|
|
351
|
-
// Improve the error message with media-specific debug info.
|
|
352
|
-
if (target instanceof HTMLMediaElement) {
|
|
353
|
-
this.logDebugInfoForMedia_(error, target);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// Reject or resolve based on our settings.
|
|
357
|
-
if (failOnTimeout) {
|
|
358
|
-
throw error;
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
return Promise.race([success, timeout]);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
/**
|
|
366
|
-
* @param {!Error} error
|
|
367
|
-
* @param {!HTMLMediaElement} mediaElement
|
|
368
|
-
* @private
|
|
369
|
-
*/
|
|
370
|
-
logDebugInfoForMedia_(error, mediaElement) {
|
|
371
|
-
let buffered;
|
|
372
|
-
if (this.player_) {
|
|
373
|
-
buffered = this.player_.getBufferedInfo();
|
|
374
|
-
} else if (this.mediaSourceEngine_) {
|
|
375
|
-
buffered = this.mediaSourceEngine_.getBufferedInfo();
|
|
376
|
-
} else {
|
|
377
|
-
buffered = shaka.media.TimeRangesUtils.getBufferedInfo(
|
|
378
|
-
mediaElement.buffered);
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
error.message += '\n' +
|
|
382
|
-
`current time: ${mediaElement.currentTime}\n` +
|
|
383
|
-
`duration: ${mediaElement.duration}\n` +
|
|
384
|
-
`ready state: ${mediaElement.readyState}\n` +
|
|
385
|
-
`playback rate: ${mediaElement.playbackRate}\n` +
|
|
386
|
-
`paused: ${mediaElement.paused}\n` +
|
|
387
|
-
`ended: ${mediaElement.ended}\n` +
|
|
388
|
-
`buffered: ${JSON.stringify(buffered)}\n`;
|
|
389
|
-
shaka.log.error(error.message);
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
/**
|
|
393
|
-
* @param {!HTMLMediaElement} mediaElement
|
|
394
|
-
* @private
|
|
395
|
-
*/
|
|
396
|
-
macPlaybackWorkaround_(mediaElement) {
|
|
397
|
-
if (shaka.util.Platform.isMac()) {
|
|
398
|
-
// Work around bizarre playback slowdowns that only seem to occur with
|
|
399
|
-
// WebDriver and only on Mac. Increasing the playback rate allows tests
|
|
400
|
-
// to complete without timing out.
|
|
401
|
-
if (mediaElement.playbackRate == 1) {
|
|
402
|
-
mediaElement.playbackRate = 2;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/*! @license
|
|
2
|
-
* Shaka Player
|
|
3
|
-
* Copyright 2016 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
describe('Cue', () => {
|
|
8
|
-
// This integration test checks platform support for various cue scenarios
|
|
9
|
-
// that have caused platform-specific issues. The unit tests for each parser
|
|
10
|
-
// use a mocked VTTCue implementation, so they do not find platform issues.
|
|
11
|
-
|
|
12
|
-
// The scenarios under test are not specific to WebVTT, but WebVTT is used to
|
|
13
|
-
// exercise the platform's native cues and ensure that no errors occur.
|
|
14
|
-
|
|
15
|
-
it('handles offsets', () => {
|
|
16
|
-
// Offsets must be handled early.
|
|
17
|
-
// See issue #502
|
|
18
|
-
const cues = parseVtt(
|
|
19
|
-
'WEBVTT\n\n' +
|
|
20
|
-
'00:00:20.000 --> 00:00:40.000\n' +
|
|
21
|
-
'Test',
|
|
22
|
-
{periodStart: 7, segmentStart: 10, segmentEnd: 60, vttOffset: 7});
|
|
23
|
-
expect(cues.length).toBe(1);
|
|
24
|
-
expect(cues[0].startTime).toBe(27);
|
|
25
|
-
expect(cues[0].endTime).toBe(47);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('does not object to extra settings', () => {
|
|
29
|
-
// To simplify refactoring, we are no longer checking for VTTCue before
|
|
30
|
-
// setting properties that only exist on VTTCue. So we want to ensure that
|
|
31
|
-
// errors are not thrown when the extra settings are assigned.
|
|
32
|
-
const cues = parseVtt(
|
|
33
|
-
'WEBVTT\n\n' +
|
|
34
|
-
'ID1\n' +
|
|
35
|
-
'00:00:20.000 --> 00:00:40.000 align:middle size:56% vertical:lr\n' +
|
|
36
|
-
'Test',
|
|
37
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
38
|
-
expect(cues.length).toBe(1);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @param {string} text
|
|
43
|
-
* @param {!shaka.extern.TextParser.TimeContext} time
|
|
44
|
-
* @return {!Array.<!shaka.text.Cue>}
|
|
45
|
-
*/
|
|
46
|
-
function parseVtt(text, time) {
|
|
47
|
-
const data =
|
|
48
|
-
shaka.util.BufferUtils.toUint8(shaka.util.StringUtils.toUTF8(text));
|
|
49
|
-
return new shaka.text.VttTextParser().parseMedia(data, time);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/*! @license
|
|
2
|
-
* Shaka Player
|
|
3
|
-
* Copyright 2016 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
describe('LrcTextParser', () => {
|
|
8
|
-
it('supports no cues', () => {
|
|
9
|
-
verifyHelper([],
|
|
10
|
-
'',
|
|
11
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('handles a blank line at the start of the file', () => {
|
|
15
|
-
verifyHelper(
|
|
16
|
-
[
|
|
17
|
-
{startTime: 0, endTime: 2, payload: 'Test'},
|
|
18
|
-
],
|
|
19
|
-
'\n\n' +
|
|
20
|
-
'[00:00.00]Test',
|
|
21
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('handles a blank line at the end of the file', () => {
|
|
25
|
-
verifyHelper(
|
|
26
|
-
[
|
|
27
|
-
{startTime: 0, endTime: 2, payload: 'Test'},
|
|
28
|
-
],
|
|
29
|
-
'[00:00.00]Test' +
|
|
30
|
-
'\n\n',
|
|
31
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('handles no blank line at the end of the file', () => {
|
|
35
|
-
verifyHelper(
|
|
36
|
-
[
|
|
37
|
-
{startTime: 0, endTime: 2, payload: 'Test'},
|
|
38
|
-
],
|
|
39
|
-
'[00:00.00]Test',
|
|
40
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('supports multiple cues', () => {
|
|
44
|
-
verifyHelper(
|
|
45
|
-
[
|
|
46
|
-
{startTime: 0, endTime: 10, payload: 'Test'},
|
|
47
|
-
{startTime: 10, endTime: 20, payload: 'Test2'},
|
|
48
|
-
{startTime: 20, endTime: 22, payload: 'Test3'},
|
|
49
|
-
],
|
|
50
|
-
'[00:00.00]Test\n' +
|
|
51
|
-
'[00:10.00]Test2\n' +
|
|
52
|
-
'[00:20.00]Test3',
|
|
53
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('supports different time formats', () => {
|
|
57
|
-
verifyHelper(
|
|
58
|
-
[
|
|
59
|
-
{startTime: 0.1, endTime: 10.001, payload: 'Test'},
|
|
60
|
-
{startTime: 10.001, endTime: 20.02, payload: 'Test2'},
|
|
61
|
-
{startTime: 20.02, endTime: 30.1, payload: 'Test3'},
|
|
62
|
-
{startTime: 30.1, endTime: 40.001, payload: 'Test4'},
|
|
63
|
-
{startTime: 40.001, endTime: 50.02, payload: 'Test5'},
|
|
64
|
-
{startTime: 50.02, endTime: 52.02, payload: 'Test6'},
|
|
65
|
-
],
|
|
66
|
-
'[00:00.1]Test\n' +
|
|
67
|
-
'[00:10.001]Test2\n' +
|
|
68
|
-
'[00:20.02]Test3\n' +
|
|
69
|
-
'[00:30,1]Test4\n' +
|
|
70
|
-
'[00:40,001]Test5\n' +
|
|
71
|
-
'[00:50,02]Test6',
|
|
72
|
-
{periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* @param {!Array} cues
|
|
77
|
-
* @param {string} text
|
|
78
|
-
* @param {shaka.extern.TextParser.TimeContext} time
|
|
79
|
-
*/
|
|
80
|
-
function verifyHelper(cues, text, time) {
|
|
81
|
-
const BufferUtils = shaka.util.BufferUtils;
|
|
82
|
-
const StringUtils = shaka.util.StringUtils;
|
|
83
|
-
|
|
84
|
-
const data = BufferUtils.toUint8(StringUtils.toUTF8(text));
|
|
85
|
-
|
|
86
|
-
const parser = new shaka.text.LrcTextParser();
|
|
87
|
-
const result = parser.parseMedia(data, time);
|
|
88
|
-
|
|
89
|
-
const expected = cues.map((cue) => {
|
|
90
|
-
if (cue.nestedCues) {
|
|
91
|
-
cue.nestedCues = cue.nestedCues.map(
|
|
92
|
-
(nestedCue) => jasmine.objectContaining(nestedCue));
|
|
93
|
-
}
|
|
94
|
-
return jasmine.objectContaining(cue);
|
|
95
|
-
});
|
|
96
|
-
expect(result).toEqual(expected);
|
|
97
|
-
}
|
|
98
|
-
});
|