shaka-player 3.2.2 → 3.2.5
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/workflows/build-and-test.yaml +130 -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 +29 -0
- package/.github/workflows/nightly-demo.yaml +42 -0
- package/.github/workflows/release-please.yaml +145 -0
- package/.github/workflows/safari-homedir-launcher.sh +18 -0
- package/.github/workflows/selenium-lab-tests.yaml +93 -0
- package/AUTHORS +2 -0
- package/CHANGELOG.md +1598 -1525
- package/CONTRIBUTING.md +2 -2
- package/CONTRIBUTORS +2 -0
- package/README.md +7 -7
- 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 +2 -0
- package/app-engine/demo-version-index/main.py +162 -0
- package/app-engine/demo-version-index/requirements.txt +6 -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 +1 -1
- package/build/checkversion.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 +163 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +93 -28
- 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/assets.js +2 -0
- package/demo/config.js +0 -1
- package/demo/custom.js +0 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/index.html +1 -1
- package/demo/main.js +3 -3
- package/dist/controls.css +2 -2
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +191 -194
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +191 -194
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +225 -219
- package/dist/locales.js +31 -31
- package/dist/receiver.compiled.debug.js +43 -45
- package/dist/receiver.compiled.debug.map +4 -4
- package/dist/receiver.compiled.js +43 -45
- package/dist/receiver.compiled.map +4 -4
- package/dist/shaka-player.compiled.d.ts +247 -227
- package/dist/shaka-player.compiled.debug.d.ts +247 -227
- package/dist/shaka-player.compiled.debug.externs.js +43 -16
- package/dist/shaka-player.compiled.debug.js +384 -388
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +43 -16
- package/dist/shaka-player.compiled.js +818 -817
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +291 -280
- package/dist/shaka-player.ui.debug.d.ts +291 -280
- package/dist/shaka-player.ui.debug.externs.js +45 -27
- package/dist/shaka-player.ui.debug.js +389 -394
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +45 -27
- package/dist/shaka-player.ui.js +964 -965
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/REDESIGN.md +33 -33
- 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/faq.md +8 -8
- package/docs/tutorials/index.json +1 -0
- package/docs/tutorials/plugins.md +3 -3
- package/docs/tutorials/selenium-grid-config.md +122 -0
- package/docs/tutorials/welcome.md +10 -2
- package/externs/shaka/player.js +8 -0
- package/externs/shaka/text.js +10 -0
- package/karma.conf.js +156 -45
- package/lib/abr/simple_abr_manager.js +12 -6
- package/lib/ads/ad_manager.js +1 -0
- package/lib/cast/cast_proxy.js +6 -4
- package/lib/cast/cast_receiver.js +3 -0
- 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/dash_parser.js +43 -31
- 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 +41 -9
- package/lib/hls/manifest_text_parser.js +4 -3
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/content_workarounds.js +2 -2
- package/lib/media/drm_engine.js +3 -2
- package/lib/media/media_source_engine.js +3 -2
- package/lib/media/mp4_segment_index_parser.js +1 -4
- package/lib/media/playhead.js +2 -2
- package/lib/media/presentation_timeline.js +18 -8
- package/lib/media/region_observer.js +39 -33
- package/lib/media/region_timeline.js +17 -19
- package/lib/media/segment_index.js +2 -1
- package/lib/media/segment_reference.js +19 -1
- package/lib/media/streaming_engine.js +12 -9
- package/lib/media/time_ranges_utils.js +1 -3
- package/lib/media/video_wrapper.js +1 -1
- package/lib/net/networking_engine.js +5 -1
- package/lib/offline/storage.js +12 -13
- package/lib/player.js +77 -36
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +32 -17
- package/lib/polyfill/mediasource.js +1 -1
- package/lib/text/cue.js +7 -1
- package/lib/text/simple_text_displayer.js +2 -1
- package/lib/text/ttml_text_parser.js +92 -63
- package/lib/text/ui_text_displayer.js +18 -12
- package/lib/util/buffer_utils.js +1 -3
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +1 -1
- package/lib/util/fake_event_target.js +21 -1
- package/lib/util/iterables.js +0 -46
- package/lib/util/mp4_box_parsers.js +1 -4
- package/lib/util/mp4_parser.js +5 -7
- package/lib/util/periods.js +8 -9
- package/lib/util/platform.js +3 -3
- package/lib/util/pssh.js +1 -4
- package/lib/util/stream_utils.js +88 -11
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -5
- package/lib/util/xml_utils.js +34 -7
- package/package.json +62 -40
- package/roadmap.md +17 -17
- 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 +0 -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 +1 -10
- package/test/dash/dash_parser_live_unit.js +45 -15
- package/test/dash/dash_parser_manifest_unit.js +37 -18
- 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 +0 -9
- package/test/dash/mpd_utils_unit.js +3 -11
- package/test/demo/demo_unit.js +0 -5
- package/test/deprecate/enforcer_unit.js +0 -4
- package/test/deprecate/version_unit.js +0 -2
- package/test/hls/hls_live_unit.js +2 -14
- package/test/hls/hls_parser_unit.js +76 -15
- 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 +7 -27
- package/test/media/manifest_parser_unit.js +0 -4
- package/test/media/media_source_engine_integration.js +0 -7
- package/test/media/media_source_engine_unit.js +1 -14
- 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 +8 -16
- package/test/media/presentation_timeline_unit.js +4 -7
- package/test/media/region_observer_unit.js +40 -10
- package/test/media/region_timeline_unit.js +40 -25
- package/test/media/segment_index_unit.js +0 -6
- 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 +11 -37
- package/test/media/streaming_engine_unit.js +155 -34
- package/test/media/time_ranges_utils_unit.js +0 -2
- 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 +0 -8
- package/test/offline/offline_integration.js +1 -10
- package/test/offline/offline_manifest_parser_unit.js +0 -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 +1 -25
- package/test/player_external.js +2 -10
- package/test/player_integration.js +62 -36
- 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 +41 -15
- package/test/player_unit.js +71 -46
- package/test/routing/walker_unit.js +0 -8
- package/test/test/assets/chapters.vtt +2 -2
- package/test/test/assets/chapters2.vtt +10 -0
- 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 +0 -7
- 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 +9 -14
- package/test/test/util/manifest_parser_util.js +0 -6
- package/test/test/util/offline_utils.js +0 -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 +0 -15
- package/test/test/util/test_scheme.js +1 -19
- package/test/test/util/ttml_utils.js +79 -0
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +15 -26
- package/test/test/util/waiter.js +84 -43
- package/test/text/cue_integration.js +0 -4
- package/test/text/lrc_text_parser_unit.js +0 -4
- package/test/text/mp4_ttml_parser_unit.js +10 -23
- package/test/text/mp4_vtt_parser_unit.js +1 -7
- package/test/text/sbv_text_parser_unit.js +0 -4
- package/test/text/simple_text_displayer_unit.js +1 -8
- package/test/text/srt_text_parser_unit.js +0 -4
- package/test/text/ssa_text_parser_unit.js +0 -5
- package/test/text/text_engine_unit.js +2 -7
- package/test/text/text_track_integration.js +0 -2
- package/test/text/ttml_text_parser_unit.js +495 -237
- package/test/text/ui_text_displayer_unit.js +44 -41
- package/test/text/vtt_text_parser_unit.js +0 -9
- 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 +9 -19
- package/test/ui/ui_customization_unit.js +0 -6
- package/test/ui/ui_integration.js +0 -16
- package/test/ui/ui_unit.js +1 -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/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/functional_unit.js +1 -1
- 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 +39 -38
- 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 +3 -0
- package/ui/less/ad_controls.less +4 -4
- package/ui/less/buttons.less +5 -9
- package/ui/less/containers.less +5 -7
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +5 -0
- package/ui/locales/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/ui/localization.js +12 -36
- package/ui/text_selection.js +1 -0
- package/externs/media_capabilities.js +0 -16
- package/externs/svgelement.js +0 -18
package/lib/player.js
CHANGED
|
@@ -728,6 +728,9 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
728
728
|
await this.networkingEngine_.destroy();
|
|
729
729
|
this.networkingEngine_ = null;
|
|
730
730
|
}
|
|
731
|
+
|
|
732
|
+
// FakeEventTarget implements IReleasable
|
|
733
|
+
super.release();
|
|
731
734
|
}
|
|
732
735
|
|
|
733
736
|
/**
|
|
@@ -1611,8 +1614,11 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
1611
1614
|
// initialize it now even through it appears a little out-of-place.
|
|
1612
1615
|
this.regionTimeline_ =
|
|
1613
1616
|
new shaka.media.RegionTimeline(() => this.seekRange());
|
|
1614
|
-
this.regionTimeline_.
|
|
1617
|
+
this.regionTimeline_.addEventListener('regionadd', (event) => {
|
|
1618
|
+
/** @type {shaka.extern.TimelineRegionInfo} */
|
|
1619
|
+
const region = event['region'];
|
|
1615
1620
|
this.onRegionEvent_(shaka.Player.EventName.TimelineRegionAdded, region);
|
|
1621
|
+
|
|
1616
1622
|
if (this.adManager_) {
|
|
1617
1623
|
this.adManager_.onDashTimedMetadata(region);
|
|
1618
1624
|
}
|
|
@@ -2104,6 +2110,14 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2104
2110
|
|
|
2105
2111
|
this.playhead_ = new shaka.media.SrcEqualsPlayhead(has.mediaElement);
|
|
2106
2112
|
|
|
2113
|
+
// This flag is used below in the language preference setup and
|
|
2114
|
+
// track-management to check if this load was canceled before the necessary
|
|
2115
|
+
// events fired.
|
|
2116
|
+
let unloaded = false;
|
|
2117
|
+
this.cleanupOnUnload_.push(() => {
|
|
2118
|
+
unloaded = true;
|
|
2119
|
+
});
|
|
2120
|
+
|
|
2107
2121
|
if (has.startTime != null) {
|
|
2108
2122
|
this.playhead_.setStartTime(has.startTime);
|
|
2109
2123
|
}
|
|
@@ -2131,7 +2145,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2131
2145
|
|
|
2132
2146
|
// Wait for the 'loadedmetadata' event to measure load() latency, but only
|
|
2133
2147
|
// if preload is set in a way that would result in this event firing
|
|
2134
|
-
// automatically.
|
|
2148
|
+
// automatically.
|
|
2149
|
+
// See https://github.com/shaka-project/shaka-player/issues/2483
|
|
2135
2150
|
if (this.video_.preload != 'none') {
|
|
2136
2151
|
this.eventManager_.listenOnce(this.video_, 'loadedmetadata', () => {
|
|
2137
2152
|
const now = Date.now() / 1000;
|
|
@@ -2154,6 +2169,12 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2154
2169
|
}
|
|
2155
2170
|
if (this.video_.textTracks) {
|
|
2156
2171
|
this.eventManager_.listen(this.video_.textTracks, 'addtrack', (e) => {
|
|
2172
|
+
// If we have moved on to another piece of content while waiting for
|
|
2173
|
+
// the above event, we should not process tracks here.
|
|
2174
|
+
if (unloaded) {
|
|
2175
|
+
return;
|
|
2176
|
+
}
|
|
2177
|
+
|
|
2157
2178
|
const trackEvent = /** @type {!TrackEvent} */(e);
|
|
2158
2179
|
if (trackEvent.track) {
|
|
2159
2180
|
const track = trackEvent.track;
|
|
@@ -2209,13 +2230,6 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2209
2230
|
fullyLoaded.resolve();
|
|
2210
2231
|
});
|
|
2211
2232
|
|
|
2212
|
-
// This flag is used below in the language preference setup to check if this
|
|
2213
|
-
// load was canceled before the necessary events fire.
|
|
2214
|
-
let unloaded = false;
|
|
2215
|
-
this.cleanupOnUnload_.push(() => {
|
|
2216
|
-
unloaded = true;
|
|
2217
|
-
});
|
|
2218
|
-
|
|
2219
2233
|
// We can't switch to preferred languages, though, until the data is loaded.
|
|
2220
2234
|
shaka.util.MediaReadyState.waitForReadyState(this.video_,
|
|
2221
2235
|
HTMLMediaElement.HAVE_CURRENT_DATA,
|
|
@@ -2370,12 +2384,16 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2370
2384
|
// In Safari the initial assignment does not always work, so we schedule
|
|
2371
2385
|
// this process to be repeated several times to ensure that it has been put
|
|
2372
2386
|
// in the correct mode.
|
|
2373
|
-
new shaka.util.Timer(() => {
|
|
2387
|
+
const timer = new shaka.util.Timer(() => {
|
|
2374
2388
|
const textTracks = this.getMetadataTracks_();
|
|
2375
2389
|
for (const textTrack of textTracks) {
|
|
2376
2390
|
textTrack.mode = 'hidden';
|
|
2377
2391
|
}
|
|
2378
|
-
}).tickNow().tickAfter(
|
|
2392
|
+
}).tickNow().tickAfter(0.5);
|
|
2393
|
+
|
|
2394
|
+
this.cleanupOnUnload_.push(() => {
|
|
2395
|
+
timer.stop();
|
|
2396
|
+
});
|
|
2379
2397
|
}
|
|
2380
2398
|
|
|
2381
2399
|
|
|
@@ -2443,12 +2461,16 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2443
2461
|
// In Safari the initial assignment does not always work, so we schedule
|
|
2444
2462
|
// this process to be repeated several times to ensure that it has been put
|
|
2445
2463
|
// in the correct mode.
|
|
2446
|
-
new shaka.util.Timer(() => {
|
|
2464
|
+
const timer = new shaka.util.Timer(() => {
|
|
2447
2465
|
const chaptersTracks = this.getChaptersTracks_();
|
|
2448
2466
|
for (const chaptersTrack of chaptersTracks) {
|
|
2449
2467
|
chaptersTrack.mode = 'hidden';
|
|
2450
2468
|
}
|
|
2451
|
-
}).tickNow().tickAfter(
|
|
2469
|
+
}).tickNow().tickAfter(0.5);
|
|
2470
|
+
|
|
2471
|
+
this.cleanupOnUnload_.push(() => {
|
|
2472
|
+
timer.stop();
|
|
2473
|
+
});
|
|
2452
2474
|
}
|
|
2453
2475
|
|
|
2454
2476
|
/**
|
|
@@ -2547,21 +2569,31 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2547
2569
|
// Create the region observer. This will allow us to notify the app when we
|
|
2548
2570
|
// move in and out of timeline regions.
|
|
2549
2571
|
const regionObserver = new shaka.media.RegionObserver(this.regionTimeline_);
|
|
2550
|
-
|
|
2572
|
+
|
|
2573
|
+
regionObserver.addEventListener('enter', (event) => {
|
|
2574
|
+
/** @type {shaka.extern.TimelineRegionInfo} */
|
|
2575
|
+
const region = event['region'];
|
|
2551
2576
|
this.onRegionEvent_(shaka.Player.EventName.TimelineRegionEnter, region);
|
|
2552
|
-
};
|
|
2553
|
-
|
|
2577
|
+
});
|
|
2578
|
+
|
|
2579
|
+
regionObserver.addEventListener('exit', (event) => {
|
|
2580
|
+
/** @type {shaka.extern.TimelineRegionInfo} */
|
|
2581
|
+
const region = event['region'];
|
|
2554
2582
|
this.onRegionEvent_(shaka.Player.EventName.TimelineRegionExit, region);
|
|
2555
|
-
};
|
|
2556
|
-
|
|
2583
|
+
});
|
|
2584
|
+
|
|
2585
|
+
regionObserver.addEventListener('skip', (event) => {
|
|
2586
|
+
/** @type {shaka.extern.TimelineRegionInfo} */
|
|
2587
|
+
const region = event['region'];
|
|
2588
|
+
/** @type {boolean} */
|
|
2589
|
+
const seeking = event['seeking'];
|
|
2557
2590
|
// If we are seeking, we don't want to surface the enter/exit events since
|
|
2558
2591
|
// they didn't play through them.
|
|
2559
2592
|
if (!seeking) {
|
|
2560
2593
|
this.onRegionEvent_(shaka.Player.EventName.TimelineRegionEnter, region);
|
|
2561
2594
|
this.onRegionEvent_(shaka.Player.EventName.TimelineRegionExit, region);
|
|
2562
2595
|
}
|
|
2563
|
-
};
|
|
2564
|
-
regionObserver.setListeners(onEnterRegion, onExitRegion, onSkipRegion);
|
|
2596
|
+
});
|
|
2565
2597
|
|
|
2566
2598
|
// Now that we have all our observers, create a manager for them.
|
|
2567
2599
|
const manager = new shaka.media.PlayheadObserverManager(this.video_);
|
|
@@ -3454,7 +3486,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
3454
3486
|
const height = fullImageHeight / rows;
|
|
3455
3487
|
const totalImages = columns * rows;
|
|
3456
3488
|
const segmentDuration = reference.trueEndTime - reference.startTime;
|
|
3457
|
-
const thumbnailDuration =
|
|
3489
|
+
const thumbnailDuration =
|
|
3490
|
+
reference.getTileDuration() || (segmentDuration / totalImages);
|
|
3458
3491
|
let thumbnailTime = reference.startTime;
|
|
3459
3492
|
let positionX = 0;
|
|
3460
3493
|
let positionY = 0;
|
|
@@ -3477,6 +3510,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
3477
3510
|
positionY = Math.floor(thumbnailPosition / columns) * height;
|
|
3478
3511
|
}
|
|
3479
3512
|
return {
|
|
3513
|
+
imageHeight: fullImageHeight,
|
|
3514
|
+
imageWidth: fullImageWidth,
|
|
3480
3515
|
height: height,
|
|
3481
3516
|
positionX: positionX,
|
|
3482
3517
|
positionY: positionY,
|
|
@@ -3521,7 +3556,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
3521
3556
|
this.streamingEngine_.switchTextStream(stream);
|
|
3522
3557
|
this.onTextChanged_();
|
|
3523
3558
|
|
|
3524
|
-
// Workaround for
|
|
3559
|
+
// Workaround for
|
|
3560
|
+
// https://github.com/shaka-project/shaka-player/issues/1299
|
|
3525
3561
|
// When track is selected, back-propagate the language to
|
|
3526
3562
|
// currentTextLanguage_.
|
|
3527
3563
|
this.currentTextLanguage_ = stream.language;
|
|
@@ -3597,7 +3633,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
3597
3633
|
this.switchVariant_(variant, /* fromAdaptation= */ false, clearBuffer,
|
|
3598
3634
|
safeMargin);
|
|
3599
3635
|
|
|
3600
|
-
// Workaround for
|
|
3636
|
+
// Workaround for
|
|
3637
|
+
// https://github.com/shaka-project/shaka-player/issues/1299
|
|
3601
3638
|
// When track is selected, back-propagate the language to
|
|
3602
3639
|
// currentAudioLanguage_.
|
|
3603
3640
|
this.currentAdaptationSetCriteria_ = new shaka.media.ExampleBasedCriteria(
|
|
@@ -3878,20 +3915,24 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
3878
3915
|
const LanguageUtils = shaka.util.LanguageUtils;
|
|
3879
3916
|
const inputlanguage = LanguageUtils.normalize(language);
|
|
3880
3917
|
const chaptersTracks = this.getChaptersTracks_();
|
|
3881
|
-
const
|
|
3882
|
-
.
|
|
3883
|
-
if (!
|
|
3918
|
+
const chaptersTracksWithLanguage = chaptersTracks
|
|
3919
|
+
.filter((t) => LanguageUtils.normalize(t.language) == inputlanguage);
|
|
3920
|
+
if (!chaptersTracksWithLanguage || !chaptersTracksWithLanguage.length) {
|
|
3884
3921
|
return [];
|
|
3885
3922
|
}
|
|
3886
3923
|
const chapters = [];
|
|
3887
|
-
for (const
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
|
|
3924
|
+
for (const chaptersTrack of chaptersTracksWithLanguage) {
|
|
3925
|
+
if (chaptersTrack && chaptersTrack.cues) {
|
|
3926
|
+
for (const cue of chaptersTrack.cues) {
|
|
3927
|
+
/** @type {shaka.extern.Chapter} */
|
|
3928
|
+
const chapter = {
|
|
3929
|
+
title: cue.text,
|
|
3930
|
+
startTime: cue.startTime,
|
|
3931
|
+
endTime: cue.endTime,
|
|
3932
|
+
};
|
|
3933
|
+
chapters.push(chapter);
|
|
3934
|
+
}
|
|
3935
|
+
}
|
|
3895
3936
|
}
|
|
3896
3937
|
return chapters;
|
|
3897
3938
|
}
|
|
@@ -5060,7 +5101,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
5060
5101
|
// If the playback rate changes while seeking, Edge will cache the playback
|
|
5061
5102
|
// rate and use it after seeking.
|
|
5062
5103
|
//
|
|
5063
|
-
// https://github.com/
|
|
5104
|
+
// https://github.com/shaka-project/shaka-player/issues/951
|
|
5064
5105
|
if (newRate == 0) {
|
|
5065
5106
|
return;
|
|
5066
5107
|
}
|
|
@@ -6331,7 +6372,7 @@ shaka.Player.TYPICAL_BUFFERING_THRESHOLD_ = 0.5;
|
|
|
6331
6372
|
* @define {string} A version number taken from git at compile time.
|
|
6332
6373
|
* @export
|
|
6333
6374
|
*/
|
|
6334
|
-
shaka.Player.version = 'v3.2.
|
|
6375
|
+
shaka.Player.version = 'v3.2.5-uncompiled';
|
|
6335
6376
|
|
|
6336
6377
|
// Initialize the deprecation system using the version string we just set
|
|
6337
6378
|
// on the player.
|
package/lib/polyfill/all.js
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
goog.provide('shaka.polyfill');
|
|
8
8
|
|
|
9
9
|
goog.require('shaka.log');
|
|
10
|
-
goog.require('shaka.util.Iterables');
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
/**
|
|
@@ -40,8 +39,8 @@ shaka.polyfill = class {
|
|
|
40
39
|
*/
|
|
41
40
|
static register(polyfill, priority) {
|
|
42
41
|
const newItem = {priority: priority || 0, callback: polyfill};
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
for (let i = 0; i < shaka.polyfill.polyfills_.length; i++) {
|
|
43
|
+
const item = shaka.polyfill.polyfills_[i];
|
|
45
44
|
if (item.priority < newItem.priority) {
|
|
46
45
|
shaka.polyfill.polyfills_.splice(i, 0, newItem);
|
|
47
46
|
return;
|
|
@@ -12,7 +12,7 @@ goog.require('shaka.polyfill');
|
|
|
12
12
|
* @summary A polyfill to add support for EncryptionScheme queries in EME.
|
|
13
13
|
* @see https://wicg.github.io/encrypted-media-encryption-scheme/
|
|
14
14
|
* @see https://github.com/w3c/encrypted-media/pull/457
|
|
15
|
-
* @see https://github.com/
|
|
15
|
+
* @see https://github.com/shaka-project/eme-encryption-scheme-polyfill
|
|
16
16
|
* @export
|
|
17
17
|
*/
|
|
18
18
|
shaka.polyfill.EncryptionScheme = class {
|
|
@@ -24,37 +24,42 @@ shaka.polyfill.MediaCapabilities = class {
|
|
|
24
24
|
* @export
|
|
25
25
|
*/
|
|
26
26
|
static install() {
|
|
27
|
-
shaka.log.debug('MediaCapabilities: install');
|
|
28
|
-
|
|
29
27
|
// Since MediaCapabilities is not fully supported on Chromecast yet, we
|
|
30
28
|
// should always install polyfill for Chromecast.
|
|
31
29
|
// TODO: re-evaluate MediaCapabilities in the future versions of Chromecast.
|
|
32
30
|
// Since MediaCapabilities implementation is buggy in Apple browsers, we
|
|
33
31
|
// should always install polyfill for Apple browsers.
|
|
34
|
-
// See: https://github.com/
|
|
32
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3530
|
|
35
33
|
// TODO: re-evaluate MediaCapabilities in the future versions of Apple
|
|
36
34
|
// Browsers.
|
|
37
35
|
// Since MediaCapabilities implementation is buggy in PS5 browsers, we
|
|
38
36
|
// should always install polyfill for PS5 browsers.
|
|
39
|
-
// See: https://github.com/
|
|
37
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3582
|
|
40
38
|
// TODO: re-evaluate MediaCapabilities in the future versions of PS5
|
|
41
39
|
// Browsers.
|
|
42
40
|
if (!shaka.util.Platform.isChromecast() &&
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
shaka.log.
|
|
41
|
+
!shaka.util.Platform.isApple() &&
|
|
42
|
+
!shaka.util.Platform.isPS5() &&
|
|
43
|
+
navigator.mediaCapabilities) {
|
|
44
|
+
shaka.log.info(
|
|
47
45
|
'MediaCapabilities: Native mediaCapabilities support found.');
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
shaka.log.info('MediaCapabilities: install');
|
|
50
|
+
|
|
51
|
+
if (!navigator.mediaCapabilities) {
|
|
52
|
+
navigator.mediaCapabilities = /** @type {!MediaCapabilities} */ ({});
|
|
54
53
|
}
|
|
55
|
-
|
|
56
|
-
// MediaCapabilities
|
|
57
|
-
|
|
54
|
+
|
|
55
|
+
// Keep the patched MediaCapabilities object from being garbage-collected in
|
|
56
|
+
// Safari.
|
|
57
|
+
// See https://github.com/shaka-project/shaka-player/issues/3696#issuecomment-1009472718
|
|
58
|
+
shaka.polyfill.MediaCapabilities.originalMcap =
|
|
59
|
+
navigator.mediaCapabilities;
|
|
60
|
+
|
|
61
|
+
navigator.mediaCapabilities.decodingInfo =
|
|
62
|
+
shaka.polyfill.MediaCapabilities.decodingInfo_;
|
|
58
63
|
}
|
|
59
64
|
|
|
60
65
|
/**
|
|
@@ -182,6 +187,16 @@ shaka.polyfill.MediaCapabilities = class {
|
|
|
182
187
|
}
|
|
183
188
|
};
|
|
184
189
|
|
|
190
|
+
/**
|
|
191
|
+
* A copy of the MediaCapabilities instance, to prevent Safari from
|
|
192
|
+
* garbage-collecting the polyfilled method on it. We make it public and export
|
|
193
|
+
* it to ensure that it is not stripped out by the compiler.
|
|
194
|
+
*
|
|
195
|
+
* @type {MediaCapabilities}
|
|
196
|
+
* @export
|
|
197
|
+
*/
|
|
198
|
+
shaka.polyfill.MediaCapabilities.originalMcap = null;
|
|
199
|
+
|
|
185
200
|
// Install at a lower priority than MediaSource polyfill, so that we have
|
|
186
201
|
// MediaSource available first.
|
|
187
202
|
shaka.polyfill.register(shaka.polyfill.MediaCapabilities.install, -1);
|
|
@@ -39,7 +39,7 @@ shaka.polyfill.MediaSource = class {
|
|
|
39
39
|
shaka.polyfill.MediaSource.patchCastIsTypeSupported_();
|
|
40
40
|
} else if (safariVersion) {
|
|
41
41
|
// TS content is broken on Safari in general.
|
|
42
|
-
// See https://github.com/
|
|
42
|
+
// See https://github.com/shaka-project/shaka-player/issues/743
|
|
43
43
|
// and https://bugs.webkit.org/show_bug.cgi?id=165342
|
|
44
44
|
shaka.polyfill.MediaSource.rejectTsContent_();
|
|
45
45
|
|
package/lib/text/cue.js
CHANGED
|
@@ -210,6 +210,12 @@ shaka.text.Cue = class {
|
|
|
210
210
|
*/
|
|
211
211
|
this.nestedCues = [];
|
|
212
212
|
|
|
213
|
+
/**
|
|
214
|
+
* @override
|
|
215
|
+
* @exportInterface
|
|
216
|
+
*/
|
|
217
|
+
this.isContainer = false;
|
|
218
|
+
|
|
213
219
|
/**
|
|
214
220
|
* @override
|
|
215
221
|
* @exportInterface
|
|
@@ -276,7 +282,7 @@ shaka.text.Cue = class {
|
|
|
276
282
|
// Compare the start time, end time and payload of the cues first for
|
|
277
283
|
// performance optimization. We can avoid the more expensive recursive
|
|
278
284
|
// checks if the top-level properties don't match.
|
|
279
|
-
// See: https://github.com/
|
|
285
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3018
|
|
280
286
|
if (cue1.startTime != cue2.startTime || cue1.endTime != cue2.endTime ||
|
|
281
287
|
cue1.payload != cue2.payload) {
|
|
282
288
|
return false;
|
|
@@ -178,7 +178,8 @@ shaka.text.SimpleTextDisplayer = class {
|
|
|
178
178
|
// The browser will display cues with identical time ranges from the
|
|
179
179
|
// bottom up. Reversing the order of equal cues means the first one
|
|
180
180
|
// parsed will be at the top, as you would expect.
|
|
181
|
-
// See https://github.com/
|
|
181
|
+
// See https://github.com/shaka-project/shaka-player/issues/848 for
|
|
182
|
+
// more info.
|
|
182
183
|
// However, this ordering behavior is part of VTTCue's "line" field.
|
|
183
184
|
// Some platforms don't have a real VTTCue and use a polyfill instead.
|
|
184
185
|
// When VTTCue is polyfilled or does not support "line", we should _not_
|