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
|
@@ -1,288 +0,0 @@
|
|
|
1
|
-
# Customizing the UI
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
#### Configuring the layout
|
|
5
|
-
|
|
6
|
-
Once the UI is created, you can pass in configuration options that change
|
|
7
|
-
the look and functioning of the UI bar. For example, if you wanted to not have
|
|
8
|
-
a seek bar, you could add the following line to the `init()` function from the
|
|
9
|
-
UI basic usage tutorial, after creating the UI overlay:
|
|
10
|
-
|
|
11
|
-
```js
|
|
12
|
-
const video = document.getElementById('video');
|
|
13
|
-
const ui = video['ui'];
|
|
14
|
-
const config = {
|
|
15
|
-
addSeekBar: false
|
|
16
|
-
};
|
|
17
|
-
ui.configure(config);
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Controls will fire a {@link shaka.ui.Controls#event:UIUpdatedEvent} event once the
|
|
21
|
-
config takes effect.
|
|
22
|
-
See the docs for {@link shaka.extern.UIConfiguration} for more information.
|
|
23
|
-
|
|
24
|
-
#### Customizing the number and order of controls
|
|
25
|
-
|
|
26
|
-
For example, let's say that all you care about for your app is rewinding and
|
|
27
|
-
fast-forwarding. You could add the following line to `init()`, right before
|
|
28
|
-
creating the UI overlay. This will configure UI to ONLY provide these two buttons:
|
|
29
|
-
|
|
30
|
-
```js
|
|
31
|
-
const config = {
|
|
32
|
-
'controlPanelElements': ['rewind', 'fast_forward']
|
|
33
|
-
}
|
|
34
|
-
ui.configure(config);
|
|
35
|
-
```
|
|
36
|
-
This call will result in the controls panel having only two elements: rewind
|
|
37
|
-
button and fast forward button, in that order. If the reversed order is desired,
|
|
38
|
-
the call should be:
|
|
39
|
-
|
|
40
|
-
```js
|
|
41
|
-
const config = {
|
|
42
|
-
'controlPanelElements': ['fast_forward', 'rewind']
|
|
43
|
-
}
|
|
44
|
-
ui.configure(config);
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
The following elements can be added to the UI bar using this configuration value:
|
|
48
|
-
* time_and_duration: adds an element tracking and displaying current progress of
|
|
49
|
-
the presentation and the full presentation duration in the "0:10 / 1:00"
|
|
50
|
-
form where "0:10" (ten seconds) is the number of seconds passed from the start of the presentation
|
|
51
|
-
and "1:00" (one minute) is the presentation duration.
|
|
52
|
-
* play_pause: adds a button that plays/pauses the video on click.
|
|
53
|
-
* mute: adds a button that mutes/unmutes the video on click.
|
|
54
|
-
* volume: adds a volume slider.
|
|
55
|
-
* fullscreen: adds a button that toggles full screen mode on click.
|
|
56
|
-
* overflow_menu: adds a button that opens an overflow menu with additional settings
|
|
57
|
-
buttons. It's content is also configurable.
|
|
58
|
-
* rewind: adds a button that rewinds the presentation on click; that is, it starts playing
|
|
59
|
-
the presentation backwards.
|
|
60
|
-
* fast_forward: adds a button that fast forwards the presentation on click; that is, it
|
|
61
|
-
starts playing the presentation at an increased speed
|
|
62
|
-
* spacer: adds a chunk of empty space between the adjacent elements.
|
|
63
|
-
* picture_in_picture: adds a button that enables/disables picture-in-picture mode on browsers
|
|
64
|
-
that support it. Button is invisible on other browsers. Note that it will use the
|
|
65
|
-
[Document Picture-in-Picture API]() if supported.
|
|
66
|
-
* loop: adds a button that controls if the currently selected video is played in a loop.
|
|
67
|
-
* airplay: adds a button that opens a AirPlay dialog. The button is visible only if the browser
|
|
68
|
-
supports AirPlay.
|
|
69
|
-
* cast: adds a button that opens a Chromecast dialog. The button is visible only if there is
|
|
70
|
-
at least one Chromecast device on the same network available for casting.
|
|
71
|
-
* remote: adds a button that opens a Remote Playback dialog. The button is visible only if the
|
|
72
|
-
browser supports Remote Playback API.
|
|
73
|
-
* quality: adds a button that controls enabling/disabling of abr and video resolution selection.
|
|
74
|
-
* language: adds a button that controls audio language selection.
|
|
75
|
-
* playback_rate: adds a button that controls the playback rate selection.
|
|
76
|
-
* captions: adds a button that controls the current text track selection (including turning it off).
|
|
77
|
-
<!-- TODO: If we add more buttons that can be put in the order this way, list them here. -->
|
|
78
|
-
[Document Picture-in-Picture API]: https://developer.chrome.com/docs/web-platform/document-picture-in-picture/
|
|
79
|
-
|
|
80
|
-
Similarly, the 'overflowMenuButtons' configuration option can be used to control
|
|
81
|
-
the contents of the overflow menu.
|
|
82
|
-
The following buttons can be added to the overflow menu:
|
|
83
|
-
* captions: adds a button that controls the current text track selection (including turning it off).
|
|
84
|
-
The button is visible only if the content has at least one text track.
|
|
85
|
-
* cast: adds a button that opens a Chromecast dialog. The button is visible only if there is
|
|
86
|
-
at least one Chromecast device on the same network available for casting.
|
|
87
|
-
* quality: adds a button that controls enabling/disabling of abr and video resolution selection.
|
|
88
|
-
* language: adds a button that controls audio language selection.
|
|
89
|
-
* picture_in_picture: adds a button that enables/disables picture-in-picture mode on browsers
|
|
90
|
-
that support it. Button is invisible on other browsers. Note that it will use the
|
|
91
|
-
[Document Picture-in-Picture API]() if supported.
|
|
92
|
-
* loop: adds a button that controls if the currently selected video is played in a loop.
|
|
93
|
-
* playback_rate: adds a button that controls the playback rate selection.
|
|
94
|
-
* airplay: adds a button that opens a AirPlay dialog. The button is visible only if the browser
|
|
95
|
-
supports AirPlay.
|
|
96
|
-
* remote: adds a button that opens a Remote Playback dialog. The button is visible only if the
|
|
97
|
-
browser supports Remote Playback API.
|
|
98
|
-
* Statistics: adds a button that displays statistics of the video.
|
|
99
|
-
<!-- TODO: If we add more buttons that can be put in the order this way, list them here. -->
|
|
100
|
-
|
|
101
|
-
Example:
|
|
102
|
-
```js
|
|
103
|
-
// Add only the cast button to the overflow menu, nothing else
|
|
104
|
-
const config = {
|
|
105
|
-
'overflowMenuButtons' : ['cast']
|
|
106
|
-
}
|
|
107
|
-
ui.configure(config);
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
An important note: the 'overflow_menu' button needs to be part of the 'controlPanelElements'
|
|
111
|
-
layout for the overflow menu to be available to the user.
|
|
112
|
-
|
|
113
|
-
#### Adding tooltips to control panel buttons
|
|
114
|
-
|
|
115
|
-
Tooltips can be enabled to display the function of every button in the control panel. Where applicable, they will also contain the current selection in parenthesis.
|
|
116
|
-
|
|
117
|
-
Example:
|
|
118
|
-
```js
|
|
119
|
-
const config = {
|
|
120
|
-
'enableTooltips' : true
|
|
121
|
-
}
|
|
122
|
-
ui.configure(config);
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
#### Replacing the default context menu
|
|
126
|
-
|
|
127
|
-
A custom context menu can be added through the `customContextMenu` boolean. Additionally, the `contextMenuElements` option can be used to add elements to it.
|
|
128
|
-
The following buttons can be added to the context menu:
|
|
129
|
-
* Statistics: adds a button that displays statistics of the video.
|
|
130
|
-
* loop: adds a button that controls if the currently selected video is played in a loop.
|
|
131
|
-
* picture_in_picture: adds a button that enables/disables picture-in-picture mode on browsers
|
|
132
|
-
that support it. Button is invisible on other browsers. Note that it will use the
|
|
133
|
-
[Document Picture-in-Picture API]() if supported.
|
|
134
|
-
|
|
135
|
-
Example:
|
|
136
|
-
```js
|
|
137
|
-
const config = {
|
|
138
|
-
'customContextMenu' : true,
|
|
139
|
-
'contextMenuElements' : ['statistics'],
|
|
140
|
-
}
|
|
141
|
-
ui.configure(config);
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
#### Configuring Statistics
|
|
145
|
-
The list of statistics that are displayed when toggling the statistics button can be customized by specifying a `statisticsList` on the configuration. With the exception of `switchHistory` and `stateHistory`, all of the statistics from the {@link shaka.extern.Stats `Stats`} extern can be displayed.
|
|
146
|
-
|
|
147
|
-
Example:
|
|
148
|
-
```js
|
|
149
|
-
// Add a context menu with the 'statistics' button that displays a container with
|
|
150
|
-
// the current 'width', 'height', 'playTime', and 'bufferingTime' values.
|
|
151
|
-
const config = {
|
|
152
|
-
'customContextMenu' : true,
|
|
153
|
-
'contextMenuElements' : ['statistics'],
|
|
154
|
-
'statisticsList' : ['width', 'height', 'playTime', 'bufferingTime'],
|
|
155
|
-
}
|
|
156
|
-
ui.configure(config);
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
The presence of the seek bar and the big play button in the center of the video element can be
|
|
160
|
-
customized with `addSeekBar` and `addBigPlayButton` booleans in the config.
|
|
161
|
-
|
|
162
|
-
UI layout can be reconfigured at any point after it's been created.
|
|
163
|
-
Please note that custom layouts might need CSS adjustments to look good.
|
|
164
|
-
|
|
165
|
-
#### Changing seek bar progress colors
|
|
166
|
-
The seek bar consists of three segments: past (already played part of the presentation),
|
|
167
|
-
future-buffered and future-unbuffered.
|
|
168
|
-
To customize the colors, add your values to the config object under `seekBarColors`:
|
|
169
|
-
```js
|
|
170
|
-
const config = {
|
|
171
|
-
'seekBarColors': {
|
|
172
|
-
base: 'rgba(255, 255, 255, 0.3)',
|
|
173
|
-
buffered: 'rgba(255, 255, 255, 0.54)',
|
|
174
|
-
played: 'rgb(255, 255, 255)',
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
ui.configure(config);
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
If you're using our ad API, you can also specify the color for the ad break markers on
|
|
181
|
-
the timeline:
|
|
182
|
-
```js
|
|
183
|
-
const config = {
|
|
184
|
-
'seekBarColors': {
|
|
185
|
-
adBreaks: 'rgb(255, 204, 0)',
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
ui.configure(config);
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
If you've chosen to display chapters, you can specify the color for the chapter markers on
|
|
192
|
-
the timeline and the text color of the chapter titles that popup on hover:
|
|
193
|
-
```js
|
|
194
|
-
const config = {
|
|
195
|
-
displayChapters: true,
|
|
196
|
-
seekBarColors: {
|
|
197
|
-
chapterMarks: 'rgb(27, 27, 27)',
|
|
198
|
-
chapterLabels: 'rgb(255, 255, 255)'
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
ui.configure(config);
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
#### Configuring playback, fast forward and rewind rates
|
|
205
|
-
The rate in which the player can play, fast forward and rewind content can be configured using the `playbackRates`, `fastForwardRates` and `rewindRates` options.
|
|
206
|
-
|
|
207
|
-
* `playbackRates`: List of rates available in the `playback_rate` menu.
|
|
208
|
-
* `fastForwardRates`: List of rates available to cycle through every time the `fast_forward` button is clicked.
|
|
209
|
-
* `rewindRates`: List of rates available to cycle through every time the `rewind` button is clicked.
|
|
210
|
-
|
|
211
|
-
```js
|
|
212
|
-
const config = {
|
|
213
|
-
'controlPanelElements': ['playback_rate', 'fast_forward', 'rewind'],
|
|
214
|
-
'playbackRates': [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],
|
|
215
|
-
'fastForwardRates': [2, 4, 8, 1],
|
|
216
|
-
'rewindRates': [-1, -2, -4, -8],
|
|
217
|
-
}
|
|
218
|
-
ui.configure(config);
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
#### Creating custom elements and adding them to the UI
|
|
222
|
-
It's possible to add custom application-specific buttons to the UI.
|
|
223
|
-
Each element has to have it's own class that implements the {@linksource shaka.extern.IUIElement}
|
|
224
|
-
interface and register with {@linksource shaka.ui.Controls}.
|
|
225
|
-
All our elements use {@linksource shaka.ui.Element} as a base class. Take a look to see if it's
|
|
226
|
-
right for your custom buttons.
|
|
227
|
-
|
|
228
|
-
Let's say, we want to create a button that allows user to skip the currently playing video and go to
|
|
229
|
-
the next one.
|
|
230
|
-
|
|
231
|
-
```js
|
|
232
|
-
// skipButton.js
|
|
233
|
-
|
|
234
|
-
// Use shaka.ui.Element as a base class
|
|
235
|
-
myapp.SkipButton = class extends shaka.ui.Element {
|
|
236
|
-
constructor(parent, controls) {
|
|
237
|
-
super(parent, controls);
|
|
238
|
-
|
|
239
|
-
// The actual button that will be displayed
|
|
240
|
-
this.button_ = document.createElement('button');
|
|
241
|
-
this.button_.textContent = 'Skip current video';
|
|
242
|
-
this.parent.appendChild(this.button_);
|
|
243
|
-
|
|
244
|
-
// Listen for clicks on the button to start the next playback
|
|
245
|
-
this.eventManager.listen(this.button_, 'click', () => {
|
|
246
|
-
const nextManifest = /* Your logic to pick the next video to be played */
|
|
247
|
-
myapp.getNextManifest();
|
|
248
|
-
|
|
249
|
-
// shaka.ui.Element gives us access to the player object as member of the class
|
|
250
|
-
this.player.load(nextManifest);
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
// Factory that will create a button at run time.
|
|
257
|
-
myapp.SkipButton.Factory = class {
|
|
258
|
-
create(rootElement, controls) {
|
|
259
|
-
return new myapp.SkipButton(rootElement, controls);
|
|
260
|
-
}
|
|
261
|
-
};
|
|
262
|
-
|
|
263
|
-
// Register our factory with the controls, so controls can create button instances.
|
|
264
|
-
shaka.ui.Controls.registerElement(
|
|
265
|
-
/* This name will serve as a reference to the button in the UI configuration object */ 'skip',
|
|
266
|
-
new myapp.SkipButton.Factory());
|
|
267
|
-
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
We have our button. Let's see how we can add it to the layout.
|
|
271
|
-
Similar to specifying the order of shaka-provided controls, we'll need to
|
|
272
|
-
add a line to the `init()` function in myapp.js
|
|
273
|
-
|
|
274
|
-
```js
|
|
275
|
-
// This will add three buttons to the controls panel (in that order): shaka-provided
|
|
276
|
-
// rewind and fast forward button and out custom skip button, referenced by the name
|
|
277
|
-
// we used when registering the factory with the controls.
|
|
278
|
-
uiConfig['controlPanelElements'] = ['rewind', 'fast_forward', 'skip'];
|
|
279
|
-
```
|
|
280
|
-
<!-- TODO: Create a doc on best a11y practices for custom buttons and link to the
|
|
281
|
-
localization docs explaining how to take advantage of our localization system. -->
|
|
282
|
-
|
|
283
|
-
#### Shaka Theme Gallery
|
|
284
|
-
Check out the set of [pre-packaged Shaka UI themes][], created by [@lucksy][]!
|
|
285
|
-
PR contributions to [the gallery repo][] are welcome.
|
|
286
|
-
[@lucksy]: https://github.com/lucksy
|
|
287
|
-
[pre-packaged Shaka UI themes]: https://lucksy.github.io/shaka-player-themes/
|
|
288
|
-
[the gallery repo]: https://github.com/lucksy/shaka-player-themes
|
package/docs/tutorials/ui.md
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
# UI Library: basic usage
|
|
2
|
-
|
|
3
|
-
Shaka Player has an optional UI library that provides a high-quality accessible
|
|
4
|
-
localized UI. It is an alternate bundle from the base
|
|
5
|
-
Shaka Player library, that adds additional UI-specific classes and a streamlined
|
|
6
|
-
declarative style of setup.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
#### Setting up the UI library
|
|
10
|
-
|
|
11
|
-
Setting up a project with the UI library is even easier than setting one up without.
|
|
12
|
-
|
|
13
|
-
Set up controls with HTML data attributes:
|
|
14
|
-
|
|
15
|
-
```html
|
|
16
|
-
<!DOCTYPE html>
|
|
17
|
-
<html>
|
|
18
|
-
<head>
|
|
19
|
-
<!-- Shaka Player ui compiled library: -->
|
|
20
|
-
<script src="dist/shaka-player.ui.js"></script>
|
|
21
|
-
<!-- Shaka Player ui compiled library default CSS: -->
|
|
22
|
-
<link rel="stylesheet" type="text/css" href="dist/controls.css">
|
|
23
|
-
<!-- Chromecast SDK (if you want Chromecast support for your app): -->
|
|
24
|
-
<script defer src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script>
|
|
25
|
-
<!-- Your application source: -->
|
|
26
|
-
<script src="myapp.js"></script>
|
|
27
|
-
</head>
|
|
28
|
-
<body>
|
|
29
|
-
<!-- The data-shaka-player-container tag will make the UI library place the controls in this div.
|
|
30
|
-
The data-shaka-player-cast-receiver-id tag allows you to provide a Cast Application ID that
|
|
31
|
-
the cast button will cast to; the value provided here is the sample cast receiver. -->
|
|
32
|
-
<div data-shaka-player-container style="max-width:40em"
|
|
33
|
-
data-shaka-player-cast-receiver-id="07AEE832">
|
|
34
|
-
<!-- The data-shaka-player tag will make the UI library use this video element.
|
|
35
|
-
If no video is provided, the UI will automatically make one inside the container div. -->
|
|
36
|
-
<video autoplay data-shaka-player id="video" style="width:100%;height:100%"></video>
|
|
37
|
-
</div>
|
|
38
|
-
</body>
|
|
39
|
-
</html>
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
```js
|
|
43
|
-
// myapp.js
|
|
44
|
-
|
|
45
|
-
const manifestUri =
|
|
46
|
-
'https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd';
|
|
47
|
-
|
|
48
|
-
async function init() {
|
|
49
|
-
// When using the UI, the player is made automatically by the UI object.
|
|
50
|
-
const video = document.getElementById('video');
|
|
51
|
-
const ui = video['ui'];
|
|
52
|
-
const controls = ui.getControls();
|
|
53
|
-
const player = controls.getPlayer();
|
|
54
|
-
|
|
55
|
-
// Attach player and ui to the window to make it easy to access in the JS console.
|
|
56
|
-
window.player = player;
|
|
57
|
-
window.ui = ui;
|
|
58
|
-
|
|
59
|
-
// Listen for error events.
|
|
60
|
-
player.addEventListener('error', onPlayerErrorEvent);
|
|
61
|
-
controls.addEventListener('error', onUIErrorEvent);
|
|
62
|
-
|
|
63
|
-
// Try to load a manifest.
|
|
64
|
-
// This is an asynchronous process.
|
|
65
|
-
try {
|
|
66
|
-
await player.load(manifestUri);
|
|
67
|
-
// This runs if the asynchronous load is successful.
|
|
68
|
-
console.log('The video has now been loaded!');
|
|
69
|
-
} catch (error) {
|
|
70
|
-
onPlayerError(error);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function onPlayerErrorEvent(errorEvent) {
|
|
75
|
-
// Extract the shaka.util.Error object from the event.
|
|
76
|
-
onPlayerError(event.detail);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function onPlayerError(error) {
|
|
80
|
-
// Handle player error
|
|
81
|
-
console.error('Error code', error.code, 'object', error);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function onUIErrorEvent(errorEvent) {
|
|
85
|
-
// Extract the shaka.util.Error object from the event.
|
|
86
|
-
onPlayerError(event.detail);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function initFailed(errorEvent) {
|
|
90
|
-
// Handle the failure to load; errorEvent.detail.reasonCode has a
|
|
91
|
-
// shaka.ui.FailReasonCode describing why.
|
|
92
|
-
console.error('Unable to load the UI library!');
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Listen to the custom shaka-ui-loaded event, to wait until the UI is loaded.
|
|
96
|
-
document.addEventListener('shaka-ui-loaded', init);
|
|
97
|
-
// Listen to the custom shaka-ui-load-failed event, in case Shaka Player fails
|
|
98
|
-
// to load (e.g. due to lack of browser support).
|
|
99
|
-
document.addEventListener('shaka-ui-load-failed', initFailed);
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
#### Enabling Chromecast support
|
|
104
|
-
|
|
105
|
-
If you'd like to take advantage of Shaka's built-in Chromecast support,
|
|
106
|
-
you will need to provide us with your cast receiver application id.
|
|
107
|
-
If you want to track cast status changes, you should also
|
|
108
|
-
set up a listener for the 'caststatuschanged' events.
|
|
109
|
-
|
|
110
|
-
```html
|
|
111
|
-
<!-- Add a data-shaka-player-cast-receiver-id tag to provide a Cast Application ID that
|
|
112
|
-
the cast button will cast to; the value provided here is the sample cast receiver. -->
|
|
113
|
-
<div data-shaka-player-container style="max-width:40em"
|
|
114
|
-
data-shaka-player-cast-receiver-id="07AEE832">
|
|
115
|
-
</div>
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
With the UI library set up this way, it will provide a button for casting to a
|
|
119
|
-
ChromeCast when appropriate, without any extra code.
|
|
120
|
-
Next, let's add a listener to the 'caststatuschanged' event in myapp.js:
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
```js
|
|
124
|
-
controls.addEventListener('caststatuschanged', onCastStatusChanged);
|
|
125
|
-
|
|
126
|
-
function onCastStatusChanged(event) {
|
|
127
|
-
const newCastStatus = event['newStatus'];
|
|
128
|
-
// Handle cast status change
|
|
129
|
-
console.log('The new cast status is: ' + newCastStatus);
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
#### Enabling Android Receiver Apps
|
|
135
|
-
|
|
136
|
-
If you'd like to take advantage of Android Receiver App support,
|
|
137
|
-
you will need to provide a boolean flag to enable support for
|
|
138
|
-
casting to an Android receiver app.
|
|
139
|
-
|
|
140
|
-
```html
|
|
141
|
-
<div data-shaka-player-container style="max-width:40em"
|
|
142
|
-
data-shaka-player-cast-receiver-id="07AEE832"
|
|
143
|
-
data-shaka-player-cast-android-receiver-compatible="true">
|
|
144
|
-
<!-- The manifest url in the src attribute will be automatically loaded -->
|
|
145
|
-
<video autoplay data-shaka-player id="video" style="width:100%;height:100%"
|
|
146
|
-
src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"></video>
|
|
147
|
-
</div
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
#### Providing source(s) for auto load.
|
|
151
|
-
|
|
152
|
-
It's also possible to provide the `src` attribute on the `<video>` element
|
|
153
|
-
or a `<source>` tag inside it to enable auto loading of the specified content.
|
|
154
|
-
|
|
155
|
-
```html
|
|
156
|
-
<div data-shaka-player-container style="max-width:40em"
|
|
157
|
-
data-shaka-player-cast-receiver-id="07AEE832">
|
|
158
|
-
<!-- The manifest url in the src attribute will be automatically loaded -->
|
|
159
|
-
<video autoplay data-shaka-player id="video" style="width:100%;height:100%"
|
|
160
|
-
src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"></video>
|
|
161
|
-
</div>
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
or
|
|
165
|
-
|
|
166
|
-
```html
|
|
167
|
-
<div data-shaka-player-container style="max-width:40em"
|
|
168
|
-
data-shaka-player-cast-receiver-id="07AEE832">
|
|
169
|
-
<video autoplay data-shaka-player id="video" style="width:100%;height:100%">
|
|
170
|
-
<!-- The manifest url in the src attribute will be auto loaded -->
|
|
171
|
-
<source src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"/>
|
|
172
|
-
</video>
|
|
173
|
-
</div>
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
Use several `<source>` tags to provide backup manifest urls in case the `load()`
|
|
177
|
-
call to the first one fails.
|
|
178
|
-
|
|
179
|
-
```html
|
|
180
|
-
<div data-shaka-player-container style="max-width:40em"
|
|
181
|
-
data-shaka-player-cast-receiver-id="07AEE832">
|
|
182
|
-
<video autoplay data-shaka-player id="video" style="width:100%;height:100%">
|
|
183
|
-
<!-- Try this first -->
|
|
184
|
-
<source src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"/>
|
|
185
|
-
<!-- Try this if the first one has failed -->
|
|
186
|
-
<source src="https://storage.googleapis.com/shaka-demo-assets/angel-one-hls-apple/master.m3u8"/>
|
|
187
|
-
</video>
|
|
188
|
-
</div>
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
NOTE: Please DO NOT specify both the `src` attribute on the `<video>` tag AND
|
|
192
|
-
a `<source>` tag inside it.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
#### Programmatic UI setup.
|
|
196
|
-
It is possible to set up the UI programmatically after the page loads.
|
|
197
|
-
(One of the big use cases for this is building Shaka Player into UI frameworks
|
|
198
|
-
that modify the DOM after the page load.)
|
|
199
|
-
|
|
200
|
-
To create UI without the DOM-based setup, use the `shaka.ui.Overlay`
|
|
201
|
-
constructor.
|
|
202
|
-
|
|
203
|
-
```js
|
|
204
|
-
// "local" because it is for local playback only, as opposed to the player proxy
|
|
205
|
-
// object, which will route your calls to the ChromeCast receiver as necessary.
|
|
206
|
-
const localPlayer = new shaka.Player();
|
|
207
|
-
// "Overlay" because the UI will add DOM elements inside the container,
|
|
208
|
-
// to visually overlay the video element
|
|
209
|
-
const ui = new shaka.ui.Overlay(localPlayer, videoContainerElement,
|
|
210
|
-
videoElement);
|
|
211
|
-
// Now that the player has been configured to be part of a UI, attach it to the
|
|
212
|
-
// video.
|
|
213
|
-
await localPlayer.attach(videoElement);
|
|
214
|
-
|
|
215
|
-
// As with DOM-based setup, get access to the UI controls and player from the
|
|
216
|
-
// UI.
|
|
217
|
-
const controls = ui.getControls();
|
|
218
|
-
|
|
219
|
-
// These are cast-enabled proxy objects, so that when you are casting,
|
|
220
|
-
// your API calls will be routed to the remote playback session.
|
|
221
|
-
const player = controls.getPlayer();
|
|
222
|
-
const video = controls.getVideo();
|
|
223
|
-
|
|
224
|
-
// Programatically configure the Chromecast Receiver App Id and Android
|
|
225
|
-
// Receiver Compatability.
|
|
226
|
-
ui.configure({
|
|
227
|
-
// Set the castReceiverAppId
|
|
228
|
-
'castReceiverAppId': '07AEE832',
|
|
229
|
-
// Enable casting to native Android Apps (e.g. Android TV Apps)
|
|
230
|
-
'castAndroidReceiverCompatible': true,
|
|
231
|
-
});
|
|
232
|
-
```
|