shaka-player 3.3.1 → 3.3.4
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 +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 +147 -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 +1707 -1670
- 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/generateTsDefs.py +2 -0
- package/build/shaka-lab.yaml +163 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +93 -28
- package/build/types/polyfill +1 -0
- 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 +3 -3
- 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 +233 -226
- package/dist/locales.js +32 -32
- 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 +250 -237
- package/dist/shaka-player.compiled.debug.d.ts +250 -237
- package/dist/shaka-player.compiled.debug.externs.js +31 -15
- package/dist/shaka-player.compiled.debug.js +252 -257
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +31 -15
- package/dist/shaka-player.compiled.js +844 -849
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +296 -292
- package/dist/shaka-player.ui.debug.d.ts +296 -292
- package/dist/shaka-player.ui.debug.externs.js +33 -26
- package/dist/shaka-player.ui.debug.js +345 -351
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +33 -26
- package/dist/shaka-player.ui.js +1002 -1008
- 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/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/cmcd.js +1 -1
- 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 +40 -30
- 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 +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/quality_observer.js +17 -34
- package/lib/media/region_observer.js +39 -33
- package/lib/media/region_timeline.js +17 -19
- package/lib/media/streaming_engine.js +7 -7
- 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 +65 -25
- 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/polyfill/symbol.js +46 -0
- package/lib/text/cue.js +1 -1
- package/lib/text/simple_text_displayer.js +2 -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/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 +10 -11
- 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 +62 -40
- package/roadmap.md +17 -17
- package/shaka-player.uncompiled.js +1 -0
- 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 +4 -17
- 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 +4 -24
- 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/quality_observer_unit.js +4 -5
- 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 +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 -27
- package/test/player_external.js +2 -10
- package/test/player_integration.js +22 -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 +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 +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 +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/cmcd_manager_unit.js +0 -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/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/controls.js +3 -0
- package/ui/less/ad_controls.less +6 -6
- package/ui/less/buttons.less +6 -6
- package/ui/less/containers.less +13 -15
- 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/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/ui/localization.js +12 -36
- package/ui/seek_bar.js +2 -1
- package/externs/svgelement.js +0 -18
- package/externs/webcrypto.js +0 -18
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*! @license
|
|
2
|
+
* Shaka Player
|
|
3
|
+
* Copyright 2016 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
goog.provide('shaka.polyfill.Symbol');
|
|
7
|
+
|
|
8
|
+
goog.require('shaka.log');
|
|
9
|
+
goog.require('shaka.polyfill');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @summary A polyfill to provide Symbol.prototype.description in all browsers.
|
|
13
|
+
* See: https://caniuse.com/mdn-javascript_builtins_symbol_description
|
|
14
|
+
* @export
|
|
15
|
+
*/
|
|
16
|
+
shaka.polyfill.Symbol = class {
|
|
17
|
+
/**
|
|
18
|
+
* Install the polyfill if needed.
|
|
19
|
+
* @export
|
|
20
|
+
*/
|
|
21
|
+
static install() {
|
|
22
|
+
shaka.log.debug('Symbol.install');
|
|
23
|
+
|
|
24
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
25
|
+
const proto = Symbol.prototype;
|
|
26
|
+
|
|
27
|
+
if (!('description' in proto)) {
|
|
28
|
+
Object.defineProperty(proto, 'description', {
|
|
29
|
+
get: shaka.polyfill.Symbol.getSymbolDescription_,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @this {Symbol}
|
|
36
|
+
* @return {(string|undefined)}
|
|
37
|
+
* @private
|
|
38
|
+
*/
|
|
39
|
+
static getSymbolDescription_() {
|
|
40
|
+
const m = /\((.*)\)/.exec(this.toString());
|
|
41
|
+
return m ? m[1] : undefined;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
shaka.polyfill.register(shaka.polyfill.Symbol.install);
|
package/lib/text/cue.js
CHANGED
|
@@ -294,7 +294,7 @@ shaka.text.Cue = class {
|
|
|
294
294
|
// Compare the start time, end time and payload of the cues first for
|
|
295
295
|
// performance optimization. We can avoid the more expensive recursive
|
|
296
296
|
// checks if the top-level properties don't match.
|
|
297
|
-
// See: https://github.com/
|
|
297
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3018
|
|
298
298
|
if (cue1.startTime != cue2.startTime || cue1.endTime != cue2.endTime ||
|
|
299
299
|
cue1.payload != cue2.payload) {
|
|
300
300
|
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_
|
|
@@ -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_(
|
|
@@ -558,7 +560,7 @@ shaka.text.TtmlTextParser = class {
|
|
|
558
560
|
// Background color should not be set on a container. If this is a nested
|
|
559
561
|
// cue, you can set the background. If it's a top-level that happens to
|
|
560
562
|
// also be a leaf, you can set the background.
|
|
561
|
-
// See https://github.com/
|
|
563
|
+
// See https://github.com/shaka-project/shaka-player/issues/2623
|
|
562
564
|
// This used to be handled in the displayer, but that is confusing. The Cue
|
|
563
565
|
// structure should reflect what you want to happen in the displayer, and
|
|
564
566
|
// the displayer shouldn't have to know about TTML.
|
|
@@ -942,8 +944,9 @@ shaka.text.TtmlTextParser = class {
|
|
|
942
944
|
let ret = null;
|
|
943
945
|
const XmlUtils = shaka.util.XmlUtils;
|
|
944
946
|
while (element) {
|
|
945
|
-
ret = nsName ?
|
|
946
|
-
|
|
947
|
+
ret = nsName ?
|
|
948
|
+
XmlUtils.getAttributeNS(element, nsName, attributeName) :
|
|
949
|
+
element.getAttribute(attributeName);
|
|
947
950
|
if (ret) {
|
|
948
951
|
break;
|
|
949
952
|
}
|
|
@@ -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
|
package/lib/util/buffer_utils.js
CHANGED
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
goog.provide('shaka.util.BufferUtils');
|
|
8
8
|
|
|
9
|
-
goog.require('shaka.util.Iterables');
|
|
10
|
-
|
|
11
9
|
|
|
12
10
|
/**
|
|
13
11
|
* @summary A set of BufferSource utility functions.
|
|
@@ -45,7 +43,7 @@ shaka.util.BufferUtils = class {
|
|
|
45
43
|
|
|
46
44
|
const uint8A = shaka.util.BufferUtils.toUint8(arr1);
|
|
47
45
|
const uint8B = shaka.util.BufferUtils.toUint8(arr2);
|
|
48
|
-
for (
|
|
46
|
+
for (let i = 0; i < arr1.byteLength; i++) {
|
|
49
47
|
if (uint8A[i] != uint8B[i]) {
|
|
50
48
|
return false;
|
|
51
49
|
}
|
package/lib/util/ebml_parser.js
CHANGED
|
@@ -11,7 +11,6 @@ goog.require('goog.asserts');
|
|
|
11
11
|
goog.require('shaka.util.BufferUtils');
|
|
12
12
|
goog.require('shaka.util.DataViewReader');
|
|
13
13
|
goog.require('shaka.util.Error');
|
|
14
|
-
goog.require('shaka.util.Iterables');
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
/**
|
|
@@ -157,7 +156,8 @@ shaka.util.EbmlParser = class {
|
|
|
157
156
|
}
|
|
158
157
|
|
|
159
158
|
let value = 0;
|
|
160
|
-
for (
|
|
159
|
+
for (let i = 0; i < vint.length; i++) {
|
|
160
|
+
const item = vint[i];
|
|
161
161
|
if (i == 0) {
|
|
162
162
|
// Mask out the first few bits of |vint|'s first byte to get the most
|
|
163
163
|
// significant bits of |vint|'s value. If |vint| is 8 bytes wide then
|
|
@@ -267,7 +267,7 @@ shaka.util.EbmlElement = class {
|
|
|
267
267
|
|
|
268
268
|
let value = 0;
|
|
269
269
|
|
|
270
|
-
for (
|
|
270
|
+
for (let i = 0; i < this.dataView_.byteLength; i++) {
|
|
271
271
|
const chunk = this.dataView_.getUint8(i);
|
|
272
272
|
value = (256 * value) + chunk;
|
|
273
273
|
}
|
package/lib/util/error.js
CHANGED
|
@@ -467,7 +467,7 @@ shaka.util.Error.Code = {
|
|
|
467
467
|
* Content transformations required by the platform could not be performed for
|
|
468
468
|
* some reason (unsupported container, etc.)
|
|
469
469
|
*
|
|
470
|
-
* @see https://github.com/
|
|
470
|
+
* @see https://github.com/shaka-project/shaka-player/issues/2759
|
|
471
471
|
*/
|
|
472
472
|
'CONTENT_TRANSFORMATION_FAILED': 3019,
|
|
473
473
|
|
|
@@ -9,6 +9,7 @@ goog.provide('shaka.util.FakeEventTarget');
|
|
|
9
9
|
goog.require('goog.asserts');
|
|
10
10
|
goog.require('shaka.log');
|
|
11
11
|
goog.require('shaka.util.FakeEvent');
|
|
12
|
+
goog.require('shaka.util.IReleasable');
|
|
12
13
|
goog.require('shaka.util.MultiMap');
|
|
13
14
|
|
|
14
15
|
|
|
@@ -18,13 +19,14 @@ goog.require('shaka.util.MultiMap');
|
|
|
18
19
|
* to non-DOM classes. Only FakeEvents should be dispatched.
|
|
19
20
|
*
|
|
20
21
|
* @implements {EventTarget}
|
|
22
|
+
* @implements {shaka.util.IReleasable}
|
|
21
23
|
* @exportInterface
|
|
22
24
|
*/
|
|
23
25
|
shaka.util.FakeEventTarget = class {
|
|
24
26
|
/** */
|
|
25
27
|
constructor() {
|
|
26
28
|
/**
|
|
27
|
-
* @private {
|
|
29
|
+
* @private {shaka.util.MultiMap.<shaka.util.FakeEventTarget.ListenerType>}
|
|
28
30
|
*/
|
|
29
31
|
this.listeners_ = new shaka.util.MultiMap();
|
|
30
32
|
|
|
@@ -46,6 +48,9 @@ shaka.util.FakeEventTarget = class {
|
|
|
46
48
|
* @exportInterface
|
|
47
49
|
*/
|
|
48
50
|
addEventListener(type, listener, options) {
|
|
51
|
+
if (!this.listeners_) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
49
54
|
this.listeners_.push(type, listener);
|
|
50
55
|
}
|
|
51
56
|
|
|
@@ -73,6 +78,9 @@ shaka.util.FakeEventTarget = class {
|
|
|
73
78
|
* @exportInterface
|
|
74
79
|
*/
|
|
75
80
|
removeEventListener(type, listener, options) {
|
|
81
|
+
if (!this.listeners_) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
76
84
|
this.listeners_.remove(type, listener);
|
|
77
85
|
}
|
|
78
86
|
|
|
@@ -90,6 +98,10 @@ shaka.util.FakeEventTarget = class {
|
|
|
90
98
|
goog.asserts.assert(event instanceof shaka.util.FakeEvent,
|
|
91
99
|
'FakeEventTarget can only dispatch FakeEvents!');
|
|
92
100
|
|
|
101
|
+
if (!this.listeners_) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
|
|
93
105
|
let listeners = this.listeners_.get(event.type) || [];
|
|
94
106
|
const universalListeners =
|
|
95
107
|
this.listeners_.get(shaka.util.FakeEventTarget.ALL_EVENTS_);
|
|
@@ -129,6 +141,14 @@ shaka.util.FakeEventTarget = class {
|
|
|
129
141
|
|
|
130
142
|
return event.defaultPrevented;
|
|
131
143
|
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @override
|
|
147
|
+
* @exportInterface
|
|
148
|
+
*/
|
|
149
|
+
release() {
|
|
150
|
+
this.listeners_ = null;
|
|
151
|
+
}
|
|
132
152
|
};
|
|
133
153
|
|
|
134
154
|
/**
|
package/lib/util/iterables.js
CHANGED
|
@@ -75,50 +75,4 @@ shaka.util.Iterables = class {
|
|
|
75
75
|
}
|
|
76
76
|
return out;
|
|
77
77
|
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Returns an iterable that contains numbers in the range [0, end).
|
|
81
|
-
*
|
|
82
|
-
* @param {number} end The exclusive end of the list.
|
|
83
|
-
* @return {!Iterable.<number>}
|
|
84
|
-
*/
|
|
85
|
-
static* range(end) {
|
|
86
|
-
for (let i = 0; i < end; i++) {
|
|
87
|
-
yield i;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Iterates over an iterable object and includes additional info about each
|
|
93
|
-
* item:
|
|
94
|
-
* - The zero-based index of the element.
|
|
95
|
-
* - The next item in the list, if it exists.
|
|
96
|
-
* - The previous item in the list, if it exists.
|
|
97
|
-
*
|
|
98
|
-
* @param {!Iterable.<T>} iterable
|
|
99
|
-
* @return {!Iterable.<
|
|
100
|
-
* {i: number, item: T, prev: (T|undefined), next: (T|undefined)}>}
|
|
101
|
-
* @template T
|
|
102
|
-
*/
|
|
103
|
-
static* enumerate(iterable) {
|
|
104
|
-
// Since we want the "next" item, we need to skip the first item and return
|
|
105
|
-
// elements one in the past. So as we iterate, we are getting the "next"
|
|
106
|
-
// element and yielding the one from the previous iteration.
|
|
107
|
-
let i = -1;
|
|
108
|
-
let prev = undefined;
|
|
109
|
-
let item = undefined;
|
|
110
|
-
for (const next of iterable) {
|
|
111
|
-
if (i >= 0) {
|
|
112
|
-
yield {i, item, prev, next};
|
|
113
|
-
}
|
|
114
|
-
i++;
|
|
115
|
-
prev = item;
|
|
116
|
-
item = next;
|
|
117
|
-
}
|
|
118
|
-
if (i != -1) {
|
|
119
|
-
// If it's still -1, there were no items. Otherwise we need to yield
|
|
120
|
-
// the last item.
|
|
121
|
-
yield {i, prev, item, next: undefined};
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
78
|
};
|
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
goog.provide('shaka.util.Mp4BoxParsers');
|
|
8
8
|
|
|
9
9
|
goog.require('shaka.util.DataViewReader');
|
|
10
|
-
goog.require('shaka.util.Functional');
|
|
11
|
-
goog.require('shaka.util.Iterables');
|
|
12
10
|
|
|
13
11
|
shaka.util.Mp4BoxParsers = class {
|
|
14
12
|
/**
|
|
@@ -125,8 +123,7 @@ shaka.util.Mp4BoxParsers = class {
|
|
|
125
123
|
reader.skip(4);
|
|
126
124
|
}
|
|
127
125
|
|
|
128
|
-
for (
|
|
129
|
-
shaka.util.Functional.ignored(_);
|
|
126
|
+
for (let i = 0; i < sampleCount; i++) {
|
|
130
127
|
/** @type {shaka.util.ParsedTRUNSample} */
|
|
131
128
|
const sample = {
|
|
132
129
|
sampleDuration: null,
|
package/lib/util/mp4_parser.js
CHANGED
|
@@ -9,8 +9,6 @@ goog.provide('shaka.util.Mp4Parser');
|
|
|
9
9
|
goog.require('goog.asserts');
|
|
10
10
|
goog.require('shaka.log');
|
|
11
11
|
goog.require('shaka.util.DataViewReader');
|
|
12
|
-
goog.require('shaka.util.Functional');
|
|
13
|
-
goog.require('shaka.util.Iterables');
|
|
14
12
|
|
|
15
13
|
|
|
16
14
|
/**
|
|
@@ -229,8 +227,7 @@ shaka.util.Mp4Parser = class {
|
|
|
229
227
|
// start position. The header size varies.
|
|
230
228
|
const headerSize = shaka.util.Mp4Parser.headerSize(box);
|
|
231
229
|
const count = box.reader.readUint32();
|
|
232
|
-
for (
|
|
233
|
-
shaka.util.Functional.ignored(_);
|
|
230
|
+
for (let i = 0; i < count; i++) {
|
|
234
231
|
box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);
|
|
235
232
|
if (box.parser.done_) {
|
|
236
233
|
break;
|
|
@@ -302,9 +299,10 @@ shaka.util.Mp4Parser = class {
|
|
|
302
299
|
* @export
|
|
303
300
|
*/
|
|
304
301
|
static headerSize(box) {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
302
|
+
const basicHeaderSize = 8;
|
|
303
|
+
const _64BitFieldSize = box.has64BitSize ? 8 : 0;
|
|
304
|
+
const versionAndFlagsSize = box.flags != null ? 4 : 0;
|
|
305
|
+
return basicHeaderSize + _64BitFieldSize + versionAndFlagsSize;
|
|
308
306
|
}
|
|
309
307
|
};
|
|
310
308
|
|
package/lib/util/periods.js
CHANGED
|
@@ -14,7 +14,6 @@ goog.require('shaka.media.SegmentIndex');
|
|
|
14
14
|
goog.require('shaka.util.ArrayUtils');
|
|
15
15
|
goog.require('shaka.util.Error');
|
|
16
16
|
goog.require('shaka.util.IReleasable');
|
|
17
|
-
goog.require('shaka.util.Iterables');
|
|
18
17
|
goog.require('shaka.util.LanguageUtils');
|
|
19
18
|
goog.require('shaka.util.ManifestParserUtils');
|
|
20
19
|
goog.require('shaka.util.MapUtils');
|
|
@@ -98,7 +97,6 @@ shaka.util.PeriodCombiner = class {
|
|
|
98
97
|
*/
|
|
99
98
|
async combinePeriods(periods, isDynamic) {
|
|
100
99
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
101
|
-
const Iterables = shaka.util.Iterables;
|
|
102
100
|
|
|
103
101
|
shaka.util.PeriodCombiner.filterOutAudioStreamDuplicates_(periods);
|
|
104
102
|
shaka.util.PeriodCombiner.filterOutVideoStreamDuplicates_(periods);
|
|
@@ -118,7 +116,8 @@ shaka.util.PeriodCombiner = class {
|
|
|
118
116
|
// Find the first period we haven't seen before. Tag all the periods we
|
|
119
117
|
// see now as "used".
|
|
120
118
|
let firstNewPeriodIndex = -1;
|
|
121
|
-
for (
|
|
119
|
+
for (let i = 0; i < periods.length; i++) {
|
|
120
|
+
const period = periods[i];
|
|
122
121
|
if (this.usedPeriodIds_.has(period.id)) {
|
|
123
122
|
// This isn't new.
|
|
124
123
|
} else {
|
|
@@ -301,6 +300,7 @@ shaka.util.PeriodCombiner = class {
|
|
|
301
300
|
t1.label == t2.label &&
|
|
302
301
|
t1.codecs == t2.codecs &&
|
|
303
302
|
t1.mimeType == t2.mimeType &&
|
|
303
|
+
t1.bandwidth == t2.bandwidth &&
|
|
304
304
|
ArrayUtils.hasSameElements(t1.roles, t2.roles)) {
|
|
305
305
|
duplicate = true;
|
|
306
306
|
}
|
|
@@ -510,13 +510,12 @@ shaka.util.PeriodCombiner = class {
|
|
|
510
510
|
static async combine_(
|
|
511
511
|
outputStreams, streamsPerPeriod, firstNewPeriodIndex, clone, concat) {
|
|
512
512
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
513
|
-
const Iterables = shaka.util.Iterables;
|
|
514
513
|
|
|
515
514
|
const unusedStreamsPerPeriod = [];
|
|
516
|
-
for (
|
|
515
|
+
for (let i = 0; i < streamsPerPeriod.length; i++) {
|
|
517
516
|
if (i >= firstNewPeriodIndex) {
|
|
518
517
|
// This periods streams are all new.
|
|
519
|
-
unusedStreamsPerPeriod.push(new Set(
|
|
518
|
+
unusedStreamsPerPeriod.push(new Set(streamsPerPeriod[i]));
|
|
520
519
|
} else {
|
|
521
520
|
// This period's streams have all been used already.
|
|
522
521
|
unusedStreamsPerPeriod.push(new Set());
|
|
@@ -668,12 +667,12 @@ shaka.util.PeriodCombiner = class {
|
|
|
668
667
|
|
|
669
668
|
// Concatenate the new matches onto the stream, starting at the first new
|
|
670
669
|
// period.
|
|
671
|
-
const Iterables = shaka.util.Iterables;
|
|
672
670
|
// Satisfy the compiler about the type.
|
|
673
671
|
// Also checks if the segmentIndex is still valid after the async
|
|
674
672
|
// operations, to make sure we stop if the active stream has changed.
|
|
675
673
|
if (outputStream.segmentIndex instanceof shaka.media.MetaSegmentIndex) {
|
|
676
|
-
for (
|
|
674
|
+
for (let i = 0; i < streams.length; i++) {
|
|
675
|
+
const match = streams[i];
|
|
677
676
|
if (match.segmentIndex && i >= firstNewPeriodIndex) {
|
|
678
677
|
goog.asserts.assert(match.segmentIndex,
|
|
679
678
|
'stream should have a segmentIndex.');
|
|
@@ -768,9 +767,9 @@ shaka.util.PeriodCombiner = class {
|
|
|
768
767
|
|
|
769
768
|
// Concatenate the new matches onto the stream, starting at the first new
|
|
770
769
|
// period.
|
|
771
|
-
|
|
772
|
-
for (const {i, item: match} of Iterables.enumerate(matches)) {
|
|
770
|
+
for (let i = 0; i < matches.length; i++) {
|
|
773
771
|
if (i >= firstNewPeriodIndex) {
|
|
772
|
+
const match = matches[i];
|
|
774
773
|
concat(outputStream, match);
|
|
775
774
|
|
|
776
775
|
// We only consider an audio stream "used" if its language is related to
|
|
@@ -1210,7 +1209,7 @@ shaka.util.PeriodCombiner = class {
|
|
|
1210
1209
|
// [r1, r2, r3, r4].
|
|
1211
1210
|
// If we match stream1 with stream3 due to the same role overlap,
|
|
1212
1211
|
// stream2 is likely to be left unmatched and error out later.
|
|
1213
|
-
// See https://github.com/
|
|
1212
|
+
// See https://github.com/shaka-project/shaka-player/issues/2542 for
|
|
1214
1213
|
// more details.
|
|
1215
1214
|
return candidate.roles.length < best.roles.length;
|
|
1216
1215
|
}
|
package/lib/util/platform.js
CHANGED
|
@@ -174,8 +174,8 @@ shaka.util.Platform = class {
|
|
|
174
174
|
* @return {boolean}
|
|
175
175
|
*/
|
|
176
176
|
static isApple() {
|
|
177
|
-
return !!navigator.vendor && navigator.vendor.includes('Apple')
|
|
178
|
-
|
|
177
|
+
return !!navigator.vendor && navigator.vendor.includes('Apple') &&
|
|
178
|
+
!shaka.util.Platform.isTizen();
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
/**
|
|
@@ -312,7 +312,7 @@ shaka.util.Platform = class {
|
|
|
312
312
|
* initialization segments.
|
|
313
313
|
*
|
|
314
314
|
* @return {boolean}
|
|
315
|
-
* @see https://github.com/
|
|
315
|
+
* @see https://github.com/shaka-project/shaka-player/issues/2759
|
|
316
316
|
*/
|
|
317
317
|
static requiresEncryptionInfoInAllInitSegments() {
|
|
318
318
|
const Platform = shaka.util.Platform;
|
package/lib/util/pssh.js
CHANGED
|
@@ -9,8 +9,6 @@ goog.provide('shaka.util.Pssh');
|
|
|
9
9
|
goog.require('goog.asserts');
|
|
10
10
|
goog.require('shaka.log');
|
|
11
11
|
goog.require('shaka.util.BufferUtils');
|
|
12
|
-
goog.require('shaka.util.Functional');
|
|
13
|
-
goog.require('shaka.util.Iterables');
|
|
14
12
|
goog.require('shaka.util.Mp4Parser');
|
|
15
13
|
goog.require('shaka.util.Uint8ArrayUtils');
|
|
16
14
|
|
|
@@ -83,8 +81,7 @@ shaka.util.Pssh = class {
|
|
|
83
81
|
shaka.util.Uint8ArrayUtils.toHex(box.reader.readBytes(16)));
|
|
84
82
|
if (box.version > 0) {
|
|
85
83
|
const numKeyIds = box.reader.readUint32();
|
|
86
|
-
for (
|
|
87
|
-
shaka.util.Functional.ignored(_);
|
|
84
|
+
for (let i = 0; i < numKeyIds; i++) {
|
|
88
85
|
const keyId =
|
|
89
86
|
shaka.util.Uint8ArrayUtils.toHex(box.reader.readBytes(16));
|
|
90
87
|
this.cencKeyIds.push(keyId);
|
package/lib/util/stream_utils.js
CHANGED
|
@@ -425,7 +425,7 @@ shaka.util.StreamUtils = class {
|
|
|
425
425
|
await shaka.util.StreamUtils.getDecodingInfosForVariants(
|
|
426
426
|
manifest.variants, usePersistentLicenses, /* srcEquals= */ false);
|
|
427
427
|
manifest.variants = manifest.variants.filter((variant) => {
|
|
428
|
-
// See: https://github.com/
|
|
428
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3860
|
|
429
429
|
const video = variant.video;
|
|
430
430
|
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
431
431
|
if (video) {
|
|
@@ -461,7 +461,7 @@ shaka.util.StreamUtils = class {
|
|
|
461
461
|
}
|
|
462
462
|
}
|
|
463
463
|
|
|
464
|
-
// See: https://github.com/
|
|
464
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3380
|
|
465
465
|
if (shaka.util.Platform.isXboxOne() && video &&
|
|
466
466
|
((video.width && video.width > 1920) ||
|
|
467
467
|
(video.height && video.height > 1080)) &&
|
|
@@ -720,7 +720,8 @@ shaka.util.StreamUtils = class {
|
|
|
720
720
|
static getCorrectAudioCodecs_(codecs) {
|
|
721
721
|
// Some Tizen devices seem to misreport AC-3 support, but correctly
|
|
722
722
|
// report EC-3 support. So query EC-3 as a fallback for AC-3.
|
|
723
|
-
// See https://github.com/
|
|
723
|
+
// See https://github.com/shaka-project/shaka-player/issues/2989 for
|
|
724
|
+
// details.
|
|
724
725
|
if (shaka.util.Platform.isTizen()) {
|
|
725
726
|
return codecs.toLowerCase() == 'ac-3' ? 'ec-3' : codecs;
|
|
726
727
|
} else {
|
package/lib/util/string_utils.js
CHANGED
|
@@ -10,7 +10,6 @@ goog.require('goog.asserts');
|
|
|
10
10
|
goog.require('shaka.log');
|
|
11
11
|
goog.require('shaka.util.BufferUtils');
|
|
12
12
|
goog.require('shaka.util.Error');
|
|
13
|
-
goog.require('shaka.util.Iterables');
|
|
14
13
|
goog.require('shaka.util.Lazy');
|
|
15
14
|
|
|
16
15
|
|
|
@@ -81,7 +80,7 @@ shaka.util.StringUtils = class {
|
|
|
81
80
|
const length = Math.floor(data.byteLength / 2);
|
|
82
81
|
const arr = new Uint16Array(length);
|
|
83
82
|
const dataView = shaka.util.BufferUtils.toDataView(data);
|
|
84
|
-
for (
|
|
83
|
+
for (let i = 0; i < length; i++) {
|
|
85
84
|
arr[i] = dataView.getUint16(i * 2, littleEndian);
|
|
86
85
|
}
|
|
87
86
|
return shaka.util.StringUtils.fromCharCode(arr);
|
|
@@ -158,9 +157,8 @@ shaka.util.StringUtils = class {
|
|
|
158
157
|
static toUTF16(str, littleEndian) {
|
|
159
158
|
const result = new ArrayBuffer(str.length * 2);
|
|
160
159
|
const view = new DataView(result);
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
const value = item.charCodeAt(0);
|
|
160
|
+
for (let i = 0; i < str.length; ++i) {
|
|
161
|
+
const value = str.charCodeAt(i);
|
|
164
162
|
view.setUint16(/* position= */ i * 2, value, littleEndian);
|
|
165
163
|
}
|
|
166
164
|
return result;
|
|
@@ -8,7 +8,6 @@ goog.provide('shaka.util.Uint8ArrayUtils');
|
|
|
8
8
|
|
|
9
9
|
goog.require('shaka.Deprecate');
|
|
10
10
|
goog.require('shaka.util.BufferUtils');
|
|
11
|
-
goog.require('shaka.util.Iterables');
|
|
12
11
|
goog.require('shaka.util.StringUtils');
|
|
13
12
|
|
|
14
13
|
|
|
@@ -74,9 +73,8 @@ shaka.util.Uint8ArrayUtils = class {
|
|
|
74
73
|
// byte.
|
|
75
74
|
const bytes = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'));
|
|
76
75
|
const result = new Uint8Array(bytes.length);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
result[i] = item.charCodeAt(0);
|
|
76
|
+
for (let i = 0; i < bytes.length; ++i) {
|
|
77
|
+
result[i] = bytes.charCodeAt(i);
|
|
80
78
|
}
|
|
81
79
|
return result;
|
|
82
80
|
}
|
|
@@ -91,7 +89,7 @@ shaka.util.Uint8ArrayUtils = class {
|
|
|
91
89
|
static fromHex(str) {
|
|
92
90
|
const size = str.length / 2;
|
|
93
91
|
const arr = new Uint8Array(size);
|
|
94
|
-
for (
|
|
92
|
+
for (let i = 0; i < size; i++) {
|
|
95
93
|
arr[i] = window.parseInt(str.substr(i * 2, 2), 16);
|
|
96
94
|
}
|
|
97
95
|
return arr;
|
package/lib/util/xml_utils.js
CHANGED
|
@@ -57,9 +57,13 @@ shaka.util.XmlUtils = class {
|
|
|
57
57
|
* @return {!Array.<!Element>} The child XML elements.
|
|
58
58
|
*/
|
|
59
59
|
static findChildren(elem, name) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
const found = [];
|
|
61
|
+
for (const child of elem.childNodes) {
|
|
62
|
+
if (child instanceof Element && child.tagName == name) {
|
|
63
|
+
found.push(child);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return found;
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
|
|
@@ -82,10 +86,14 @@ shaka.util.XmlUtils = class {
|
|
|
82
86
|
* @return {!Array.<!Element>} The child XML elements.
|
|
83
87
|
*/
|
|
84
88
|
static findChildrenNS(elem, ns, name) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
const found = [];
|
|
90
|
+
for (const child of elem.childNodes) {
|
|
91
|
+
if (child instanceof Element && child.localName == name &&
|
|
92
|
+
child.namespaceURI == ns) {
|
|
93
|
+
found.push(child);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return found;
|
|
89
97
|
}
|
|
90
98
|
|
|
91
99
|
|