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
|
@@ -58,8 +58,10 @@ shaka.media.ExampleBasedCriteria = class {
|
|
|
58
58
|
// We can't know if role and label are really important, so we don't use
|
|
59
59
|
// role and label for this.
|
|
60
60
|
const role = '';
|
|
61
|
-
const
|
|
61
|
+
const audioLabel = '';
|
|
62
|
+
const videoLabel = '';
|
|
62
63
|
const hdrLevel = '';
|
|
64
|
+
const spatialAudio = false;
|
|
63
65
|
const videoLayout = '';
|
|
64
66
|
const channelCount = example.audio && example.audio.channelsCount ?
|
|
65
67
|
example.audio.channelsCount :
|
|
@@ -67,7 +69,8 @@ shaka.media.ExampleBasedCriteria = class {
|
|
|
67
69
|
|
|
68
70
|
/** @private {!shaka.media.AdaptationSetCriteria} */
|
|
69
71
|
this.fallback_ = new shaka.media.PreferenceBasedCriteria(
|
|
70
|
-
example.language, role, channelCount, hdrLevel,
|
|
72
|
+
example.language, role, channelCount, hdrLevel, spatialAudio,
|
|
73
|
+
videoLayout, audioLabel, videoLabel,
|
|
71
74
|
codecSwitchingStrategy, enableAudioGroups);
|
|
72
75
|
}
|
|
73
76
|
|
|
@@ -106,12 +109,15 @@ shaka.media.PreferenceBasedCriteria = class {
|
|
|
106
109
|
* @param {string} role
|
|
107
110
|
* @param {number} channelCount
|
|
108
111
|
* @param {string} hdrLevel
|
|
112
|
+
* @param {boolean} spatialAudio
|
|
109
113
|
* @param {string} videoLayout
|
|
110
|
-
* @param {string=}
|
|
114
|
+
* @param {string=} audioLabel
|
|
115
|
+
* @param {string=} videoLabel
|
|
111
116
|
* @param {shaka.config.CodecSwitchingStrategy=} codecSwitchingStrategy
|
|
112
117
|
* @param {boolean=} enableAudioGroups
|
|
113
118
|
*/
|
|
114
|
-
constructor(language, role, channelCount, hdrLevel,
|
|
119
|
+
constructor(language, role, channelCount, hdrLevel, spatialAudio,
|
|
120
|
+
videoLayout, audioLabel = '', videoLabel = '',
|
|
115
121
|
codecSwitchingStrategy = shaka.config.CodecSwitchingStrategy.RELOAD,
|
|
116
122
|
enableAudioGroups = false) {
|
|
117
123
|
/** @private {string} */
|
|
@@ -122,10 +128,14 @@ shaka.media.PreferenceBasedCriteria = class {
|
|
|
122
128
|
this.channelCount_ = channelCount;
|
|
123
129
|
/** @private {string} */
|
|
124
130
|
this.hdrLevel_ = hdrLevel;
|
|
131
|
+
/** @private {boolean} */
|
|
132
|
+
this.spatialAudio_ = spatialAudio;
|
|
125
133
|
/** @private {string} */
|
|
126
134
|
this.videoLayout_ = videoLayout;
|
|
127
135
|
/** @private {string} */
|
|
128
|
-
this.
|
|
136
|
+
this.audioLabel_ = audioLabel;
|
|
137
|
+
/** @private {string} */
|
|
138
|
+
this.videoLabel_ = videoLabel;
|
|
129
139
|
/** @private {shaka.config.CodecSwitchingStrategy} */
|
|
130
140
|
this.codecSwitchingStrategy_ = codecSwitchingStrategy;
|
|
131
141
|
/** @private {boolean} */
|
|
@@ -191,15 +201,34 @@ shaka.media.PreferenceBasedCriteria = class {
|
|
|
191
201
|
}
|
|
192
202
|
}
|
|
193
203
|
|
|
194
|
-
if (this.
|
|
195
|
-
const byLabel = Class.
|
|
204
|
+
if (this.audioLabel_) {
|
|
205
|
+
const byLabel = Class.filterVariantsByAudioLabel_(
|
|
206
|
+
current, this.audioLabel_);
|
|
207
|
+
if (byLabel.length) {
|
|
208
|
+
current = byLabel;
|
|
209
|
+
} else {
|
|
210
|
+
shaka.log.warning('No exact match for audio label could be found.');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (this.videoLabel_) {
|
|
215
|
+
const byLabel = Class.filterVariantsByVideoLabel_(
|
|
216
|
+
current, this.videoLabel_);
|
|
196
217
|
if (byLabel.length) {
|
|
197
218
|
current = byLabel;
|
|
198
219
|
} else {
|
|
199
|
-
shaka.log.warning('No exact match for
|
|
220
|
+
shaka.log.warning('No exact match for video label could be found.');
|
|
200
221
|
}
|
|
201
222
|
}
|
|
202
223
|
|
|
224
|
+
const bySpatialAudio = Class.filterVariantsBySpatialAudio_(
|
|
225
|
+
current, this.spatialAudio_);
|
|
226
|
+
if (bySpatialAudio.length) {
|
|
227
|
+
current = bySpatialAudio;
|
|
228
|
+
} else {
|
|
229
|
+
shaka.log.warning('No exact match for spatial audio could be found.');
|
|
230
|
+
}
|
|
231
|
+
|
|
203
232
|
const supportsSmoothCodecTransitions = this.codecSwitchingStrategy_ ==
|
|
204
233
|
shaka.config.CodecSwitchingStrategy.SMOOTH &&
|
|
205
234
|
shaka.media.Capabilities.isChangeTypeSupported();
|
|
@@ -259,14 +288,14 @@ shaka.media.PreferenceBasedCriteria = class {
|
|
|
259
288
|
}
|
|
260
289
|
|
|
261
290
|
/**
|
|
262
|
-
* Filter Variants by label.
|
|
291
|
+
* Filter Variants by audio label.
|
|
263
292
|
*
|
|
264
293
|
* @param {!Array.<shaka.extern.Variant>} variants
|
|
265
294
|
* @param {string} preferredLabel
|
|
266
295
|
* @return {!Array.<shaka.extern.Variant>}
|
|
267
296
|
* @private
|
|
268
297
|
*/
|
|
269
|
-
static
|
|
298
|
+
static filterVariantsByAudioLabel_(variants, preferredLabel) {
|
|
270
299
|
return variants.filter((variant) => {
|
|
271
300
|
if (!variant.audio || !variant.audio.label) {
|
|
272
301
|
return false;
|
|
@@ -278,6 +307,26 @@ shaka.media.PreferenceBasedCriteria = class {
|
|
|
278
307
|
});
|
|
279
308
|
}
|
|
280
309
|
|
|
310
|
+
/**
|
|
311
|
+
* Filter Variants by video label.
|
|
312
|
+
*
|
|
313
|
+
* @param {!Array.<shaka.extern.Variant>} variants
|
|
314
|
+
* @param {string} preferredLabel
|
|
315
|
+
* @return {!Array.<shaka.extern.Variant>}
|
|
316
|
+
* @private
|
|
317
|
+
*/
|
|
318
|
+
static filterVariantsByVideoLabel_(variants, preferredLabel) {
|
|
319
|
+
return variants.filter((variant) => {
|
|
320
|
+
if (!variant.video || !variant.video.label) {
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
const label1 = variant.video.label.toLowerCase();
|
|
325
|
+
const label2 = preferredLabel.toLowerCase();
|
|
326
|
+
return label1 == label2;
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
|
|
281
330
|
/**
|
|
282
331
|
* Filter Variants by channelCount.
|
|
283
332
|
*
|
|
@@ -337,4 +386,21 @@ shaka.media.PreferenceBasedCriteria = class {
|
|
|
337
386
|
return true;
|
|
338
387
|
});
|
|
339
388
|
}
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Filters variants according to the given spatial audio config.
|
|
393
|
+
*
|
|
394
|
+
* @param {!Array.<shaka.extern.Variant>} variants
|
|
395
|
+
* @param {boolean} spatialAudio
|
|
396
|
+
* @private
|
|
397
|
+
*/
|
|
398
|
+
static filterVariantsBySpatialAudio_(variants, spatialAudio) {
|
|
399
|
+
return variants.filter((variant) => {
|
|
400
|
+
if (variant.audio && variant.audio.spatialAudio != spatialAudio) {
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
403
|
+
return true;
|
|
404
|
+
});
|
|
405
|
+
}
|
|
340
406
|
};
|
|
@@ -148,6 +148,9 @@ shaka.media.MediaSourceEngine = class {
|
|
|
148
148
|
|
|
149
149
|
/** @private {boolean} */
|
|
150
150
|
this.streamingAllowed_ = true;
|
|
151
|
+
|
|
152
|
+
/** @private {?number} */
|
|
153
|
+
this.lastDuration_ = null;
|
|
151
154
|
}
|
|
152
155
|
|
|
153
156
|
/**
|
|
@@ -1088,7 +1091,8 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1088
1091
|
* value will be dropped.
|
|
1089
1092
|
* @param {boolean} ignoreTimestampOffset If true, the timestampOffset will
|
|
1090
1093
|
* not be applied in this step.
|
|
1091
|
-
* @param {
|
|
1094
|
+
* @param {string} mimeType
|
|
1095
|
+
* @param {string} codecs
|
|
1092
1096
|
* @param {!Map.<shaka.util.ManifestParserUtils.ContentType,
|
|
1093
1097
|
* shaka.extern.Stream>} streamsByType
|
|
1094
1098
|
* A map of content types to streams. All streams must be supported
|
|
@@ -1098,7 +1102,7 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1098
1102
|
*/
|
|
1099
1103
|
async setStreamProperties(
|
|
1100
1104
|
contentType, timestampOffset, appendWindowStart, appendWindowEnd,
|
|
1101
|
-
ignoreTimestampOffset,
|
|
1105
|
+
ignoreTimestampOffset, mimeType, codecs, streamsByType) {
|
|
1102
1106
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
1103
1107
|
if (contentType == ContentType.TEXT) {
|
|
1104
1108
|
if (!ignoreTimestampOffset) {
|
|
@@ -1109,8 +1113,8 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1109
1113
|
}
|
|
1110
1114
|
const operations = [];
|
|
1111
1115
|
|
|
1112
|
-
const hasChangedCodecs =
|
|
1113
|
-
|
|
1116
|
+
const hasChangedCodecs = await this.codecSwitchIfNecessary_(
|
|
1117
|
+
contentType, mimeType, codecs, streamsByType);
|
|
1114
1118
|
|
|
1115
1119
|
if (!hasChangedCodecs) {
|
|
1116
1120
|
// Queue an abort() to help MSE splice together overlapping segments.
|
|
@@ -1241,6 +1245,7 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1241
1245
|
}
|
|
1242
1246
|
|
|
1243
1247
|
this.mediaSource_.duration = duration;
|
|
1248
|
+
this.lastDuration_ = duration;
|
|
1244
1249
|
});
|
|
1245
1250
|
}
|
|
1246
1251
|
|
|
@@ -1758,7 +1763,11 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1758
1763
|
this.mediaSourceOpen_ = new shaka.util.PublicPromise();
|
|
1759
1764
|
this.mediaSource_ = this.createMediaSource(this.mediaSourceOpen_);
|
|
1760
1765
|
await this.mediaSourceOpen_;
|
|
1761
|
-
|
|
1766
|
+
if (!isNaN(previousDuration) && previousDuration) {
|
|
1767
|
+
this.mediaSource_.duration = previousDuration;
|
|
1768
|
+
} else if (!isNaN(this.lastDuration_) && this.lastDuration_) {
|
|
1769
|
+
this.mediaSource_.duration = this.lastDuration_;
|
|
1770
|
+
}
|
|
1762
1771
|
|
|
1763
1772
|
const sourceBufferAdded = new shaka.util.PublicPromise();
|
|
1764
1773
|
const sourceBuffers =
|
|
@@ -1819,15 +1828,17 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1819
1828
|
* Codec switch if necessary, this will not resolve until the codec
|
|
1820
1829
|
* switch is over.
|
|
1821
1830
|
* @param {shaka.util.ManifestParserUtils.ContentType} contentType
|
|
1822
|
-
* @param {
|
|
1831
|
+
* @param {string} mimeType
|
|
1832
|
+
* @param {string} codecs
|
|
1823
1833
|
* @param {!Map.<shaka.util.ManifestParserUtils.ContentType,
|
|
1824
1834
|
* shaka.extern.Stream>} streamsByType
|
|
1825
1835
|
* @return {!Promise.<boolean>} true if there was a codec switch,
|
|
1826
1836
|
* false otherwise.
|
|
1827
1837
|
* @private
|
|
1828
1838
|
*/
|
|
1829
|
-
async codecSwitchIfNecessary_(contentType,
|
|
1830
|
-
|
|
1839
|
+
async codecSwitchIfNecessary_(contentType, mimeType, codecs, streamsByType) {
|
|
1840
|
+
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
1841
|
+
if (contentType == ContentType.TEXT) {
|
|
1831
1842
|
return false;
|
|
1832
1843
|
}
|
|
1833
1844
|
const MimeUtils = shaka.util.MimeUtils;
|
|
@@ -1838,30 +1849,43 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1838
1849
|
|
|
1839
1850
|
/** @type {?shaka.extern.Transmuxer} */
|
|
1840
1851
|
let transmuxer;
|
|
1841
|
-
let
|
|
1842
|
-
|
|
1852
|
+
let transmuxerMuxed = false;
|
|
1853
|
+
let newMimeType = shaka.util.MimeUtils.getFullType(mimeType, codecs);
|
|
1843
1854
|
let needTransmux = this.config_.forceTransmux;
|
|
1844
1855
|
if (!shaka.media.Capabilities.isTypeSupported(newMimeType) ||
|
|
1845
1856
|
(!this.sequenceMode_ &&
|
|
1846
1857
|
shaka.util.MimeUtils.RAW_FORMATS.includes(newMimeType))) {
|
|
1847
1858
|
needTransmux = true;
|
|
1848
1859
|
}
|
|
1849
|
-
const newMimeTypeWithAllCodecs =
|
|
1850
|
-
shaka.util.MimeUtils.getFullTypeWithAllCodecs(
|
|
1851
|
-
stream.mimeType, stream.codecs);
|
|
1852
1860
|
const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;
|
|
1853
1861
|
if (needTransmux) {
|
|
1862
|
+
const newMimeTypeWithAllCodecs =
|
|
1863
|
+
shaka.util.MimeUtils.getFullTypeWithAllCodecs(mimeType, codecs);
|
|
1854
1864
|
const transmuxerPlugin =
|
|
1855
1865
|
TransmuxerEngine.findTransmuxer(newMimeTypeWithAllCodecs);
|
|
1856
1866
|
if (transmuxerPlugin) {
|
|
1857
1867
|
transmuxer = transmuxerPlugin();
|
|
1858
|
-
|
|
1859
|
-
|
|
1868
|
+
const audioCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(
|
|
1869
|
+
ContentType.AUDIO, (codecs || '').split(','));
|
|
1870
|
+
const videoCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(
|
|
1871
|
+
ContentType.VIDEO, (codecs || '').split(','));
|
|
1872
|
+
if (audioCodec && videoCodec) {
|
|
1873
|
+
transmuxerMuxed = true;
|
|
1874
|
+
let codec = videoCodec;
|
|
1875
|
+
if (contentType == ContentType.AUDIO) {
|
|
1876
|
+
codec = audioCodec;
|
|
1877
|
+
}
|
|
1878
|
+
newMimeType = transmuxer.convertCodecs(contentType,
|
|
1879
|
+
shaka.util.MimeUtils.getFullTypeWithAllCodecs(mimeType, codec));
|
|
1880
|
+
} else {
|
|
1881
|
+
newMimeType =
|
|
1882
|
+
transmuxer.convertCodecs(contentType, newMimeTypeWithAllCodecs);
|
|
1883
|
+
}
|
|
1860
1884
|
}
|
|
1861
1885
|
}
|
|
1862
1886
|
|
|
1863
|
-
const
|
|
1864
|
-
|
|
1887
|
+
const newCodec = MimeUtils.getCodecBase(
|
|
1888
|
+
MimeUtils.getCodecs(newMimeType));
|
|
1865
1889
|
const newBasicType = MimeUtils.getBasicType(newMimeType);
|
|
1866
1890
|
|
|
1867
1891
|
// Current/new codecs base and basic type match then no need to switch
|
|
@@ -1870,7 +1894,7 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1870
1894
|
}
|
|
1871
1895
|
|
|
1872
1896
|
let allowChangeType = true;
|
|
1873
|
-
if (this.needSplitMuxedContent_ || (
|
|
1897
|
+
if (this.needSplitMuxedContent_ || (transmuxerMuxed &&
|
|
1874
1898
|
transmuxer && !this.transmuxers_[contentType])) {
|
|
1875
1899
|
allowChangeType = false;
|
|
1876
1900
|
}
|
|
@@ -57,6 +57,12 @@ shaka.media.InitSegmentReference = class {
|
|
|
57
57
|
|
|
58
58
|
/** @type {?shaka.extern.aes128Key} */
|
|
59
59
|
this.aes128Key = aes128Key;
|
|
60
|
+
|
|
61
|
+
/** @type {?string} */
|
|
62
|
+
this.codecs = null;
|
|
63
|
+
|
|
64
|
+
/** @type {?string} */
|
|
65
|
+
this.mimeType = null;
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
/**
|
|
@@ -305,6 +311,12 @@ shaka.media.SegmentReference = class {
|
|
|
305
311
|
this.partialReferences[this.partialReferences.length - 1];
|
|
306
312
|
lastPartial.markAsLastPartial();
|
|
307
313
|
}
|
|
314
|
+
|
|
315
|
+
/** @type {?string} */
|
|
316
|
+
this.codecs = null;
|
|
317
|
+
|
|
318
|
+
/** @type {?string} */
|
|
319
|
+
this.mimeType = null;
|
|
308
320
|
}
|
|
309
321
|
|
|
310
322
|
/**
|
|
@@ -119,6 +119,9 @@ shaka.media.StreamingEngine = class {
|
|
|
119
119
|
|
|
120
120
|
/** @private {!shaka.util.Destroyer} */
|
|
121
121
|
this.destroyer_ = new shaka.util.Destroyer(() => this.doDestroy_());
|
|
122
|
+
|
|
123
|
+
/** @private {number} */
|
|
124
|
+
this.lastMediaSourceReset_ = 0;
|
|
122
125
|
}
|
|
123
126
|
|
|
124
127
|
/** @override */
|
|
@@ -1090,8 +1093,8 @@ shaka.media.StreamingEngine = class {
|
|
|
1090
1093
|
this.config_.rebufferingGoal,
|
|
1091
1094
|
this.config_.bufferingGoal);
|
|
1092
1095
|
|
|
1093
|
-
const scaledBufferingGoal =
|
|
1094
|
-
unscaledBufferingGoal * this.bufferingGoalScale_;
|
|
1096
|
+
const scaledBufferingGoal = Math.max(1,
|
|
1097
|
+
unscaledBufferingGoal * this.bufferingGoalScale_);
|
|
1095
1098
|
|
|
1096
1099
|
// Check if we've buffered to the end of the presentation.
|
|
1097
1100
|
const timeUntilEnd =
|
|
@@ -1636,6 +1639,13 @@ shaka.media.StreamingEngine = class {
|
|
|
1636
1639
|
});
|
|
1637
1640
|
|
|
1638
1641
|
if (!waitingForAnotherStreamToRecover) {
|
|
1642
|
+
if (this.config_.maxDisabledTime > 0) {
|
|
1643
|
+
const handled = this.playerInterface_.disableStream(
|
|
1644
|
+
mediaState.stream, this.config_.maxDisabledTime);
|
|
1645
|
+
if (handled) {
|
|
1646
|
+
return;
|
|
1647
|
+
}
|
|
1648
|
+
}
|
|
1639
1649
|
// Reduction schedule: 80%, 60%, 40%, 20%, 16%, 12%, 8%, 4%, fail.
|
|
1640
1650
|
// Note: percentages are used for comparisons to avoid rounding errors.
|
|
1641
1651
|
const percentBefore = Math.round(100 * this.bufferingGoalScale_);
|
|
@@ -1761,7 +1771,8 @@ shaka.media.StreamingEngine = class {
|
|
|
1761
1771
|
await this.playerInterface_.mediaSourceEngine.setStreamProperties(
|
|
1762
1772
|
mediaState.type, timestampOffset, appendWindowStart,
|
|
1763
1773
|
appendWindowEnd, ignoreTimestampOffset,
|
|
1764
|
-
mediaState.stream,
|
|
1774
|
+
reference.mimeType || mediaState.stream.mimeType,
|
|
1775
|
+
reference.codecs || mediaState.stream.codecs, streamsByType);
|
|
1765
1776
|
if (isResetMediaSourceNecessary) {
|
|
1766
1777
|
let otherState = null;
|
|
1767
1778
|
if (mediaState.type === ContentType.VIDEO) {
|
|
@@ -2453,6 +2464,47 @@ shaka.media.StreamingEngine = class {
|
|
|
2453
2464
|
return this.config_.maxDisabledTime;
|
|
2454
2465
|
}
|
|
2455
2466
|
|
|
2467
|
+
/**
|
|
2468
|
+
* Reset Media Source
|
|
2469
|
+
*
|
|
2470
|
+
* @return {!Promise.<boolean>}
|
|
2471
|
+
*/
|
|
2472
|
+
async resetMediaSource() {
|
|
2473
|
+
const now = (Date.now() / 1000);
|
|
2474
|
+
const minTimeBetweenRecoveries = this.config_.minTimeBetweenRecoveries;
|
|
2475
|
+
if (!this.config_.allowMediaSourceRecoveries ||
|
|
2476
|
+
(now - this.lastMediaSourceReset_) < minTimeBetweenRecoveries) {
|
|
2477
|
+
return false;
|
|
2478
|
+
}
|
|
2479
|
+
this.lastMediaSourceReset_ = now;
|
|
2480
|
+
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
2481
|
+
const audioMediaState = this.mediaStates_.get(ContentType.AUDIO);
|
|
2482
|
+
if (audioMediaState) {
|
|
2483
|
+
audioMediaState.lastInitSegmentReference = null;
|
|
2484
|
+
this.forceClearBuffer_(audioMediaState);
|
|
2485
|
+
this.abortOperations_(audioMediaState).catch(() => {});
|
|
2486
|
+
}
|
|
2487
|
+
const videoMediaState = this.mediaStates_.get(ContentType.VIDEO);
|
|
2488
|
+
if (videoMediaState) {
|
|
2489
|
+
videoMediaState.lastInitSegmentReference = null;
|
|
2490
|
+
this.forceClearBuffer_(videoMediaState);
|
|
2491
|
+
this.abortOperations_(videoMediaState).catch(() => {});
|
|
2492
|
+
}
|
|
2493
|
+
/**
|
|
2494
|
+
* @type {!Map.<shaka.util.ManifestParserUtils.ContentType,
|
|
2495
|
+
* shaka.extern.Stream>}
|
|
2496
|
+
*/
|
|
2497
|
+
const streamsByType = new Map();
|
|
2498
|
+
if (this.currentVariant_.audio) {
|
|
2499
|
+
streamsByType.set(ContentType.AUDIO, this.currentVariant_.audio);
|
|
2500
|
+
}
|
|
2501
|
+
if (this.currentVariant_.video) {
|
|
2502
|
+
streamsByType.set(ContentType.VIDEO, this.currentVariant_.video);
|
|
2503
|
+
}
|
|
2504
|
+
await this.playerInterface_.mediaSourceEngine.reset(streamsByType);
|
|
2505
|
+
return true;
|
|
2506
|
+
}
|
|
2507
|
+
|
|
2456
2508
|
/**
|
|
2457
2509
|
* @param {shaka.media.StreamingEngine.MediaState_} mediaState
|
|
2458
2510
|
* @return {string} A log prefix of the form ($CONTENT_TYPE:$STREAM_ID), e.g.,
|
package/lib/player.js
CHANGED
|
@@ -39,6 +39,7 @@ goog.require('shaka.text.UITextDisplayer');
|
|
|
39
39
|
goog.require('shaka.text.WebVttGenerator');
|
|
40
40
|
goog.require('shaka.util.BufferUtils');
|
|
41
41
|
goog.require('shaka.util.CmcdManager');
|
|
42
|
+
goog.require('shaka.util.CmsdManager');
|
|
42
43
|
goog.require('shaka.util.ConfigUtils');
|
|
43
44
|
goog.require('shaka.util.Dom');
|
|
44
45
|
goog.require('shaka.util.Error');
|
|
@@ -598,6 +599,9 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
598
599
|
/** @private {shaka.util.CmcdManager} */
|
|
599
600
|
this.cmcdManager_ = null;
|
|
600
601
|
|
|
602
|
+
/** @private {shaka.util.CmsdManager} */
|
|
603
|
+
this.cmsdManager_ = null;
|
|
604
|
+
|
|
601
605
|
// This is the canvas element that will be used for rendering LCEVC
|
|
602
606
|
// enhanced frames.
|
|
603
607
|
/** @private {?HTMLCanvasElement} */
|
|
@@ -676,8 +680,10 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
676
680
|
this.config_.preferredVariantRole,
|
|
677
681
|
this.config_.preferredAudioChannelCount,
|
|
678
682
|
this.config_.preferredVideoHdrLevel,
|
|
683
|
+
this.config_.preferSpatialAudio,
|
|
679
684
|
this.config_.preferredVideoLayout,
|
|
680
685
|
this.config_.preferredAudioLabel,
|
|
686
|
+
this.config_.preferredVideoLabel,
|
|
681
687
|
this.config_.mediaSource.codecSwitchingStrategy,
|
|
682
688
|
this.config_.manifest.dash.enableAudioGroups);
|
|
683
689
|
|
|
@@ -701,6 +707,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
701
707
|
// Create the CMCD manager so client data can be attached to all requests
|
|
702
708
|
this.cmcdManager_ = this.createCmcd_();
|
|
703
709
|
|
|
710
|
+
this.cmsdManager_ = this.createCmsd_();
|
|
711
|
+
|
|
704
712
|
this.networkingEngine_ = this.createNetworkingEngine();
|
|
705
713
|
this.networkingEngine_.setForceHTTPS(this.config_.streaming.forceHTTPS);
|
|
706
714
|
|
|
@@ -846,6 +854,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
846
854
|
this.stats_ = null;
|
|
847
855
|
this.videoContainer_ = null;
|
|
848
856
|
this.cmcdManager_ = null;
|
|
857
|
+
this.cmsdManager_ = null;
|
|
849
858
|
|
|
850
859
|
if (this.networkingEngine_) {
|
|
851
860
|
await this.networkingEngine_.destroy();
|
|
@@ -1217,6 +1226,10 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
1217
1226
|
this.adManager_.onAssetUnload();
|
|
1218
1227
|
}
|
|
1219
1228
|
|
|
1229
|
+
if (this.cmsdManager_) {
|
|
1230
|
+
this.cmsdManager_.reset();
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1220
1233
|
if (this.video_) {
|
|
1221
1234
|
// Remove all track nodes
|
|
1222
1235
|
shaka.util.Dom.removeAllChildren(this.video_);
|
|
@@ -1576,6 +1589,9 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
1576
1589
|
goog.asserts.assert(
|
|
1577
1590
|
this.cmcdManager_,
|
|
1578
1591
|
'Need CMCD manager to populate manifest request data.');
|
|
1592
|
+
goog.asserts.assert(
|
|
1593
|
+
this.cmsdManager_,
|
|
1594
|
+
'Need CMSD manager to process response headers.');
|
|
1579
1595
|
goog.asserts.assert(
|
|
1580
1596
|
this.config_,
|
|
1581
1597
|
'Need player config when initializing the parser.');
|
|
@@ -1825,6 +1841,12 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
1825
1841
|
'Please use an AbrManager with setMediaElement function.');
|
|
1826
1842
|
this.abrManager_.setMediaElement = () => {};
|
|
1827
1843
|
}
|
|
1844
|
+
if (typeof this.abrManager_.setCmsdManager != 'function') {
|
|
1845
|
+
shaka.Deprecate.deprecateFeature(5,
|
|
1846
|
+
'AbrManager',
|
|
1847
|
+
'Please use an AbrManager with setCmsdManager function.');
|
|
1848
|
+
this.abrManager_.setCmsdManager = () => {};
|
|
1849
|
+
}
|
|
1828
1850
|
this.abrManager_.configure(this.config_.abr);
|
|
1829
1851
|
}
|
|
1830
1852
|
|
|
@@ -1836,8 +1858,10 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
1836
1858
|
this.config_.preferredVariantRole,
|
|
1837
1859
|
this.config_.preferredAudioChannelCount,
|
|
1838
1860
|
this.config_.preferredVideoHdrLevel,
|
|
1861
|
+
this.config_.preferSpatialAudio,
|
|
1839
1862
|
this.config_.preferredVideoLayout,
|
|
1840
1863
|
this.config_.preferredAudioLabel,
|
|
1864
|
+
this.config_.preferredVideoLabel,
|
|
1841
1865
|
this.config_.mediaSource.codecSwitchingStrategy,
|
|
1842
1866
|
this.config_.manifest.dash.enableAudioGroups);
|
|
1843
1867
|
|
|
@@ -1853,6 +1877,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
1853
1877
|
return this.switch_(variant, clearBuffer, safeMargin);
|
|
1854
1878
|
});
|
|
1855
1879
|
this.abrManager_.setMediaElement(mediaElement);
|
|
1880
|
+
this.abrManager_.setCmsdManager(this.cmsdManager_);
|
|
1856
1881
|
|
|
1857
1882
|
// If the content is multi-codec and the browser can play more than one of
|
|
1858
1883
|
// them, choose codecs now before we initialize streaming.
|
|
@@ -2607,6 +2632,9 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2607
2632
|
.set('request', request)
|
|
2608
2633
|
.set('requestType', requestType);
|
|
2609
2634
|
this.dispatchEvent(this.makeEvent_(name, data));
|
|
2635
|
+
if (this.cmsdManager_) {
|
|
2636
|
+
this.cmsdManager_.processHeaders(headers);
|
|
2637
|
+
}
|
|
2610
2638
|
};
|
|
2611
2639
|
/** @type {shaka.net.NetworkingEngine.OnDownloadFailed} */
|
|
2612
2640
|
const onDownloadFailed_ = (request, error, httpResponseCode, aborted) => {
|
|
@@ -2847,6 +2875,15 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2847
2875
|
return new shaka.util.CmcdManager(playerInterface, this.config_.cmcd);
|
|
2848
2876
|
}
|
|
2849
2877
|
|
|
2878
|
+
/**
|
|
2879
|
+
* Create a new CMSD manager.
|
|
2880
|
+
*
|
|
2881
|
+
* @private
|
|
2882
|
+
*/
|
|
2883
|
+
createCmsd_() {
|
|
2884
|
+
return new shaka.util.CmsdManager(this.config_.cmsd);
|
|
2885
|
+
}
|
|
2886
|
+
|
|
2850
2887
|
/**
|
|
2851
2888
|
* Creates a new instance of StreamingEngine. This can be replaced by tests
|
|
2852
2889
|
* to create fake instances instead.
|
|
@@ -2947,9 +2984,10 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2947
2984
|
}
|
|
2948
2985
|
|
|
2949
2986
|
// If lowLatencyMode is enabled, and inaccurateManifestTolerance and
|
|
2950
|
-
// rebufferingGoal and segmentPrefetchLimit are not
|
|
2951
|
-
// inaccurateManifestTolerance to 0 and rebufferingGoal
|
|
2952
|
-
// segmentPrefetchLimit to 2
|
|
2987
|
+
// rebufferingGoal and segmentPrefetchLimit and baseDelay are not
|
|
2988
|
+
// specified, set inaccurateManifestTolerance to 0 and rebufferingGoal
|
|
2989
|
+
// to 0.01 and segmentPrefetchLimit to 2 and baseDelay to 100 by default
|
|
2990
|
+
// for low latency streaming.
|
|
2953
2991
|
if (config['streaming'] && config['streaming']['lowLatencyMode']) {
|
|
2954
2992
|
if (config['streaming']['inaccurateManifestTolerance'] == undefined) {
|
|
2955
2993
|
config['streaming']['inaccurateManifestTolerance'] = 0;
|
|
@@ -2960,6 +2998,30 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2960
2998
|
if (config['streaming']['segmentPrefetchLimit'] == undefined) {
|
|
2961
2999
|
config['streaming']['segmentPrefetchLimit'] = 2;
|
|
2962
3000
|
}
|
|
3001
|
+
if (config['streaming']['retryParameters'] == undefined) {
|
|
3002
|
+
config['streaming']['retryParameters'] = {};
|
|
3003
|
+
}
|
|
3004
|
+
if (config['streaming']['retryParameters']['baseDelay'] == undefined) {
|
|
3005
|
+
config['streaming']['retryParameters']['baseDelay'] = 100;
|
|
3006
|
+
}
|
|
3007
|
+
if (config['manifest'] == undefined) {
|
|
3008
|
+
config['manifest'] = {};
|
|
3009
|
+
}
|
|
3010
|
+
if (config['manifest']['retryParameters'] == undefined) {
|
|
3011
|
+
config['manifest']['retryParameters'] = {};
|
|
3012
|
+
}
|
|
3013
|
+
if (config['manifest']['retryParameters']['baseDelay'] == undefined) {
|
|
3014
|
+
config['manifest']['retryParameters']['baseDelay'] = 100;
|
|
3015
|
+
}
|
|
3016
|
+
if (config['drm'] == undefined) {
|
|
3017
|
+
config['drm'] = {};
|
|
3018
|
+
}
|
|
3019
|
+
if (config['drm']['retryParameters'] == undefined) {
|
|
3020
|
+
config['drm']['retryParameters'] = {};
|
|
3021
|
+
}
|
|
3022
|
+
if (config['drm']['retryParameters']['baseDelay'] == undefined) {
|
|
3023
|
+
config['drm']['retryParameters']['baseDelay'] = 100;
|
|
3024
|
+
}
|
|
2963
3025
|
}
|
|
2964
3026
|
const ret = shaka.util.PlayerConfiguration.mergeConfigObjects(
|
|
2965
3027
|
this.config_, config, this.defaultConfig_());
|
|
@@ -3065,6 +3127,9 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
3065
3127
|
if (this.cmcdManager_) {
|
|
3066
3128
|
this.cmcdManager_.configure(this.config_.cmcd);
|
|
3067
3129
|
}
|
|
3130
|
+
if (this.cmsdManager_) {
|
|
3131
|
+
this.cmsdManager_.configure(this.config_.cmsd);
|
|
3132
|
+
}
|
|
3068
3133
|
}
|
|
3069
3134
|
|
|
3070
3135
|
/**
|
|
@@ -4001,8 +4066,10 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
4001
4066
|
role || '',
|
|
4002
4067
|
channelsCount,
|
|
4003
4068
|
/* hdrLevel= */ '',
|
|
4069
|
+
/* spatialAudio= */ false,
|
|
4004
4070
|
/* videoLayout= */ '',
|
|
4005
|
-
/*
|
|
4071
|
+
/* audioLabel= */ '',
|
|
4072
|
+
/* videoLabel= */ '',
|
|
4006
4073
|
this.config_.mediaSource.codecSwitchingStrategy,
|
|
4007
4074
|
this.config_.manifest.dash.enableAudioGroups);
|
|
4008
4075
|
|
|
@@ -4125,8 +4192,10 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
4125
4192
|
/* role= */ '',
|
|
4126
4193
|
/* channelCount= */ 0,
|
|
4127
4194
|
/* hdrLevel= */ '',
|
|
4195
|
+
/* spatialAudio= */ false,
|
|
4128
4196
|
/* videoLayout= */ '',
|
|
4129
4197
|
label,
|
|
4198
|
+
/* videoLabel= */ '',
|
|
4130
4199
|
this.config_.mediaSource.codecSwitchingStrategy,
|
|
4131
4200
|
this.config_.manifest.dash.enableAudioGroups);
|
|
4132
4201
|
|
|
@@ -6188,7 +6257,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
6188
6257
|
* @param {!shaka.util.Error} error
|
|
6189
6258
|
* @private
|
|
6190
6259
|
*/
|
|
6191
|
-
onError_(error) {
|
|
6260
|
+
async onError_(error) {
|
|
6192
6261
|
goog.asserts.assert(error instanceof shaka.util.Error, 'Wrong error type!');
|
|
6193
6262
|
|
|
6194
6263
|
// Errors dispatched after |destroy| is called are not meaningful and should
|
|
@@ -6197,6 +6266,23 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
6197
6266
|
return;
|
|
6198
6267
|
}
|
|
6199
6268
|
|
|
6269
|
+
let fireError = true;
|
|
6270
|
+
if (this.fullyLoaded_ && this.manifest_ && this.streamingEngine_ &&
|
|
6271
|
+
(error.code == shaka.util.Error.Code.VIDEO_ERROR ||
|
|
6272
|
+
error.code == shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_FAILED ||
|
|
6273
|
+
error.code == shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW ||
|
|
6274
|
+
error.code == shaka.util.Error.Code.TRANSMUXING_FAILED)) {
|
|
6275
|
+
try {
|
|
6276
|
+
const ret = await this.streamingEngine_.resetMediaSource();
|
|
6277
|
+
fireError = !ret;
|
|
6278
|
+
} catch (e) {
|
|
6279
|
+
fireError = true;
|
|
6280
|
+
}
|
|
6281
|
+
}
|
|
6282
|
+
if (!fireError) {
|
|
6283
|
+
return;
|
|
6284
|
+
}
|
|
6285
|
+
|
|
6200
6286
|
// Restore disabled variant if the player experienced a critical error.
|
|
6201
6287
|
if (error.severity === shaka.util.Error.Severity.CRITICAL) {
|
|
6202
6288
|
this.restoreDisabledVariants_(/* updateAbrManager= */ false);
|
|
@@ -6779,7 +6865,7 @@ shaka.Player.TYPICAL_BUFFERING_THRESHOLD_ = 0.5;
|
|
|
6779
6865
|
* @export
|
|
6780
6866
|
*/
|
|
6781
6867
|
// eslint-disable-next-line no-useless-concat
|
|
6782
|
-
shaka.Player.version = 'v4.
|
|
6868
|
+
shaka.Player.version = 'v4.7.0' + '-uncompiled'; // x-release-please-version
|
|
6783
6869
|
|
|
6784
6870
|
// Initialize the deprecation system using the version string we just set
|
|
6785
6871
|
// on the player.
|