shaka-player 3.1.6 → 3.1.7
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 +1516 -1501
- 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/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 +87 -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 +224 -218
- package/dist/locales.js +30 -30
- 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 +221 -221
- package/dist/shaka-player.compiled.debug.d.ts +221 -221
- package/dist/shaka-player.compiled.debug.externs.js +4 -3
- package/dist/shaka-player.compiled.debug.js +313 -321
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +4 -3
- package/dist/shaka-player.compiled.js +811 -816
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +263 -263
- package/dist/shaka-player.ui.debug.d.ts +263 -263
- package/dist/shaka-player.ui.debug.externs.js +4 -3
- package/dist/shaka-player.ui.debug.js +210 -218
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +4 -3
- package/dist/shaka-player.ui.js +940 -945
- 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/karma.conf.js +137 -30
- package/lib/abr/simple_abr_manager.js +12 -6
- package/lib/cast/cast_proxy.js +3 -4
- package/lib/cea/cea608_data_channel.js +3 -3
- package/lib/cea/cea608_memory.js +1 -1
- package/lib/cea/cea708_service.js +6 -5
- package/lib/cea/cea_decoder.js +1 -1
- package/lib/cea/i_caption_decoder.js +2 -3
- package/lib/cea/mp4_cea_parser.js +11 -5
- package/lib/cea/sei_processor.js +6 -3
- package/lib/dash/dash_parser.js +9 -11
- 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 +11 -9
- package/lib/hls/manifest_text_parser.js +3 -3
- package/lib/media/adaptation_set.js +1 -2
- package/lib/media/closed_caption_parser.js +0 -1
- 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/streaming_engine.js +6 -6
- package/lib/media/time_ranges_utils.js +1 -3
- package/lib/media/video_wrapper.js +1 -1
- package/lib/net/networking_engine.js +1 -1
- package/lib/offline/storage.js +4 -4
- package/lib/player.js +28 -14
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +3 -3
- package/lib/polyfill/mediasource.js +1 -1
- package/lib/routing/walker.js +2 -3
- package/lib/text/cue.js +1 -1
- package/lib/text/simple_text_displayer.js +2 -1
- package/lib/text/text_engine.js +1 -1
- package/lib/text/ttml_text_parser.js +8 -5
- package/lib/text/ui_text_displayer.js +1 -1
- 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/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 +4 -3
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -5
- package/lib/util/xml_utils.js +15 -7
- package/package.json +61 -36
- 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 +2 -15
- package/test/dash/dash_parser_manifest_unit.js +2 -16
- 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 +2 -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 +3 -17
- package/test/media/drm_engine_unit.js +4 -23
- 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 +1 -6
- package/test/media/region_timeline_unit.js +0 -3
- 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 +9 -36
- package/test/media/streaming_engine_unit.js +11 -35
- 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 +21 -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 +52 -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 +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 +0 -2
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +5 -19
- 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 +0 -6
- 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 +2 -11
- 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 +1 -12
- 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 +3 -8
- 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/less/ad_controls.less +4 -4
- package/ui/less/buttons.less +5 -5
- 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/.github/workflows/build_and_test.yaml +0 -73
- package/.github/workflows/release.yaml +0 -53
- package/externs/svgelement.js +0 -18
package/lib/hls/hls_parser.js
CHANGED
|
@@ -29,7 +29,6 @@ goog.require('shaka.util.DataViewReader');
|
|
|
29
29
|
goog.require('shaka.util.Error');
|
|
30
30
|
goog.require('shaka.util.FakeEvent');
|
|
31
31
|
goog.require('shaka.util.Functional');
|
|
32
|
-
goog.require('shaka.util.Iterables');
|
|
33
32
|
goog.require('shaka.util.LanguageUtils');
|
|
34
33
|
goog.require('shaka.util.ManifestParserUtils');
|
|
35
34
|
goog.require('shaka.util.MimeUtils');
|
|
@@ -885,7 +884,7 @@ shaka.hls.HlsParser = class {
|
|
|
885
884
|
// the content. This means that if the content changes profiles, it should
|
|
886
885
|
// include both. Since all known browsers support changing profiles
|
|
887
886
|
// without any other work, just ignore them. See also:
|
|
888
|
-
// https://github.com/
|
|
887
|
+
// https://github.com/shaka-project/shaka-player/issues/1817
|
|
889
888
|
const shortCodec = shaka.util.MimeUtils.getCodecBase(codec);
|
|
890
889
|
if (!seen.has(shortCodec)) {
|
|
891
890
|
ret.push(codec);
|
|
@@ -1653,8 +1652,8 @@ shaka.hls.HlsParser = class {
|
|
|
1653
1652
|
// Create SegmentReferences for the partial segments.
|
|
1654
1653
|
const partialSegmentRefs = [];
|
|
1655
1654
|
if (this.lowLatencyMode_ && hlsSegment.partialSegments.length) {
|
|
1656
|
-
|
|
1657
|
-
|
|
1655
|
+
for (let i = 0; i < hlsSegment.partialSegments.length; i++) {
|
|
1656
|
+
const item = hlsSegment.partialSegments[i];
|
|
1658
1657
|
const pPreviousReference = i == 0 ?
|
|
1659
1658
|
previousReference : partialSegmentRefs[partialSegmentRefs.length - 1];
|
|
1660
1659
|
const pStartTime = (i == 0) ? startTime : pPreviousReference.endTime;
|
|
@@ -1675,6 +1674,9 @@ shaka.hls.HlsParser = class {
|
|
|
1675
1674
|
this.parseByteRange_(pPreviousReference, pByterange);
|
|
1676
1675
|
}
|
|
1677
1676
|
const pUri = item.getAttributeValue('URI');
|
|
1677
|
+
if (!pUri) {
|
|
1678
|
+
continue;
|
|
1679
|
+
}
|
|
1678
1680
|
const pAbsoluteUri = shaka.hls.Utils.constructAbsoluteUri(
|
|
1679
1681
|
absoluteMediaPlaylistUri, pUri);
|
|
1680
1682
|
|
|
@@ -1860,9 +1862,9 @@ shaka.hls.HlsParser = class {
|
|
|
1860
1862
|
// With delta updates, the DISCONTINUITY may be skipped. Check if
|
|
1861
1863
|
// the discontintuity Sequence Number based on the media sequence
|
|
1862
1864
|
// number.
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
position) {
|
|
1865
|
+
const disconMap = discontinuityToMediaSequence;
|
|
1866
|
+
while (disconMap.has(discontintuitySequenceNum + 1) &&
|
|
1867
|
+
disconMap.get(discontintuitySequenceNum + 1) < position) {
|
|
1866
1868
|
discontintuitySequenceNum++;
|
|
1867
1869
|
}
|
|
1868
1870
|
}
|
|
@@ -1873,8 +1875,8 @@ shaka.hls.HlsParser = class {
|
|
|
1873
1875
|
/** @type {!Array.<!shaka.media.SegmentReference>} */
|
|
1874
1876
|
const references = [];
|
|
1875
1877
|
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
+
for (let i = 0; i < hlsSegments.length; i++) {
|
|
1879
|
+
const item = hlsSegments[i];
|
|
1878
1880
|
const previousReference = references[references.length - 1];
|
|
1879
1881
|
const startTime = (i == 0) ? firstStartTime :
|
|
1880
1882
|
previousReference.endTime;
|
|
@@ -13,7 +13,6 @@ goog.require('shaka.hls.Segment');
|
|
|
13
13
|
goog.require('shaka.hls.Tag');
|
|
14
14
|
goog.require('shaka.hls.Utils');
|
|
15
15
|
goog.require('shaka.util.Error');
|
|
16
|
-
goog.require('shaka.util.Iterables');
|
|
17
16
|
goog.require('shaka.util.StringUtils');
|
|
18
17
|
goog.require('shaka.util.TextParser');
|
|
19
18
|
|
|
@@ -82,8 +81,9 @@ shaka.hls.ManifestTextParser = class {
|
|
|
82
81
|
const tags = [];
|
|
83
82
|
// Initialize to "true" to skip the first element.
|
|
84
83
|
skip = true;
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
for (let i = 0; i < lines.length; i++) {
|
|
85
|
+
const line = lines[i];
|
|
86
|
+
const next = lines[i + 1];
|
|
87
87
|
// Skip comments
|
|
88
88
|
if (shaka.hls.Utils.isComment(line) || skip) {
|
|
89
89
|
skip = false;
|
|
@@ -8,7 +8,6 @@ goog.provide('shaka.media.AdaptationSet');
|
|
|
8
8
|
|
|
9
9
|
goog.require('goog.asserts');
|
|
10
10
|
goog.require('shaka.log');
|
|
11
|
-
goog.require('shaka.util.Iterables');
|
|
12
11
|
goog.require('shaka.util.MimeUtils');
|
|
13
12
|
|
|
14
13
|
|
|
@@ -215,7 +214,7 @@ shaka.media.AdaptationSet = class {
|
|
|
215
214
|
codecsA.sort();
|
|
216
215
|
codecsB.sort();
|
|
217
216
|
|
|
218
|
-
for (
|
|
217
|
+
for (let i = 0; i < codecsA.length; i++) {
|
|
219
218
|
if (codecsA[i] != codecsB[i]) {
|
|
220
219
|
return false;
|
|
221
220
|
}
|
|
@@ -11,7 +11,6 @@ goog.require('shaka.cea.CeaDecoder');
|
|
|
11
11
|
goog.require('shaka.cea.Mp4CeaParser');
|
|
12
12
|
goog.require('shaka.util.BufferUtils');
|
|
13
13
|
goog.requireType('shaka.cea.ICaptionDecoder');
|
|
14
|
-
goog.requireType('shaka.cea.ICaptionDecoder.ClosedCaption');
|
|
15
14
|
goog.requireType('shaka.cea.ICeaParser');
|
|
16
15
|
|
|
17
16
|
|
|
@@ -31,7 +31,7 @@ shaka.media.ContentWorkarounds = class {
|
|
|
31
31
|
*
|
|
32
32
|
* @param {!BufferSource} initSegmentBuffer
|
|
33
33
|
* @return {!Uint8Array}
|
|
34
|
-
* @see https://github.com/
|
|
34
|
+
* @see https://github.com/shaka-project/shaka-player/issues/2759
|
|
35
35
|
*/
|
|
36
36
|
static fakeEncryption(initSegmentBuffer) {
|
|
37
37
|
const ContentWorkarounds = shaka.media.ContentWorkarounds;
|
|
@@ -283,7 +283,7 @@ shaka.media.ContentWorkarounds = class {
|
|
|
283
283
|
*
|
|
284
284
|
* @const {!shaka.util.Lazy.<!Uint8Array>}
|
|
285
285
|
* @private
|
|
286
|
-
* @see https://github.com/
|
|
286
|
+
* @see https://github.com/shaka-project/shaka-player/issues/2759
|
|
287
287
|
*/
|
|
288
288
|
shaka.media.ContentWorkarounds.CANNED_SINF_BOX_ =
|
|
289
289
|
new shaka.util.Lazy(() => new Uint8Array([
|
package/lib/media/drm_engine.js
CHANGED
|
@@ -616,7 +616,7 @@ shaka.media.DrmEngine = class {
|
|
|
616
616
|
// first MIME type even if the others are supported. To work around this,
|
|
617
617
|
// we say that Edge supports everything.
|
|
618
618
|
//
|
|
619
|
-
// See https://github.com/
|
|
619
|
+
// See https://github.com/shaka-project/shaka-player/issues/1495 for details.
|
|
620
620
|
if (shaka.util.Platform.isLegacyEdge()) {
|
|
621
621
|
return true;
|
|
622
622
|
}
|
|
@@ -628,7 +628,8 @@ shaka.media.DrmEngine = class {
|
|
|
628
628
|
// Some Tizen devices seem to misreport AC-3 support. This works around
|
|
629
629
|
// the issue, by falling back to EC-3, which seems to be supported on the
|
|
630
630
|
// same devices and be correctly reported in all cases we have observed.
|
|
631
|
-
// See https://github.com/
|
|
631
|
+
// See https://github.com/shaka-project/shaka-player/issues/2989 for
|
|
632
|
+
// details.
|
|
632
633
|
const fallback = contentType.replace('ac-3', 'ec-3');
|
|
633
634
|
return this.supportedTypes_.has(contentType) ||
|
|
634
635
|
this.supportedTypes_.has(fallback);
|
|
@@ -830,7 +830,8 @@ shaka.media.MediaSourceEngine = class {
|
|
|
830
830
|
* @private
|
|
831
831
|
*/
|
|
832
832
|
setTimestampOffset_(contentType, timestampOffset) {
|
|
833
|
-
// Work around for
|
|
833
|
+
// Work around for
|
|
834
|
+
// https://github.com/shaka-project/shaka-player/issues/1281:
|
|
834
835
|
// TODO(https://bit.ly/2ttKiBU): follow up when this is fixed in Edge
|
|
835
836
|
if (timestampOffset < 0) {
|
|
836
837
|
// Try to prevent rounding errors in Edge from removing the first
|
|
@@ -1100,7 +1101,7 @@ shaka.media.MediaSourceEngine = class {
|
|
|
1100
1101
|
// then insert fake encryption metadata for init segments that lack it.
|
|
1101
1102
|
// The MP4 requirement is because we can currently only do this
|
|
1102
1103
|
// transformation on MP4 containers.
|
|
1103
|
-
// See: https://github.com/
|
|
1104
|
+
// See: https://github.com/shaka-project/shaka-player/issues/2759
|
|
1104
1105
|
if (isInitSegment &&
|
|
1105
1106
|
encryptionExpected &&
|
|
1106
1107
|
shaka.util.Platform.requiresEncryptionInfoInAllInitSegments() &&
|
|
@@ -11,8 +11,6 @@ goog.require('shaka.log');
|
|
|
11
11
|
goog.require('shaka.media.InitSegmentReference');
|
|
12
12
|
goog.require('shaka.media.SegmentReference');
|
|
13
13
|
goog.require('shaka.util.Error');
|
|
14
|
-
goog.require('shaka.util.Functional');
|
|
15
|
-
goog.require('shaka.util.Iterables');
|
|
16
14
|
goog.require('shaka.util.Mp4Parser');
|
|
17
15
|
|
|
18
16
|
|
|
@@ -123,8 +121,7 @@ shaka.media.Mp4SegmentIndexParser = class {
|
|
|
123
121
|
let unscaledStartTime = earliestPresentationTime;
|
|
124
122
|
let startByte = sidxOffset + box.size + firstOffset;
|
|
125
123
|
|
|
126
|
-
for (
|
|
127
|
-
shaka.util.Functional.ignored(_);
|
|
124
|
+
for (let i = 0; i < referenceCount; i++) {
|
|
128
125
|
// |chunk| is 1 bit for |referenceType|, and 31 bits for |referenceSize|.
|
|
129
126
|
const chunk = box.reader.readUint32();
|
|
130
127
|
const referenceType = (chunk & 0x80000000) >>> 31;
|
package/lib/media/playhead.js
CHANGED
|
@@ -256,7 +256,7 @@ shaka.media.MediaSourcePlayhead = class {
|
|
|
256
256
|
// We don't buffer when the livestream video is paused and the playhead time
|
|
257
257
|
// is out of the seek range; thus, we do not clamp the current time when the
|
|
258
258
|
// video is paused.
|
|
259
|
-
// https://github.com/
|
|
259
|
+
// https://github.com/shaka-project/shaka-player/issues/1121
|
|
260
260
|
if (this.mediaElement_.readyState > 0 && !this.mediaElement_.paused) {
|
|
261
261
|
return this.clampTime_(time);
|
|
262
262
|
}
|
|
@@ -362,7 +362,7 @@ shaka.media.MediaSourcePlayhead = class {
|
|
|
362
362
|
* presentation duration. Seeking to or starting at duration does not work
|
|
363
363
|
* consistently across browsers.
|
|
364
364
|
*
|
|
365
|
-
* @see https://github.com/
|
|
365
|
+
* @see https://github.com/shaka-project/shaka-player/issues/979
|
|
366
366
|
* @param {number} time
|
|
367
367
|
* @return {number} The adjusted seek time.
|
|
368
368
|
* @private
|
|
@@ -355,14 +355,23 @@ shaka.media.PresentationTimeline = class {
|
|
|
355
355
|
* starting after this time should be assumed to be unavailable.
|
|
356
356
|
*
|
|
357
357
|
* @return {number} The current segment availability end time, in seconds,
|
|
358
|
-
* relative to the start of the presentation.
|
|
359
|
-
*
|
|
358
|
+
* relative to the start of the presentation. For VOD, the availability
|
|
359
|
+
* end time is the content's duration. If the Player's playRangeEnd
|
|
360
|
+
* configuration is used, this can override the duration.
|
|
360
361
|
* @export
|
|
361
362
|
*/
|
|
362
363
|
getSegmentAvailabilityEnd() {
|
|
363
364
|
if (!this.isLive() && !this.isInProgress()) {
|
|
364
365
|
// It's a static manifest (can also be a dynamic->static conversion)
|
|
365
|
-
|
|
366
|
+
if (this.maxSegmentEndTime_) {
|
|
367
|
+
// If we know segment times, use the min of that and duration.
|
|
368
|
+
// Note that the playRangeEnd configuration changes this.duration_.
|
|
369
|
+
// See https://github.com/shaka-project/shaka-player/issues/4026
|
|
370
|
+
return Math.min(this.maxSegmentEndTime_, this.duration_);
|
|
371
|
+
} else {
|
|
372
|
+
// If we don't have segment times, use duration.
|
|
373
|
+
return this.duration_;
|
|
374
|
+
}
|
|
366
375
|
}
|
|
367
376
|
// Can be either live or "in-progress recording" (live with known duration)
|
|
368
377
|
return Math.min(this.getLiveEdge_() + this.availabilityTimeOffset_,
|
|
@@ -389,10 +398,11 @@ shaka.media.PresentationTimeline = class {
|
|
|
389
398
|
// For VOD, the offset and end time are ignored, and we just return the
|
|
390
399
|
// earliest segment time. All segments are "safe" in VOD. However, we
|
|
391
400
|
// should round up to the nearest millisecond to avoid issues like
|
|
392
|
-
// https://github.com/
|
|
393
|
-
// seek repeatedly to catch up to the seek range, and never
|
|
394
|
-
// "arrived" within it. The video's currentTime is not as
|
|
395
|
-
// JS number representing the earliest segment time for
|
|
401
|
+
// https://github.com/shaka-project/shaka-player/issues/2831, in which we
|
|
402
|
+
// tried to seek repeatedly to catch up to the seek range, and never
|
|
403
|
+
// actually "arrived" within it. The video's currentTime is not as
|
|
404
|
+
// accurate as the JS number representing the earliest segment time for
|
|
405
|
+
// some content.
|
|
396
406
|
if (this.segmentAvailabilityDuration_ == Infinity) {
|
|
397
407
|
return Math.ceil(earliestSegmentTime * 1e3) / 1e3;
|
|
398
408
|
}
|
|
@@ -407,7 +417,7 @@ shaka.media.PresentationTimeline = class {
|
|
|
407
417
|
// Add the offset to the availability start to ensure that we don't fall
|
|
408
418
|
// outside the availability window while we buffer; we don't need to add the
|
|
409
419
|
// offset to earliestSegmentTime since that won't change over time.
|
|
410
|
-
// Also see: https://github.com/
|
|
420
|
+
// Also see: https://github.com/shaka-project/shaka-player/issues/692
|
|
411
421
|
const desiredStart =
|
|
412
422
|
Math.min(availabilityStart + offset, this.getSeekRangeEnd());
|
|
413
423
|
return Math.max(earliestSegmentTime, desiredStart);
|
|
@@ -669,7 +669,7 @@ shaka.media.StreamingEngine = class {
|
|
|
669
669
|
|
|
670
670
|
if (mediaState.waitingToClearBuffer) {
|
|
671
671
|
// May not be performing an update, but an update will still happen.
|
|
672
|
-
// See: https://github.com/
|
|
672
|
+
// See: https://github.com/shaka-project/shaka-player/issues/334
|
|
673
673
|
shaka.log.debug(logPrefix, 'clear: already waiting');
|
|
674
674
|
return;
|
|
675
675
|
}
|
|
@@ -909,9 +909,9 @@ shaka.media.StreamingEngine = class {
|
|
|
909
909
|
// buffering forever at the end.
|
|
910
910
|
// We should only do this if the duration needs to shrink.
|
|
911
911
|
// Growing it by less than 1ms can actually cause buffering on
|
|
912
|
-
// replay, as in https://github.com/
|
|
912
|
+
// replay, as in https://github.com/shaka-project/shaka-player/issues/979
|
|
913
913
|
// On some platforms, this can spuriously be 0, so ignore this case.
|
|
914
|
-
// https://github.com/
|
|
914
|
+
// https://github.com/shaka-project/shaka-player/issues/1967,
|
|
915
915
|
const duration = this.playerInterface_.mediaSourceEngine.getDuration();
|
|
916
916
|
if (duration != 0 &&
|
|
917
917
|
duration < this.manifest_.presentationTimeline.getDuration()) {
|
|
@@ -1702,7 +1702,7 @@ shaka.media.StreamingEngine = class {
|
|
|
1702
1702
|
const bufferedBehind = presentationTime - startTime;
|
|
1703
1703
|
|
|
1704
1704
|
const overflow = bufferedBehind - bufferBehind;
|
|
1705
|
-
// See: https://github.com/
|
|
1705
|
+
// See: https://github.com/shaka-project/shaka-player/issues/2982
|
|
1706
1706
|
if (overflow <= 0.01) {
|
|
1707
1707
|
shaka.log.v2(logPrefix,
|
|
1708
1708
|
'buffer behind okay:',
|
|
@@ -2041,7 +2041,7 @@ shaka.media.StreamingEngine.MediaState_;
|
|
|
2041
2041
|
* of the Period.
|
|
2042
2042
|
*
|
|
2043
2043
|
* NOTE: This was increased as part of the solution to
|
|
2044
|
-
* https://github.com/
|
|
2044
|
+
* https://github.com/shaka-project/shaka-player/issues/1281
|
|
2045
2045
|
*
|
|
2046
2046
|
* @const {number}
|
|
2047
2047
|
* @private
|
|
@@ -2055,7 +2055,7 @@ shaka.media.StreamingEngine.APPEND_WINDOW_START_FUDGE_ = 0.1;
|
|
|
2055
2055
|
* the Period. This rounding error could then create an artificial gap and a
|
|
2056
2056
|
* stutter when the gap-jumping logic takes over.
|
|
2057
2057
|
*
|
|
2058
|
-
* https://github.com/
|
|
2058
|
+
* https://github.com/shaka-project/shaka-player/issues/1597
|
|
2059
2059
|
*
|
|
2060
2060
|
* @const {number}
|
|
2061
2061
|
* @private
|
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
goog.provide('shaka.media.TimeRangesUtils');
|
|
8
8
|
|
|
9
|
-
goog.require('shaka.util.Iterables');
|
|
10
|
-
|
|
11
9
|
|
|
12
10
|
/**
|
|
13
11
|
* @summary A set of utility functions for dealing with TimeRanges objects.
|
|
@@ -157,7 +155,7 @@ shaka.media.TimeRangesUtils = class {
|
|
|
157
155
|
return [];
|
|
158
156
|
}
|
|
159
157
|
const ret = [];
|
|
160
|
-
for (
|
|
158
|
+
for (let i = 0; i < b.length; i++) {
|
|
161
159
|
ret.push({start: b.start(i), end: b.end(i)});
|
|
162
160
|
}
|
|
163
161
|
return ret;
|
|
@@ -141,7 +141,7 @@ shaka.media.VideoWrapper = class {
|
|
|
141
141
|
// TODO: Need further investigation why it happens. Before and after
|
|
142
142
|
// setting the current time, video.readyState is 1, video.paused is true,
|
|
143
143
|
// and video.buffered's TimeRanges length is 0.
|
|
144
|
-
// See: https://github.com/
|
|
144
|
+
// See: https://github.com/shaka-project/shaka-player/issues/1298
|
|
145
145
|
this.mover_.moveTo(
|
|
146
146
|
this.video_.currentTime == 0 ?
|
|
147
147
|
startTime :
|
|
@@ -421,7 +421,7 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
|
|
|
421
421
|
}
|
|
422
422
|
|
|
423
423
|
// Schemes are meant to be case-insensitive.
|
|
424
|
-
// See https://github.com/
|
|
424
|
+
// See https://github.com/shaka-project/shaka-player/issues/2173
|
|
425
425
|
// and https://tools.ietf.org/html/rfc3986#section-3.1
|
|
426
426
|
scheme = scheme.toLowerCase();
|
|
427
427
|
|
package/lib/offline/storage.js
CHANGED
|
@@ -600,10 +600,10 @@ shaka.offline.Storage = class {
|
|
|
600
600
|
storage, drmEngine, manifest, uri, metadata, config, downloader) {
|
|
601
601
|
const pendingContent = shaka.offline.StoredContentUtils.fromManifest(
|
|
602
602
|
uri, manifest, /* size= */ 0, metadata);
|
|
603
|
-
// In https://github.com/
|
|
604
|
-
// callback would be removed by the compiler if we reference the
|
|
605
|
-
// the onProgress closure below. Reading it into a local
|
|
606
|
-
// seems to work around this apparent compiler bug.
|
|
603
|
+
// In https://github.com/shaka-project/shaka-player/issues/2652, we found
|
|
604
|
+
// that this callback would be removed by the compiler if we reference the
|
|
605
|
+
// config in the onProgress closure below. Reading it into a local
|
|
606
|
+
// variable first seems to work around this apparent compiler bug.
|
|
607
607
|
const progressCallback = config.offline.progressCallback;
|
|
608
608
|
|
|
609
609
|
const onProgress = (progress, size) => {
|
package/lib/player.js
CHANGED
|
@@ -2120,6 +2120,14 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2120
2120
|
|
|
2121
2121
|
this.playhead_ = new shaka.media.SrcEqualsPlayhead(has.mediaElement);
|
|
2122
2122
|
|
|
2123
|
+
// This flag is used below in the language preference setup and
|
|
2124
|
+
// track-management to check if this load was canceled before the necessary
|
|
2125
|
+
// events fired.
|
|
2126
|
+
let unloaded = false;
|
|
2127
|
+
this.cleanupOnUnload_.push(() => {
|
|
2128
|
+
unloaded = true;
|
|
2129
|
+
});
|
|
2130
|
+
|
|
2123
2131
|
if (has.startTime != null) {
|
|
2124
2132
|
this.playhead_.setStartTime(has.startTime);
|
|
2125
2133
|
}
|
|
@@ -2147,7 +2155,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2147
2155
|
|
|
2148
2156
|
// Wait for the 'loadedmetadata' event to measure load() latency, but only
|
|
2149
2157
|
// if preload is set in a way that would result in this event firing
|
|
2150
|
-
// automatically.
|
|
2158
|
+
// automatically.
|
|
2159
|
+
// See https://github.com/shaka-project/shaka-player/issues/2483
|
|
2151
2160
|
if (this.video_.preload != 'none') {
|
|
2152
2161
|
this.eventManager_.listenOnce(this.video_, 'loadedmetadata', () => {
|
|
2153
2162
|
const now = Date.now() / 1000;
|
|
@@ -2170,6 +2179,12 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2170
2179
|
}
|
|
2171
2180
|
if (this.video_.textTracks) {
|
|
2172
2181
|
this.eventManager_.listen(this.video_.textTracks, 'addtrack', (e) => {
|
|
2182
|
+
// If we have moved on to another piece of content while waiting for
|
|
2183
|
+
// the above event, we should not process tracks here.
|
|
2184
|
+
if (unloaded) {
|
|
2185
|
+
return;
|
|
2186
|
+
}
|
|
2187
|
+
|
|
2173
2188
|
this.onTracksChanged_();
|
|
2174
2189
|
this.processTimedMetadataSrcEqls_(/** @type {!TrackEvent} */(e));
|
|
2175
2190
|
});
|
|
@@ -2211,13 +2226,6 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2211
2226
|
fullyLoaded.resolve();
|
|
2212
2227
|
});
|
|
2213
2228
|
|
|
2214
|
-
// This flag is used below in the language preference setup to check if this
|
|
2215
|
-
// load was canceled before the necessary events fire.
|
|
2216
|
-
let unloaded = false;
|
|
2217
|
-
this.cleanupOnUnload_.push(() => {
|
|
2218
|
-
unloaded = true;
|
|
2219
|
-
});
|
|
2220
|
-
|
|
2221
2229
|
// We can't switch to preferred languages, though, until the data is loaded.
|
|
2222
2230
|
shaka.util.MediaReadyState.waitForReadyState(this.video_,
|
|
2223
2231
|
HTMLMediaElement.HAVE_CURRENT_DATA,
|
|
@@ -2375,12 +2383,16 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
2375
2383
|
// In Safari the initial assignment does not always work, so we schedule
|
|
2376
2384
|
// this process to be repeated several times to ensure that it has been put
|
|
2377
2385
|
// in the correct mode.
|
|
2378
|
-
new shaka.util.Timer(() => {
|
|
2386
|
+
const timer = new shaka.util.Timer(() => {
|
|
2379
2387
|
const textTracks = this.getMetadataTracks_();
|
|
2380
2388
|
for (const textTrack of textTracks) {
|
|
2381
2389
|
textTrack.mode = 'hidden';
|
|
2382
2390
|
}
|
|
2383
|
-
}).tickNow().tickAfter(
|
|
2391
|
+
}).tickNow().tickAfter(0.5);
|
|
2392
|
+
|
|
2393
|
+
this.cleanupOnUnload_.push(() => {
|
|
2394
|
+
timer.stop();
|
|
2395
|
+
});
|
|
2384
2396
|
}
|
|
2385
2397
|
|
|
2386
2398
|
|
|
@@ -3455,7 +3467,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
3455
3467
|
this.streamingEngine_.switchTextStream(stream);
|
|
3456
3468
|
this.onTextChanged_();
|
|
3457
3469
|
|
|
3458
|
-
// Workaround for
|
|
3470
|
+
// Workaround for
|
|
3471
|
+
// https://github.com/shaka-project/shaka-player/issues/1299
|
|
3459
3472
|
// When track is selected, back-propagate the language to
|
|
3460
3473
|
// currentTextLanguage_.
|
|
3461
3474
|
this.currentTextLanguage_ = stream.language;
|
|
@@ -3531,7 +3544,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
3531
3544
|
this.switchVariant_(variant, /* fromAdaptation= */ false, clearBuffer,
|
|
3532
3545
|
safeMargin);
|
|
3533
3546
|
|
|
3534
|
-
// Workaround for
|
|
3547
|
+
// Workaround for
|
|
3548
|
+
// https://github.com/shaka-project/shaka-player/issues/1299
|
|
3535
3549
|
// When track is selected, back-propagate the language to
|
|
3536
3550
|
// currentAudioLanguage_.
|
|
3537
3551
|
this.currentAdaptationSetCriteria_ = new shaka.media.ExampleBasedCriteria(
|
|
@@ -4854,7 +4868,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
|
|
|
4854
4868
|
// If the playback rate changes while seeking, Edge will cache the playback
|
|
4855
4869
|
// rate and use it after seeking.
|
|
4856
4870
|
//
|
|
4857
|
-
// https://github.com/
|
|
4871
|
+
// https://github.com/shaka-project/shaka-player/issues/951
|
|
4858
4872
|
if (newRate == 0) {
|
|
4859
4873
|
return;
|
|
4860
4874
|
}
|
|
@@ -6118,7 +6132,7 @@ shaka.Player.TYPICAL_BUFFERING_THRESHOLD_ = 0.5;
|
|
|
6118
6132
|
* @define {string} A version number taken from git at compile time.
|
|
6119
6133
|
* @export
|
|
6120
6134
|
*/
|
|
6121
|
-
shaka.Player.version = 'v3.1.
|
|
6135
|
+
shaka.Player.version = 'v3.1.7-uncompiled';
|
|
6122
6136
|
|
|
6123
6137
|
// Initialize the deprecation system using the version string we just set
|
|
6124
6138
|
// 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 {
|
|
@@ -29,12 +29,12 @@ shaka.polyfill.MediaCapabilities = class {
|
|
|
29
29
|
// TODO: re-evaluate MediaCapabilities in the future versions of Chromecast.
|
|
30
30
|
// Since MediaCapabilities implementation is buggy in Apple browsers, we
|
|
31
31
|
// should always install polyfill for Apple browsers.
|
|
32
|
-
// See: https://github.com/
|
|
32
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3530
|
|
33
33
|
// TODO: re-evaluate MediaCapabilities in the future versions of Apple
|
|
34
34
|
// Browsers.
|
|
35
35
|
// Since MediaCapabilities implementation is buggy in PS5 browsers, we
|
|
36
36
|
// should always install polyfill for PS5 browsers.
|
|
37
|
-
// See: https://github.com/
|
|
37
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3582
|
|
38
38
|
// TODO: re-evaluate MediaCapabilities in the future versions of PS5
|
|
39
39
|
// Browsers.
|
|
40
40
|
if (!shaka.util.Platform.isChromecast() &&
|
|
@@ -54,7 +54,7 @@ shaka.polyfill.MediaCapabilities = class {
|
|
|
54
54
|
|
|
55
55
|
// Keep the patched MediaCapabilities object from being garbage-collected in
|
|
56
56
|
// Safari.
|
|
57
|
-
// See https://github.com/
|
|
57
|
+
// See https://github.com/shaka-project/shaka-player/issues/3696#issuecomment-1009472718
|
|
58
58
|
shaka.polyfill.MediaCapabilities.originalMcap =
|
|
59
59
|
navigator.mediaCapabilities;
|
|
60
60
|
|
|
@@ -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/routing/walker.js
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
goog.provide('shaka.routing.Walker');
|
|
8
|
-
goog.provide('shaka.routing.Walker.Implementation');
|
|
9
8
|
|
|
10
9
|
goog.require('goog.asserts');
|
|
11
10
|
goog.require('shaka.routing.Node');
|
|
@@ -81,7 +80,7 @@ shaka.routing.Walker = class {
|
|
|
81
80
|
* new work is added (and this is not null) it can be resolved. The only
|
|
82
81
|
* time when this should be non-null is when we are waiting for more work.
|
|
83
82
|
*
|
|
84
|
-
* @private {shaka.util.PublicPromise}
|
|
83
|
+
* @private {?shaka.util.PublicPromise}
|
|
85
84
|
*/
|
|
86
85
|
this.waitForWork_ = null;
|
|
87
86
|
|
|
@@ -91,7 +90,7 @@ shaka.routing.Walker = class {
|
|
|
91
90
|
/** @private {?shaka.routing.Walker.ActiveRoute_} */
|
|
92
91
|
this.currentRoute_ = null;
|
|
93
92
|
|
|
94
|
-
/** @private {shaka.util.AbortableOperation} */
|
|
93
|
+
/** @private {?shaka.util.AbortableOperation} */
|
|
95
94
|
this.currentStep_ = null;
|
|
96
95
|
|
|
97
96
|
/**
|
package/lib/text/cue.js
CHANGED
|
@@ -282,7 +282,7 @@ shaka.text.Cue = class {
|
|
|
282
282
|
// Compare the start time, end time and payload of the cues first for
|
|
283
283
|
// performance optimization. We can avoid the more expensive recursive
|
|
284
284
|
// checks if the top-level properties don't match.
|
|
285
|
-
// See: https://github.com/
|
|
285
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3018
|
|
286
286
|
if (cue1.startTime != cue2.startTime || cue1.endTime != cue2.endTime ||
|
|
287
287
|
cue1.payload != cue2.payload) {
|
|
288
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_
|
package/lib/text/text_engine.js
CHANGED
|
@@ -12,7 +12,7 @@ goog.require('shaka.util.BufferUtils');
|
|
|
12
12
|
goog.require('shaka.util.Functional');
|
|
13
13
|
goog.require('shaka.util.IDestroyable');
|
|
14
14
|
goog.require('shaka.util.MimeUtils');
|
|
15
|
-
goog.requireType('shaka.cea.ICaptionDecoder
|
|
15
|
+
goog.requireType('shaka.cea.ICaptionDecoder');
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
// TODO: revisit this when Closure Compiler supports partially-exported classes.
|
|
@@ -536,8 +536,10 @@ shaka.text.TtmlTextParser = class {
|
|
|
536
536
|
|
|
537
537
|
cue.textAlign = Cue.textAlign[align.toUpperCase()];
|
|
538
538
|
} else {
|
|
539
|
-
// Default value is START: https://bit.ly/32OGmvo
|
|
540
|
-
|
|
539
|
+
// Default value is START in the TTML spec: https://bit.ly/32OGmvo
|
|
540
|
+
// But to make the subtitle render consitent with other players and the
|
|
541
|
+
// shaka.text.Cue we use CENTER
|
|
542
|
+
cue.textAlign = Cue.textAlign.CENTER;
|
|
541
543
|
}
|
|
542
544
|
|
|
543
545
|
const displayAlign = TtmlTextParser.getStyleAttribute_(
|
|
@@ -559,7 +561,7 @@ shaka.text.TtmlTextParser = class {
|
|
|
559
561
|
// Background color should not be set on a container. If this is a nested
|
|
560
562
|
// cue, you can set the background. If it's a top-level that happens to
|
|
561
563
|
// also be a leaf, you can set the background.
|
|
562
|
-
// See https://github.com/
|
|
564
|
+
// See https://github.com/shaka-project/shaka-player/issues/2623
|
|
563
565
|
// This used to be handled in the displayer, but that is confusing. The Cue
|
|
564
566
|
// structure should reflect what you want to happen in the displayer, and
|
|
565
567
|
// the displayer shouldn't have to know about TTML.
|
|
@@ -919,8 +921,9 @@ shaka.text.TtmlTextParser = class {
|
|
|
919
921
|
let ret = null;
|
|
920
922
|
const XmlUtils = shaka.util.XmlUtils;
|
|
921
923
|
while (element) {
|
|
922
|
-
ret = nsName ?
|
|
923
|
-
|
|
924
|
+
ret = nsName ?
|
|
925
|
+
XmlUtils.getAttributeNS(element, nsName, attributeName) :
|
|
926
|
+
element.getAttribute(attributeName);
|
|
924
927
|
if (ret) {
|
|
925
928
|
break;
|
|
926
929
|
}
|
|
@@ -108,7 +108,7 @@ shaka.text.UITextDisplayer = class {
|
|
|
108
108
|
append(cues) {
|
|
109
109
|
// Clone the cues list for performace optimization. We can avoid the cues
|
|
110
110
|
// list growing during the comparisons for duplicate cues.
|
|
111
|
-
// See: https://github.com/
|
|
111
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3018
|
|
112
112
|
const cuesList = [...this.cues_];
|
|
113
113
|
for (const cue of cues) {
|
|
114
114
|
// When a VTT cue spans a segment boundary, the cue will be duplicated
|