shaka-player 3.3.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.csslintrc +11 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/pull_request_template.md +6 -34
- package/.github/workflows/build-and-test.yaml +129 -0
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
- package/.github/workflows/demo-version-index.yaml +37 -0
- package/.github/workflows/nightly-demo.yaml +42 -0
- package/.github/workflows/release-please.yaml +168 -0
- package/.github/workflows/safari-homedir-launcher.sh +18 -0
- package/.github/workflows/selenium-lab-tests.yaml +92 -0
- package/.github/workflows/sync-labels.yaml +33 -0
- package/.github/workflows/update-issues.yaml +29 -0
- package/.github/workflows/validate-pr-title.yaml +35 -0
- package/AUTHORS +3 -0
- package/CHANGELOG.md +1866 -1675
- package/CONTRIBUTING.md +2 -2
- package/CONTRIBUTORS +3 -0
- package/README.md +16 -13
- package/app-engine/README.md +9 -0
- package/app-engine/demo-version-index/README.md +14 -0
- package/app-engine/demo-version-index/app.yaml +28 -0
- package/app-engine/demo-version-index/generate.py +164 -0
- package/app-engine/demo-version-index/main.py +11 -0
- package/app-engine/demo-version-index/requirements.txt +5 -0
- package/app-engine/demo-version-index/templates/index.html +114 -0
- package/app-engine/shaka-player-demo/README.md +18 -0
- package/app-engine/shaka-player-demo/app.yaml +61 -0
- package/app-engine/shaka-player-demo/main.py +95 -0
- package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
- package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
- package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
- package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
- package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
- package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
- package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
- package/app-engine/shaka-player-demo/posters/standard.png +0 -0
- package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
- package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
- package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
- package/app-engine/shaka-player-demo/posters.py +110 -0
- package/app-engine/shaka-player-demo/requirements.txt +5 -0
- package/app-engine/shaka-player-demo/time.txt +1 -0
- package/build/README.md +3 -3
- package/build/checkversion.py +1 -1
- package/build/compiler.py +1 -1
- package/build/conformance.textproto +13 -0
- package/build/docker/Dockerfile +20 -0
- package/build/docker/docker-compose.yml +10 -0
- package/build/gendeps.py +18 -15
- package/build/shaka-lab.yaml +161 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +94 -29
- package/build/types/core +0 -1
- package/build/types/polyfill +1 -3
- package/build/wrapper.template.js +2 -2
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/asset_card.js +1 -2
- package/demo/cast_receiver/index.html +1 -1
- package/demo/cast_receiver/receiver_app.css +14 -14
- package/demo/common/asset.js +17 -1
- package/demo/common/assets.js +31 -0
- package/demo/common/message_ids.js +6 -3
- package/demo/config.js +10 -12
- package/demo/custom.js +39 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/demo_utils.js +0 -1
- package/demo/index.html +1 -1
- package/demo/locales/en.json +6 -3
- package/demo/locales/source.json +22 -10
- package/demo/main.js +12 -9
- package/demo/search.js +2 -1
- package/dist/controls.css +3 -3
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +236 -232
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +236 -232
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +229 -226
- package/dist/locales.js +34 -32
- package/dist/receiver.compiled.debug.js +75 -73
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +75 -73
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +321 -314
- package/dist/shaka-player.compiled.debug.d.ts +321 -314
- package/dist/shaka-player.compiled.debug.externs.js +140 -129
- package/dist/shaka-player.compiled.debug.js +527 -592
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +140 -129
- package/dist/shaka-player.compiled.js +836 -860
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +367 -358
- package/dist/shaka-player.ui.debug.d.ts +367 -358
- package/dist/shaka-player.ui.debug.externs.js +148 -129
- package/dist/shaka-player.ui.debug.js +586 -649
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +148 -129
- package/dist/shaka-player.ui.js +1008 -1028
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/REDESIGN.md +33 -33
- package/docs/design/bg-fetch.md +2 -2
- package/docs/design/codec_preferences.md +1 -1
- package/docs/design/dash-audio-channels.md +3 -3
- package/docs/design/dash-manifests.md +1 -1
- package/docs/design/gap-jumping.md +3 -3
- package/docs/design/preload.md +2 -2
- package/docs/tutorials/config.md +0 -2
- package/docs/tutorials/drm-config.md +5 -0
- package/docs/tutorials/fairplay.md +7 -22
- package/docs/tutorials/faq.md +8 -19
- package/docs/tutorials/index.json +3 -8
- package/docs/tutorials/plugins.md +4 -6
- package/docs/tutorials/selenium-grid-config.md +122 -0
- package/docs/tutorials/upgrade.md +83 -11
- package/docs/tutorials/welcome.md +10 -2
- package/externs/cmcd.js +1 -1
- package/externs/polyfill.js +15 -0
- package/externs/shaka/manifest.js +5 -1
- package/externs/shaka/net.js +12 -0
- package/externs/shaka/offline.js +5 -1
- package/externs/shaka/player.js +39 -32
- package/externs/shaka/text.js +12 -12
- package/externs/sourcebuffer.js +15 -0
- package/karma.conf.js +137 -30
- package/lib/abr/simple_abr_manager.js +12 -6
- package/lib/ads/client_side_ad.js +13 -2
- package/lib/ads/client_side_ad_manager.js +22 -4
- package/lib/cast/cast_proxy.js +3 -4
- package/lib/cast/cast_utils.js +0 -1
- package/lib/cea/cea608_data_channel.js +2 -2
- package/lib/cea/cea708_service.js +5 -4
- package/lib/cea/mp4_cea_parser.js +11 -5
- package/lib/cea/sei_processor.js +6 -3
- package/lib/dash/content_protection.js +85 -5
- package/lib/dash/dash_parser.js +10 -12
- package/lib/dash/mpd_utils.js +4 -5
- package/lib/dash/segment_list.js +1 -2
- package/lib/dash/segment_template.js +3 -3
- package/lib/hls/hls_parser.js +386 -749
- package/lib/hls/manifest_text_parser.js +5 -6
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/content_workarounds.js +2 -2
- package/lib/media/drm_engine.js +105 -55
- package/lib/media/gap_jumping_controller.js +10 -45
- package/lib/media/media_source_engine.js +90 -17
- package/lib/media/mp4_segment_index_parser.js +1 -4
- package/lib/media/playhead.js +4 -7
- package/lib/media/presentation_timeline.js +19 -10
- package/lib/media/segment_index.js +13 -46
- package/lib/media/segment_reference.js +47 -1
- package/lib/media/streaming_engine.js +35 -17
- package/lib/media/time_ranges_utils.js +5 -12
- package/lib/media/video_wrapper.js +1 -1
- package/lib/net/networking_engine.js +4 -1
- package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
- package/lib/offline/manifest_converter.js +1 -0
- package/lib/offline/storage.js +104 -136
- package/lib/player.js +50 -216
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +15 -9
- package/lib/polyfill/mediasource.js +0 -28
- package/lib/polyfill/patchedmediakeys_nop.js +2 -0
- package/lib/polyfill/patchedmediakeys_webkit.js +2 -0
- package/lib/polyfill/symbol.js +46 -0
- package/lib/text/cue.js +1 -7
- package/lib/text/lrc_text_parser.js +8 -0
- package/lib/text/mp4_ttml_parser.js +8 -0
- package/lib/text/mp4_vtt_parser.js +8 -0
- package/lib/text/sbv_text_parser.js +8 -0
- package/lib/text/simple_text_displayer.js +3 -8
- package/lib/text/srt_text_parser.js +8 -0
- package/lib/text/ssa_text_parser.js +8 -0
- package/lib/text/text_engine.js +19 -3
- package/lib/text/ttml_text_parser.js +16 -5
- package/lib/text/ui_text_displayer.js +2 -8
- package/lib/text/vtt_text_parser.js +24 -2
- package/lib/text/web_vtt_generator.js +1 -7
- package/lib/util/buffer_utils.js +1 -3
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +10 -14
- package/lib/util/fairplay_utils.js +109 -0
- package/lib/util/functional.js +0 -42
- package/lib/util/iterables.js +0 -46
- package/lib/util/mime_utils.js +2 -0
- package/lib/util/mp4_box_parsers.js +1 -4
- package/lib/util/mp4_parser.js +5 -7
- package/lib/util/periods.js +10 -11
- package/lib/util/platform.js +48 -3
- package/lib/util/player_configuration.js +12 -6
- package/lib/util/pssh.js +24 -8
- package/lib/util/stream_utils.js +96 -25
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -21
- package/lib/util/xml_utils.js +16 -8
- package/package.json +61 -36
- package/roadmap.md +27 -27
- package/shaka-player.uncompiled.js +1 -3
- package/test/abr/simple_abr_manager_unit.js +3 -8
- package/test/ads/ad_manager_unit.js +0 -6
- package/test/cast/cast_proxy_unit.js +0 -8
- package/test/cast/cast_receiver_integration.js +1 -18
- package/test/cast/cast_receiver_unit.js +1 -9
- package/test/cast/cast_sender_unit.js +0 -6
- package/test/cast/cast_utils_unit.js +1 -13
- package/test/cea/cea608_memory_unit.js +0 -5
- package/test/cea/cea708_service_unit.js +0 -7
- package/test/cea/cea708_window_unit.js +0 -5
- package/test/cea/cea_decoder_unit.js +0 -6
- package/test/cea/dtvcc_packet_builder_unit.js +0 -3
- package/test/cea/dtvcc_packet_unit.js +0 -5
- package/test/cea/mp4_cea_parser_unit.js +0 -4
- package/test/dash/dash_parser_content_protection_unit.js +45 -10
- package/test/dash/dash_parser_live_unit.js +2 -15
- package/test/dash/dash_parser_manifest_unit.js +2 -40
- package/test/dash/dash_parser_segment_base_unit.js +1 -8
- package/test/dash/dash_parser_segment_list_unit.js +1 -7
- package/test/dash/dash_parser_segment_template_unit.js +3 -13
- package/test/dash/mpd_utils_unit.js +3 -11
- package/test/demo/demo_unit.js +2 -6
- package/test/deprecate/enforcer_unit.js +0 -4
- package/test/deprecate/version_unit.js +0 -2
- package/test/hls/hls_live_unit.js +101 -234
- package/test/hls/hls_parser_unit.js +517 -447
- package/test/hls/manifest_text_parser_unit.js +0 -10
- package/test/media/adaptation_set_criteria_unit.js +3 -7
- package/test/media/adaptation_set_unit.js +0 -2
- package/test/media/buffering_observer_unit.js +1 -4
- package/test/media/closed_caption_parser_unit.js +0 -3
- package/test/media/drm_engine_integration.js +2 -15
- package/test/media/drm_engine_unit.js +90 -144
- package/test/media/manifest_parser_unit.js +0 -4
- package/test/media/media_source_engine_integration.js +26 -10
- package/test/media/media_source_engine_unit.js +8 -20
- package/test/media/mp4_segment_index_parser_unit.js +0 -4
- package/test/media/play_rate_controller_unit.js +0 -4
- package/test/media/playhead_unit.js +35 -207
- package/test/media/presentation_timeline_unit.js +4 -7
- package/test/media/quality_observer_unit.js +0 -4
- package/test/media/region_observer_unit.js +1 -6
- package/test/media/region_timeline_unit.js +0 -3
- package/test/media/segment_index_unit.js +15 -31
- package/test/media/segment_reference_unit.js +0 -3
- package/test/media/stall_detector_unit.js +0 -5
- package/test/media/streaming_engine_integration.js +13 -75
- package/test/media/streaming_engine_unit.js +14 -37
- package/test/media/time_ranges_utils_unit.js +0 -7
- package/test/media/transmuxer_integration.js +0 -6
- package/test/media/webm_segment_index_parser_unit.js +0 -4
- package/test/net/data_uri_plugin_unit.js +0 -7
- package/test/net/http_plugin_unit.js +0 -9
- package/test/net/networking_engine_unit.js +0 -11
- package/test/offline/download_progress_estimator_unit.js +0 -2
- package/test/offline/indexeddb_storage_unit.js +0 -6
- package/test/offline/manifest_convert_unit.js +34 -12
- package/test/offline/offline_integration.js +1 -10
- package/test/offline/offline_manifest_parser_unit.js +1 -6
- package/test/offline/offline_scheme_unit.js +0 -8
- package/test/offline/offline_uri_unit.js +0 -2
- package/test/offline/storage_compatibility_unit.js +1 -14
- package/test/offline/storage_integration.js +6 -31
- package/test/player_external.js +1 -15
- package/test/player_integration.js +38 -28
- package/test/player_load_graph_integration.js +1 -6
- package/test/player_src_equals_external.js +3 -9
- package/test/player_src_equals_integration.js +0 -7
- package/test/player_unit.js +78 -37
- package/test/routing/walker_unit.js +0 -8
- package/test/test/assets/large_file.mpd +1 -1
- package/test/test/boot.js +75 -22
- package/test/test/externs/jasmine.js +2 -2
- package/test/test/externs/karma.js +4 -0
- package/test/test/namespace.js +10 -0
- package/test/test/util/canned_idb.js +0 -8
- package/test/test/util/cea_utils.js +0 -6
- package/test/test/util/dash_parser_util.js +0 -13
- package/test/test/util/fake_ad.js +0 -3
- package/test/test/util/fake_ad_manager.js +0 -9
- package/test/test/util/fake_demo_main.js +0 -5
- package/test/test/util/fake_drm_engine.js +0 -6
- package/test/test/util/fake_media_source_engine.js +11 -11
- package/test/test/util/fake_networking_engine.js +0 -5
- package/test/test/util/fake_text_displayer.js +0 -5
- package/test/test/util/indexeddb_utils.js +1 -10
- package/test/test/util/jasmine_fetch.js +0 -1
- package/test/test/util/loader.js +0 -18
- package/test/test/util/manifest_generator.js +12 -15
- package/test/test/util/manifest_parser_util.js +4 -7
- package/test/test/util/offline_utils.js +1 -5
- package/test/test/util/simple_fakes.js +9 -26
- package/test/test/util/stream_generator.js +0 -14
- package/test/test/util/streaming_engine_util.js +1 -15
- package/test/test/util/test_scheme.js +25 -20
- package/test/test/util/ttml_utils.js +0 -2
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +9 -23
- package/test/test/util/waiter.js +84 -43
- package/test/text/cue_integration.js +2 -6
- package/test/text/lrc_text_parser_unit.js +6 -11
- package/test/text/mp4_ttml_parser_unit.js +6 -10
- package/test/text/mp4_vtt_parser_unit.js +7 -12
- package/test/text/sbv_text_parser_unit.js +5 -10
- package/test/text/simple_text_displayer_unit.js +1 -8
- package/test/text/srt_text_parser_unit.js +5 -10
- package/test/text/ssa_text_parser_unit.js +17 -34
- package/test/text/text_engine_unit.js +47 -12
- package/test/text/text_track_integration.js +0 -2
- package/test/text/ttml_text_parser_unit.js +79 -88
- package/test/text/ui_text_displayer_unit.js +44 -41
- package/test/text/vtt_text_parser_unit.js +55 -66
- package/test/text/web_vtt_generator_unit.js +0 -3
- package/test/ui/ad_ui_unit.js +0 -11
- package/test/ui/localization_unit.js +0 -3
- package/test/ui/text_displayer_layout_unit.js +1 -12
- package/test/ui/ui_customization_unit.js +0 -6
- package/test/ui/ui_integration.js +0 -32
- package/test/ui/ui_unit.js +28 -17
- package/test/util/abortable_operation_unit.js +4 -9
- package/test/util/array_utils_unit.js +0 -2
- package/test/util/buffer_utils_unit.js +0 -2
- package/test/util/cmcd_manager_unit.js +3 -3
- package/test/util/data_view_reader_unit.js +0 -4
- package/test/util/ebml_parser_unit.js +0 -4
- package/test/util/event_manager_unit.js +0 -3
- package/test/util/fake_event_target_unit.js +0 -5
- package/test/util/iterables_unit.js +0 -64
- package/test/util/language_utils_unit.js +0 -3
- package/test/util/manifest_parser_utils_unit.js +0 -2
- package/test/util/mp4_box_parsers_unit.js +0 -5
- package/test/util/mp4_parser_unit.js +0 -4
- package/test/util/multi_map_unit.js +0 -3
- package/test/util/object_utils_unit.js +0 -2
- package/test/util/periods_unit.js +14 -7
- package/test/util/pssh_unit.js +0 -5
- package/test/util/state_history_unit.js +0 -2
- package/test/util/stream_utils_unit.js +26 -15
- package/test/util/string_utils_unit.js +0 -6
- package/test/util/text_parser_unit.js +0 -2
- package/test/util/xml_utils_unit.js +0 -4
- package/ui/controls.js +65 -40
- package/ui/fullscreen_button.js +26 -6
- package/ui/less/ad_controls.less +6 -6
- package/ui/less/buttons.less +6 -6
- package/ui/less/containers.less +10 -12
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +7 -2
- package/ui/less/tooltip.less +4 -4
- package/ui/locales/en.json +1 -0
- package/ui/locales/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/ui/locales/source.json +5 -0
- package/ui/resolution_selection.js +31 -33
- package/ui/seek_bar.js +2 -1
- package/ui/ui.js +0 -17
- package/.github/workflows/build_and_test.yaml +0 -73
- package/.github/workflows/release.yaml +0 -53
- package/docs/tutorials/upgrade-v2-5.md +0 -441
- package/docs/tutorials/upgrade-v3.md +0 -38
- package/externs/svgelement.js +0 -18
- package/externs/webcrypto.js +0 -18
- package/lib/polyfill/mathround.js +0 -49
- package/lib/polyfill/patchedmediakeys_apple.js +0 -744
- package/lib/polyfill/patchedmediakeys_ms.js +0 -698
- package/lib/util/mutex.js +0 -52
- package/test/util/functional_unit.js +0 -82
package/ui/less/buttons.less
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
*
|
|
27
27
|
* Based on tips from https://stackoverflow.com/a/12925343 */
|
|
28
28
|
box-sizing: border-box;
|
|
29
|
-
padding: @play-button-size-percentage / 2;
|
|
29
|
+
padding: calc(@play-button-size-percentage / 2);
|
|
30
30
|
width: 0;
|
|
31
31
|
height: 0;
|
|
32
32
|
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
border-radius: 50%;
|
|
39
39
|
|
|
40
40
|
/* A small drop shadow below the button. */
|
|
41
|
-
box-shadow: rgba(0
|
|
41
|
+
box-shadow: rgba(0 0 0 / 10%) 0 0 20px 0;
|
|
42
42
|
|
|
43
43
|
/* No border. */
|
|
44
44
|
border: none;
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
background-position: center center;
|
|
52
52
|
|
|
53
53
|
/* A background color behind the play arrow. */
|
|
54
|
-
background-color: rgba(255
|
|
54
|
+
background-color: rgba(255 255 255 / 90%);
|
|
55
55
|
|
|
56
56
|
.show-when-controls-shown();
|
|
57
57
|
|
|
@@ -60,11 +60,11 @@
|
|
|
60
60
|
* deployed separately from the compiled CSS.
|
|
61
61
|
* Note that these URIs should relative to ui/controls.less, not this file. */
|
|
62
62
|
&[icon="play"] {
|
|
63
|
-
background-image: data-uri(
|
|
63
|
+
background-image: data-uri("images/play_arrow.svg");
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
&[icon="pause"] {
|
|
67
|
-
background-image: data-uri(
|
|
67
|
+
background-image: data-uri("images/pause.svg");
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
*/
|
|
75
75
|
.shaka-current-time {
|
|
76
76
|
font-size: 14px;
|
|
77
|
-
color:
|
|
77
|
+
color: white;
|
|
78
78
|
cursor: pointer;
|
|
79
79
|
|
|
80
80
|
&[disabled] {
|
package/ui/less/containers.less
CHANGED
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
/* All of the top-level containers into which various visible features go. */
|
|
8
8
|
|
|
9
|
-
@transparent: rgba(0, 0, 0, 0);
|
|
10
|
-
|
|
11
9
|
/* A container for the entire video + controls combo. This is the auto-setup
|
|
12
10
|
* div which we populate. */
|
|
13
11
|
.shaka-video-container {
|
|
@@ -19,13 +17,13 @@
|
|
|
19
17
|
|
|
20
18
|
/* Set a special font for material design icons. */
|
|
21
19
|
.material-icons-round {
|
|
22
|
-
font-family:
|
|
20
|
+
font-family: "Material Icons Round";
|
|
23
21
|
font-size: 24px;
|
|
24
22
|
}
|
|
25
23
|
|
|
26
24
|
/* Set the fonts for all other content. */
|
|
27
25
|
* {
|
|
28
|
-
font-family: Roboto-Regular, Roboto, sans-serif;
|
|
26
|
+
font-family: Roboto-Regular, Roboto, sans-serif, TengwarTelcontar;
|
|
29
27
|
}
|
|
30
28
|
}
|
|
31
29
|
|
|
@@ -202,7 +200,7 @@
|
|
|
202
200
|
min-width: 300px;
|
|
203
201
|
|
|
204
202
|
color: white;
|
|
205
|
-
background-color: rgba(35
|
|
203
|
+
background-color: rgba(35 35 35 / 90%);
|
|
206
204
|
|
|
207
205
|
font-size: 14px;
|
|
208
206
|
|
|
@@ -223,12 +221,12 @@
|
|
|
223
221
|
}
|
|
224
222
|
|
|
225
223
|
span {
|
|
226
|
-
color: rgb(150
|
|
224
|
+
color: rgb(150 150 150);
|
|
227
225
|
}
|
|
228
226
|
}
|
|
229
227
|
|
|
230
228
|
.shaka-context-menu {
|
|
231
|
-
background-color: rgba(35
|
|
229
|
+
background-color: rgba(35 35 35 / 90%);
|
|
232
230
|
|
|
233
231
|
border-radius: 2px;
|
|
234
232
|
|
|
@@ -248,7 +246,7 @@
|
|
|
248
246
|
cursor: pointer;
|
|
249
247
|
|
|
250
248
|
&:hover {
|
|
251
|
-
background-color: rgba(50
|
|
249
|
+
background-color: rgba(50 50 50 / 90%);
|
|
252
250
|
}
|
|
253
251
|
}
|
|
254
252
|
|
|
@@ -277,7 +275,7 @@
|
|
|
277
275
|
.show-when-controls-shown();
|
|
278
276
|
|
|
279
277
|
/* A black gradient at the bottom, behind the controls, but only so high. */
|
|
280
|
-
background: linear-gradient(to top,
|
|
278
|
+
background: linear-gradient(to top, black 0, transparent 15%);
|
|
281
279
|
}
|
|
282
280
|
|
|
283
281
|
.shaka-text-container {
|
|
@@ -305,7 +303,7 @@
|
|
|
305
303
|
/* These are defaults which are overridden by JS or cue styles. */
|
|
306
304
|
font-size: 20px;
|
|
307
305
|
line-height: 1.4; // relative to font size.
|
|
308
|
-
color:
|
|
306
|
+
color: white;
|
|
309
307
|
|
|
310
308
|
span.shaka-text-wrapper {
|
|
311
309
|
display: inline;
|
|
@@ -348,11 +346,11 @@
|
|
|
348
346
|
|
|
349
347
|
margin: 0;
|
|
350
348
|
box-sizing: border-box;
|
|
351
|
-
padding: @spinner-size-percentage / 2;
|
|
349
|
+
padding: calc(@spinner-size-percentage / 2);
|
|
352
350
|
width: 0;
|
|
353
351
|
height: 0;
|
|
354
352
|
|
|
355
353
|
/* Add a bit of a white shadow to keep our black spinner visible
|
|
356
354
|
on a black background. */
|
|
357
|
-
filter: drop-shadow(0 0 2px rgba(255
|
|
355
|
+
filter: drop-shadow(0 0 2px rgba(255 255 255 / 50%));
|
|
358
356
|
}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
/* Styles for the menu itself. */
|
|
20
20
|
background: white;
|
|
21
|
-
box-shadow: 0 1px 9px 0 rgba(0
|
|
21
|
+
box-shadow: 0 1px 9px 0 rgba(0 0 0 / 40%);
|
|
22
22
|
border-radius: 2px;
|
|
23
23
|
max-height: 250px;
|
|
24
24
|
min-width: 180px;
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
|
|
53
53
|
/* When hovered, the button's background is highlighted. */
|
|
54
54
|
&:hover {
|
|
55
|
-
background: rgb(224
|
|
55
|
+
background: rgb(224 224 224);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/* The button is clickable, showing cursor pointer */
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
.shaka-keyboard-navigation &:focus {
|
|
67
|
-
background: rgb(224
|
|
67
|
+
background: rgb(224 224 224);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
* language, the currently-selected resolution, etc. */
|
|
110
110
|
.shaka-current-selection-span {
|
|
111
111
|
/* This is dimmer than the other span, which is the name of the submenu. */
|
|
112
|
-
color: rgba(0
|
|
112
|
+
color: rgba(0 0 0 / 54%);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
/* The submenus have somewhat different margins inside them. */
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
.overlay-parent();
|
|
40
40
|
|
|
41
41
|
/* Vertical margins to occupy the same space as the thumb. */
|
|
42
|
-
margin: (@thumb-size - @track-height)/2 6px;
|
|
42
|
+
margin: calc((@thumb-size - @track-height) / 2) 6px;
|
|
43
43
|
|
|
44
44
|
/* Smaller height to contain the background for the virtual track. */
|
|
45
45
|
height: @track-height;
|
|
@@ -57,6 +57,11 @@
|
|
|
57
57
|
/* The track should fill the range element. */
|
|
58
58
|
width: 100%;
|
|
59
59
|
|
|
60
|
+
/* Since range elements are special input elements, they must reflect user
|
|
61
|
+
* interaction, so when the user hovers over the range element, the cursor
|
|
62
|
+
* must be a pointer. */
|
|
63
|
+
cursor: pointer;
|
|
64
|
+
|
|
60
65
|
/* The track should be tall enough to contain the thumb without clipping it.
|
|
61
66
|
* It is very tricky to make the thumb show outside the track on IE 11, and
|
|
62
67
|
* it is incompatible with our background gradients. */
|
|
@@ -104,7 +109,7 @@
|
|
|
104
109
|
|
|
105
110
|
/* Position the top of the range element so that it is centered on the
|
|
106
111
|
* container. Note that the container is actually smaller than the thumb. */
|
|
107
|
-
top: (@track-height - @thumb-size) / 2;
|
|
112
|
+
top: calc((@track-height - @thumb-size) / 2);
|
|
108
113
|
|
|
109
114
|
/* Make sure clicking at the very top of the bar still takes effect and is not
|
|
110
115
|
* confused with clicking the video to play/pause it. */
|
package/ui/less/tooltip.less
CHANGED
|
@@ -48,22 +48,22 @@
|
|
|
48
48
|
|
|
49
49
|
/* Override .material-icons-round text styling */
|
|
50
50
|
font-family: Roboto-Regular, Roboto, sans-serif;
|
|
51
|
-
line-height: @material-icons-width / 2;
|
|
51
|
+
line-height: calc(@material-icons-width / 2);
|
|
52
52
|
white-space: nowrap;
|
|
53
53
|
font-size: 13px;
|
|
54
54
|
|
|
55
55
|
/* Styling */
|
|
56
|
-
background: rgba(35
|
|
56
|
+
background: rgba(35 35 35 / 90%);
|
|
57
57
|
color: white;
|
|
58
58
|
border-radius: 3px;
|
|
59
59
|
padding: 5px 10px;
|
|
60
60
|
|
|
61
61
|
/* Positioning */
|
|
62
62
|
position: absolute;
|
|
63
|
-
bottom: @material-icons-width + 5px;
|
|
63
|
+
bottom: calc(@material-icons-width + 5px);
|
|
64
64
|
|
|
65
65
|
/* Left attribute is set to half of the width of the parent button */
|
|
66
|
-
left: @material-icons-width / 2;
|
|
66
|
+
left: calc(@material-icons-width / 2);
|
|
67
67
|
|
|
68
68
|
/* The tooltip is also translated 50% to appear centered */
|
|
69
69
|
.translateX(-0.5);
|
package/ui/locales/en.json
CHANGED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# Shaka Player Sindarin (Elvish) Translations
|
|
2
|
+
# Copyright 2022 Google LLC
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
# This documents the manual translation of our UI into Sindarin.
|
|
6
|
+
# This file is not consumed automatically.
|
|
7
|
+
|
|
8
|
+
# References:
|
|
9
|
+
# - Font: http://freetengwar.sourceforge.net/tengtelc.html
|
|
10
|
+
# - Transliteration & dictionary: https://www.tecendil.com/?mode=sindarin
|
|
11
|
+
# - Dictionary: https://www.jrrvf.com/hisweloke/sindar/
|
|
12
|
+
# - Dictionary: https://www.elfdict.com/w/run/s?include_old=1
|
|
13
|
+
# - Grammar: https://www.elvish.org/gwaith/sindarin_intro.htm
|
|
14
|
+
# - Grammar: https://eldamo.org/content/grammar-indexes/grammars-s.html
|
|
15
|
+
# - Imperative ending: -o
|
|
16
|
+
# - Thesaurus: https://www.thesaurus.com/
|
|
17
|
+
|
|
18
|
+
translations:
|
|
19
|
+
- key: AD_DURATION
|
|
20
|
+
english: "Ad duration"
|
|
21
|
+
sjn-literal: "time for break for money"
|
|
22
|
+
sjn-roman: "lû an hastië an mirian"
|
|
23
|
+
sjn: " "
|
|
24
|
+
|
|
25
|
+
- key: AD_PROGRESS
|
|
26
|
+
english: "Ad [AD_ON] of [NUM_ADS]"
|
|
27
|
+
sjn-literal: "break for money [A] / [B]"
|
|
28
|
+
sjn-roman: "hastië an mirian [A] / [B]"
|
|
29
|
+
sjn: " [AD_ON] / [NUM_ADS]"
|
|
30
|
+
|
|
31
|
+
- key: AD_TIME
|
|
32
|
+
english: "Ad: [AD_TIME]"
|
|
33
|
+
sjn-literal: "break for money: [A]"
|
|
34
|
+
sjn-roman: "hastië an mirian: [A]"
|
|
35
|
+
sjn: " : [AD_TIME]"
|
|
36
|
+
|
|
37
|
+
- key: AIRPLAY
|
|
38
|
+
english: "AirPlay"
|
|
39
|
+
sjn-literal: "heavens-make-play"
|
|
40
|
+
sjn-roman: "menelnortho"
|
|
41
|
+
sjn: ""
|
|
42
|
+
|
|
43
|
+
- key: AUTO_QUALITY
|
|
44
|
+
english: "Auto"
|
|
45
|
+
sjn-literal: "adapt/make fit"
|
|
46
|
+
sjn-roman: "cammo"
|
|
47
|
+
sjn: ""
|
|
48
|
+
|
|
49
|
+
- key: BACK
|
|
50
|
+
english: "Back"
|
|
51
|
+
sjn-literal: "return"
|
|
52
|
+
sjn-roman: "dan"
|
|
53
|
+
sjn: ""
|
|
54
|
+
|
|
55
|
+
- key: CAPTIONS
|
|
56
|
+
english: "Captions"
|
|
57
|
+
sjn-literal: "words written"
|
|
58
|
+
sjn-roman: "pith teithiel"
|
|
59
|
+
sjn: " "
|
|
60
|
+
|
|
61
|
+
- key: CAST
|
|
62
|
+
english: "Cast..."
|
|
63
|
+
sjn-literal: "throw"
|
|
64
|
+
sjn-roman: "hanto"
|
|
65
|
+
sjn: ""
|
|
66
|
+
|
|
67
|
+
- key: ENTER_LOOP_MODE
|
|
68
|
+
english: "Loop the current video"
|
|
69
|
+
sjn-literal: "enter repeating"
|
|
70
|
+
sjn-roman: "minno enquetië"
|
|
71
|
+
sjn: " "
|
|
72
|
+
|
|
73
|
+
- key: ENTER_PICTURE_IN_PICTURE
|
|
74
|
+
english: "Enter Picture-in-Picture"
|
|
75
|
+
sjn-literal: "enter mind-picture within mind-picture"
|
|
76
|
+
sjn-roman: "minno fanwos bir fanwos"
|
|
77
|
+
sjn: " "
|
|
78
|
+
|
|
79
|
+
- key: EXIT_FULL_SCREEN
|
|
80
|
+
english: "Exit full screen"
|
|
81
|
+
sjn-literal: "escape mind-picture full"
|
|
82
|
+
sjn-roman: "uthro fanwos panta"
|
|
83
|
+
sjn: " "
|
|
84
|
+
|
|
85
|
+
- key: EXIT_LOOP_MODE
|
|
86
|
+
english: "Stop looping the current video"
|
|
87
|
+
sjn-literal: "escape repeating"
|
|
88
|
+
sjn-roman: "uthro enquetië"
|
|
89
|
+
sjn: " "
|
|
90
|
+
|
|
91
|
+
- key: EXIT_PICTURE_IN_PICTURE
|
|
92
|
+
english: "Exit Picture-in-Picture"
|
|
93
|
+
sjn-literal: "escape mind-picture within mind-picture"
|
|
94
|
+
sjn-roman: "uthro fanwos bir fanwos"
|
|
95
|
+
sjn: " "
|
|
96
|
+
|
|
97
|
+
- key: FAST_FORWARD
|
|
98
|
+
english: "Fast-forward"
|
|
99
|
+
sjn-literal: "make-run fast"
|
|
100
|
+
sjn-roman: "northo lim"
|
|
101
|
+
sjn: " "
|
|
102
|
+
|
|
103
|
+
- key: FULL_SCREEN
|
|
104
|
+
english: "Full screen"
|
|
105
|
+
sjn-literal: "mind-picture full"
|
|
106
|
+
sjn-roman: "fanwos panta"
|
|
107
|
+
sjn: " "
|
|
108
|
+
|
|
109
|
+
- key: LANGUAGE
|
|
110
|
+
english: "Language"
|
|
111
|
+
sjn-literal: "language"
|
|
112
|
+
sjn-roman: "lambë"
|
|
113
|
+
sjn: ""
|
|
114
|
+
|
|
115
|
+
- key: LIVE
|
|
116
|
+
english: "Live"
|
|
117
|
+
sjn-literal: "freshest"
|
|
118
|
+
sjn-roman: "cîrwain"
|
|
119
|
+
sjn: ""
|
|
120
|
+
|
|
121
|
+
- key: LOOP
|
|
122
|
+
english: "Loop"
|
|
123
|
+
sjn-literal: "repeat"
|
|
124
|
+
sjn-roman: "enqueto"
|
|
125
|
+
sjn: ""
|
|
126
|
+
|
|
127
|
+
- key: MORE_SETTINGS
|
|
128
|
+
english: "More settings"
|
|
129
|
+
sjn-literal: "more+choices"
|
|
130
|
+
sjn-roman: "galainc"
|
|
131
|
+
sjn: ""
|
|
132
|
+
|
|
133
|
+
- key: MULTIPLE_LANGUAGES
|
|
134
|
+
english: "Multiple languages"
|
|
135
|
+
sjn-literal: "language without count"
|
|
136
|
+
sjn-roman: "lambë arnoediad"
|
|
137
|
+
sjn: " "
|
|
138
|
+
|
|
139
|
+
- key: MUTE
|
|
140
|
+
english: "Mute"
|
|
141
|
+
sjn-literal: "silence"
|
|
142
|
+
sjn-roman: "dîn"
|
|
143
|
+
sjn: ""
|
|
144
|
+
|
|
145
|
+
- key: NOT_APPLICABLE
|
|
146
|
+
english: "Not applicable"
|
|
147
|
+
sjn-literal: "not important"
|
|
148
|
+
sjn-roman: "la bâl"
|
|
149
|
+
sjn: " "
|
|
150
|
+
|
|
151
|
+
- key: OFF
|
|
152
|
+
english: "Off"
|
|
153
|
+
sjn-literal: "nothing"
|
|
154
|
+
sjn-roman: "unt"
|
|
155
|
+
sjn: ""
|
|
156
|
+
|
|
157
|
+
- key: ON
|
|
158
|
+
english: "On"
|
|
159
|
+
sjn-literal: "active"
|
|
160
|
+
sjn-roman: "carweg"
|
|
161
|
+
sjn: ""
|
|
162
|
+
|
|
163
|
+
- key: PAUSE
|
|
164
|
+
english: "Pause"
|
|
165
|
+
sjn-literal: "tarry/wait/pause"
|
|
166
|
+
sjn-roman: "hasto"
|
|
167
|
+
sjn: ""
|
|
168
|
+
|
|
169
|
+
- key: PICTURE_IN_PICTURE
|
|
170
|
+
english: "Picture-in-picture"
|
|
171
|
+
sjn-literal: "mind-picture within mind-picture"
|
|
172
|
+
sjn-roman: "fanwos bir fanwos"
|
|
173
|
+
sjn: " "
|
|
174
|
+
|
|
175
|
+
- key: PLAY
|
|
176
|
+
english: "Play"
|
|
177
|
+
sjn-literal: "make-run"
|
|
178
|
+
sjn-roman: "northo"
|
|
179
|
+
sjn: ""
|
|
180
|
+
|
|
181
|
+
- key: PLAYBACK_RATE
|
|
182
|
+
english: "Playback speed"
|
|
183
|
+
sjn-literal: "speed"
|
|
184
|
+
sjn-roman: "lintië"
|
|
185
|
+
sjn: ""
|
|
186
|
+
|
|
187
|
+
- key: REPLAY
|
|
188
|
+
english: "Replay"
|
|
189
|
+
sjn-literal: "make-run again"
|
|
190
|
+
sjn-roman: "adnortho"
|
|
191
|
+
sjn: ""
|
|
192
|
+
|
|
193
|
+
- key: RESOLUTION
|
|
194
|
+
english: "Resolution"
|
|
195
|
+
sjn-literal: "value/preciousness"
|
|
196
|
+
sjn-roman: "meiras"
|
|
197
|
+
sjn: ""
|
|
198
|
+
|
|
199
|
+
- key: REWIND
|
|
200
|
+
english: "Rewind"
|
|
201
|
+
sjn-literal: "make-run backwards"
|
|
202
|
+
sjn-roman: "northo abont"
|
|
203
|
+
sjn: " "
|
|
204
|
+
|
|
205
|
+
- key: SEEK
|
|
206
|
+
english: "Seek"
|
|
207
|
+
sjn-literal: "time"
|
|
208
|
+
sjn-roman: "lû"
|
|
209
|
+
sjn: ""
|
|
210
|
+
|
|
211
|
+
- key: SKIP_AD
|
|
212
|
+
english: "Skip Ad"
|
|
213
|
+
sjn-literal: "leap across break for money"
|
|
214
|
+
sjn-roman: "cabo thar hastië an mirian"
|
|
215
|
+
sjn: " "
|
|
216
|
+
|
|
217
|
+
- key: SKIP_TO_LIVE
|
|
218
|
+
english: "Skip ahead to live"
|
|
219
|
+
sjn-literal: "leap to freshest"
|
|
220
|
+
sjn-roman: "cabo na cîrwain"
|
|
221
|
+
sjn: " "
|
|
222
|
+
|
|
223
|
+
- key: STATISTICS
|
|
224
|
+
english: "Statistics"
|
|
225
|
+
sjn-literal: "interrogate numbers"
|
|
226
|
+
sjn-roman: "cetho neth"
|
|
227
|
+
sjn: " "
|
|
228
|
+
|
|
229
|
+
- key: SUBTITLE_FORCED
|
|
230
|
+
english: "Forced"
|
|
231
|
+
sjn-literal: "words written firm/abiding"
|
|
232
|
+
sjn-roman: "pith teithiel taug"
|
|
233
|
+
sjn: " "
|
|
234
|
+
|
|
235
|
+
- key: UNDETERMINED_LANGUAGE
|
|
236
|
+
english: "Undetermined"
|
|
237
|
+
sjn-literal: "not known"
|
|
238
|
+
sjn-roman: "la sinnen"
|
|
239
|
+
sjn: " "
|
|
240
|
+
|
|
241
|
+
- key: UNMUTE
|
|
242
|
+
english: "Unmute"
|
|
243
|
+
sjn-literal: "noise/sound"
|
|
244
|
+
sjn-roman: "lhôn"
|
|
245
|
+
sjn: ""
|
|
246
|
+
|
|
247
|
+
- key: UNRECOGNIZED_LANGUAGE
|
|
248
|
+
english: "Unrecognized"
|
|
249
|
+
sjn-literal: "not known"
|
|
250
|
+
sjn-roman: "la sinnen"
|
|
251
|
+
sjn: " "
|
|
252
|
+
|
|
253
|
+
- key: VOLUME
|
|
254
|
+
english: "Volume"
|
|
255
|
+
sjn-literal: "loud(ness)"
|
|
256
|
+
sjn-roman: "brui"
|
|
257
|
+
sjn: ""
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"AD_DURATION": " ",
|
|
3
|
+
"AD_PROGRESS": " [AD_ON] / [NUM_ADS]",
|
|
4
|
+
"AD_TIME": " : [AD_TIME]",
|
|
5
|
+
"AIRPLAY": "",
|
|
6
|
+
"AUTO_QUALITY": "",
|
|
7
|
+
"BACK": "",
|
|
8
|
+
"CAPTIONS": " ",
|
|
9
|
+
"CAST": "",
|
|
10
|
+
"ENTER_LOOP_MODE": " ",
|
|
11
|
+
"ENTER_PICTURE_IN_PICTURE": " ",
|
|
12
|
+
"EXIT_FULL_SCREEN": " ",
|
|
13
|
+
"EXIT_LOOP_MODE": " ",
|
|
14
|
+
"EXIT_PICTURE_IN_PICTURE": " ",
|
|
15
|
+
"FAST_FORWARD": " ",
|
|
16
|
+
"FULL_SCREEN": " ",
|
|
17
|
+
"LANGUAGE": "",
|
|
18
|
+
"LIVE": "",
|
|
19
|
+
"LOOP": "",
|
|
20
|
+
"MORE_SETTINGS": "",
|
|
21
|
+
"MULTIPLE_LANGUAGES": " ",
|
|
22
|
+
"MUTE": "",
|
|
23
|
+
"NOT_APPLICABLE": " ",
|
|
24
|
+
"OFF": "",
|
|
25
|
+
"ON": "",
|
|
26
|
+
"PAUSE": "",
|
|
27
|
+
"PICTURE_IN_PICTURE": " ",
|
|
28
|
+
"PLAY": "",
|
|
29
|
+
"PLAYBACK_RATE": "",
|
|
30
|
+
"REPLAY": "",
|
|
31
|
+
"RESOLUTION": "",
|
|
32
|
+
"REWIND": " ",
|
|
33
|
+
"SEEK": "",
|
|
34
|
+
"SKIP_AD": " ",
|
|
35
|
+
"SKIP_TO_LIVE": " ",
|
|
36
|
+
"STATISTICS": " ",
|
|
37
|
+
"SUBTITLE_FORCED": " ",
|
|
38
|
+
"UNDETERMINED_LANGUAGE": " ",
|
|
39
|
+
"UNMUTE": "",
|
|
40
|
+
"UNRECOGNIZED_LANGUAGE": " ",
|
|
41
|
+
"VOLUME": ""
|
|
42
|
+
}
|
package/ui/locales/source.json
CHANGED
|
@@ -113,6 +113,11 @@
|
|
|
113
113
|
"message": "Playback speed",
|
|
114
114
|
"description": "Label for a button used to navigate to a submenu to choose the playback speed in the video player."
|
|
115
115
|
},
|
|
116
|
+
"QUALITY": {
|
|
117
|
+
"description": "Label for a button used to open a submenu to choose audio quality in the video player.",
|
|
118
|
+
"meaning": "Audio quality",
|
|
119
|
+
"message": "Quality"
|
|
120
|
+
},
|
|
116
121
|
"REPLAY": {
|
|
117
122
|
"description": "Label for a button used to replay the video in a video player.",
|
|
118
123
|
"message": "Replay"
|
|
@@ -61,9 +61,6 @@ shaka.ui.ResolutionSelection = class extends shaka.ui.SettingsMenu {
|
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
this.updateResolutionSelection_();
|
|
64
|
-
|
|
65
|
-
// Set up all the strings in the user's preferred language.
|
|
66
|
-
this.updateLocalizedStrings_();
|
|
67
64
|
}
|
|
68
65
|
|
|
69
66
|
|
|
@@ -72,27 +69,6 @@ shaka.ui.ResolutionSelection = class extends shaka.ui.SettingsMenu {
|
|
|
72
69
|
/** @type {!Array.<shaka.extern.Track>} */
|
|
73
70
|
let tracks = this.player.getVariantTracks();
|
|
74
71
|
|
|
75
|
-
// Hide resolution menu and button for audio-only content and src= content
|
|
76
|
-
// without resolution information.
|
|
77
|
-
// TODO: for audio-only content, this should be a bitrate selection menu
|
|
78
|
-
// instead.
|
|
79
|
-
if (tracks.length && !tracks[0].height) {
|
|
80
|
-
shaka.ui.Utils.setDisplay(this.menu, false);
|
|
81
|
-
shaka.ui.Utils.setDisplay(this.button, false);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
// Otherwise, restore it.
|
|
85
|
-
shaka.ui.Utils.setDisplay(this.button, true);
|
|
86
|
-
|
|
87
|
-
tracks.sort((t1, t2) => {
|
|
88
|
-
// We have already screened for audio-only content, but the compiler
|
|
89
|
-
// doesn't know that.
|
|
90
|
-
goog.asserts.assert(t1.height != null, 'Null height');
|
|
91
|
-
goog.asserts.assert(t2.height != null, 'Null height');
|
|
92
|
-
|
|
93
|
-
return t2.height - t1.height;
|
|
94
|
-
});
|
|
95
|
-
|
|
96
72
|
// If there is a selected variant track, then we filter out any tracks in
|
|
97
73
|
// a different language. Then we use those remaining tracks to display the
|
|
98
74
|
// available resolutions.
|
|
@@ -104,14 +80,31 @@ shaka.ui.ResolutionSelection = class extends shaka.ui.SettingsMenu {
|
|
|
104
80
|
track.channelsCount == selectedTrack.channelsCount);
|
|
105
81
|
}
|
|
106
82
|
|
|
107
|
-
// Remove duplicate entries with the same
|
|
108
|
-
//
|
|
83
|
+
// Remove duplicate entries with the same resolution or quality depending
|
|
84
|
+
// on content type. Pick an arbitrary one.
|
|
109
85
|
tracks = tracks.filter((track, idx) => {
|
|
110
|
-
// Keep the first one with the same height.
|
|
111
|
-
const otherIdx =
|
|
86
|
+
// Keep the first one with the same height or bandwidth.
|
|
87
|
+
const otherIdx = this.player.isAudioOnly() ?
|
|
88
|
+
tracks.findIndex((t) => t.bandwidth == track.bandwidth) :
|
|
89
|
+
tracks.findIndex((t) => t.height == track.height);
|
|
112
90
|
return otherIdx == idx;
|
|
113
91
|
});
|
|
114
92
|
|
|
93
|
+
// Sort the tracks by height or bandwith depending on content type.
|
|
94
|
+
if (this.player.isAudioOnly()) {
|
|
95
|
+
tracks.sort((t1, t2) => {
|
|
96
|
+
goog.asserts.assert(t1.bandwidth != null, 'Null bandwidth');
|
|
97
|
+
goog.asserts.assert(t2.bandwidth != null, 'Null bandwidth');
|
|
98
|
+
return t2.bandwidth - t1.bandwidth;
|
|
99
|
+
});
|
|
100
|
+
} else {
|
|
101
|
+
tracks.sort((t1, t2) => {
|
|
102
|
+
goog.asserts.assert(t1.height != null, 'Null height');
|
|
103
|
+
goog.asserts.assert(t2.height != null, 'Null height');
|
|
104
|
+
return t2.height - t1.height;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
115
108
|
// Remove old shaka-resolutions
|
|
116
109
|
// 1. Save the back to menu button
|
|
117
110
|
const backButton = shaka.ui.Utils.getFirstDescendantWithClassName(
|
|
@@ -133,7 +126,8 @@ shaka.ui.ResolutionSelection = class extends shaka.ui.SettingsMenu {
|
|
|
133
126
|
() => this.onTrackSelected_(track));
|
|
134
127
|
|
|
135
128
|
const span = shaka.util.Dom.createHTMLElement('span');
|
|
136
|
-
span.textContent =
|
|
129
|
+
span.textContent = this.player.isAudioOnly() ?
|
|
130
|
+
Math.round(track.bandwidth / 1000) + ' kbits/s' : track.height + 'p';
|
|
137
131
|
button.appendChild(span);
|
|
138
132
|
|
|
139
133
|
if (!abrEnabled && track == selectedTrack) {
|
|
@@ -179,6 +173,8 @@ shaka.ui.ResolutionSelection = class extends shaka.ui.SettingsMenu {
|
|
|
179
173
|
shaka.ui.Utils.focusOnTheChosenItem(this.menu);
|
|
180
174
|
this.controls.dispatchEvent(
|
|
181
175
|
new shaka.util.FakeEvent('resolutionselectionupdated'));
|
|
176
|
+
|
|
177
|
+
this.updateLocalizedStrings_();
|
|
182
178
|
}
|
|
183
179
|
|
|
184
180
|
|
|
@@ -200,13 +196,15 @@ shaka.ui.ResolutionSelection = class extends shaka.ui.SettingsMenu {
|
|
|
200
196
|
*/
|
|
201
197
|
updateLocalizedStrings_() {
|
|
202
198
|
const LocIds = shaka.ui.Locales.Ids;
|
|
199
|
+
const locId = this.player.isAudioOnly() ?
|
|
200
|
+
LocIds.QUALITY : LocIds.RESOLUTION;
|
|
203
201
|
|
|
204
|
-
this.button.ariaLabel = this.localization.resolve(
|
|
205
|
-
this.backButton.ariaLabel = this.localization.resolve(
|
|
202
|
+
this.button.ariaLabel = this.localization.resolve(locId);
|
|
203
|
+
this.backButton.ariaLabel = this.localization.resolve(locId);
|
|
206
204
|
this.backSpan.textContent =
|
|
207
|
-
this.localization.resolve(
|
|
205
|
+
this.localization.resolve(locId);
|
|
208
206
|
this.nameSpan.textContent =
|
|
209
|
-
this.localization.resolve(
|
|
207
|
+
this.localization.resolve(locId);
|
|
210
208
|
this.abrOnSpan_.textContent =
|
|
211
209
|
this.localization.resolve(LocIds.AUTO_QUALITY);
|
|
212
210
|
|
package/ui/seek_bar.js
CHANGED
|
@@ -74,7 +74,8 @@ shaka.ui.SeekBar = class extends shaka.ui.RangeElement {
|
|
|
74
74
|
});
|
|
75
75
|
|
|
76
76
|
/**
|
|
77
|
-
* When user is scrubbing the seek bar - we should pause the video - see
|
|
77
|
+
* When user is scrubbing the seek bar - we should pause the video - see
|
|
78
|
+
* https://github.com/google/shaka-player/pull/2898#issuecomment-705229215
|
|
78
79
|
* but will conditionally pause or play the video after scrubbing
|
|
79
80
|
* depending on its previous state
|
|
80
81
|
*
|