shaka-player 3.1.4 → 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 +1540 -1474
- 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 +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 +237 -222
- package/dist/shaka-player.compiled.debug.d.ts +237 -222
- package/dist/shaka-player.compiled.debug.externs.js +20 -3
- package/dist/shaka-player.compiled.debug.js +361 -365
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +20 -3
- package/dist/shaka-player.compiled.js +811 -815
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +281 -275
- package/dist/shaka-player.ui.debug.d.ts +281 -275
- package/dist/shaka-player.ui.debug.externs.js +34 -26
- package/dist/shaka-player.ui.debug.js +384 -389
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +34 -26
- package/dist/shaka-player.ui.js +945 -950
- 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/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 +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 +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 +11 -9
- package/lib/hls/manifest_text_parser.js +4 -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/region_observer.js +39 -33
- package/lib/media/region_timeline.js +17 -19
- 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 +14 -15
- package/lib/player.js +52 -22
- 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/routing/walker.js +2 -3
- package/lib/text/cue.js +7 -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 +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 +60 -8
- 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 +3 -17
- package/test/media/drm_engine_unit.js +7 -26
- 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 +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 +57 -42
- 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 +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 +38 -37
- 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/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());
|
|
@@ -747,9 +746,9 @@ shaka.util.PeriodCombiner = class {
|
|
|
747
746
|
|
|
748
747
|
// Concatenate the new matches onto the stream, starting at the first new
|
|
749
748
|
// period.
|
|
750
|
-
|
|
751
|
-
for (const {i, item: match} of Iterables.enumerate(matches)) {
|
|
749
|
+
for (let i = 0; i < matches.length; i++) {
|
|
752
750
|
if (i >= firstNewPeriodIndex) {
|
|
751
|
+
const match = matches[i];
|
|
753
752
|
concat(outputStream, match);
|
|
754
753
|
|
|
755
754
|
// We only consider an audio stream "used" if its language is related to
|
|
@@ -1176,7 +1175,7 @@ shaka.util.PeriodCombiner = class {
|
|
|
1176
1175
|
// [r1, r2, r3, r4].
|
|
1177
1176
|
// If we match stream1 with stream3 due to the same role overlap,
|
|
1178
1177
|
// stream2 is likely to be left unmatched and error out later.
|
|
1179
|
-
// See https://github.com/
|
|
1178
|
+
// See https://github.com/shaka-project/shaka-player/issues/2542 for
|
|
1180
1179
|
// more details.
|
|
1181
1180
|
return candidate.roles.length < best.roles.length;
|
|
1182
1181
|
}
|
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
|
@@ -333,14 +333,49 @@ shaka.util.StreamUtils = class {
|
|
|
333
333
|
*/
|
|
334
334
|
static async filterManifestByMediaCapabilities(
|
|
335
335
|
manifest, usePersistentLicenses) {
|
|
336
|
-
goog.asserts.assert(
|
|
336
|
+
goog.asserts.assert(navigator.mediaCapabilities,
|
|
337
337
|
'MediaCapabilities should be valid.');
|
|
338
338
|
|
|
339
339
|
await shaka.util.StreamUtils.getDecodingInfosForVariants(
|
|
340
340
|
manifest.variants, usePersistentLicenses, /* srcEquals= */ false);
|
|
341
341
|
manifest.variants = manifest.variants.filter((variant) => {
|
|
342
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3860
|
|
342
343
|
const video = variant.video;
|
|
343
|
-
|
|
344
|
+
const ContentType = shaka.util.ManifestParserUtils.ContentType;
|
|
345
|
+
if (video) {
|
|
346
|
+
let videoCodecs = shaka.util.StreamUtils.patchVp9(video.codecs);
|
|
347
|
+
// For multiplexed streams. Here we must check the audio of the
|
|
348
|
+
// stream to see if it is compatible.
|
|
349
|
+
if (video.codecs.includes(',')) {
|
|
350
|
+
const allCodecs = video.codecs.split(',');
|
|
351
|
+
videoCodecs = shaka.util.ManifestParserUtils.guessCodecs(
|
|
352
|
+
ContentType.VIDEO, allCodecs);
|
|
353
|
+
const audioCodecs = shaka.util.ManifestParserUtils.guessCodecs(
|
|
354
|
+
ContentType.AUDIO, allCodecs);
|
|
355
|
+
const audioFullType = shaka.util.MimeUtils.getFullOrConvertedType(
|
|
356
|
+
video.mimeType, audioCodecs, ContentType.AUDIO);
|
|
357
|
+
if (!MediaSource.isTypeSupported(audioFullType)) {
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
const fullType = shaka.util.MimeUtils.getFullOrConvertedType(
|
|
362
|
+
video.mimeType, videoCodecs, ContentType.VIDEO);
|
|
363
|
+
if (!MediaSource.isTypeSupported(fullType)) {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
const audio = variant.audio;
|
|
368
|
+
if (audio) {
|
|
369
|
+
const codecs =
|
|
370
|
+
shaka.util.StreamUtils.getCorrectAudioCodecs_(audio.codecs);
|
|
371
|
+
const fullType = shaka.util.MimeUtils.getFullOrConvertedType(
|
|
372
|
+
audio.mimeType, codecs, ContentType.AUDIO);
|
|
373
|
+
if (!MediaSource.isTypeSupported(fullType)) {
|
|
374
|
+
return false;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// See: https://github.com/shaka-project/shaka-player/issues/3380
|
|
344
379
|
if (shaka.util.Platform.isXboxOne() && video &&
|
|
345
380
|
((video.width && video.width > 1920) ||
|
|
346
381
|
(video.height && video.height > 1080)) &&
|
|
@@ -422,7 +457,7 @@ shaka.util.StreamUtils = class {
|
|
|
422
457
|
return;
|
|
423
458
|
}
|
|
424
459
|
|
|
425
|
-
const mediaCapabilities =
|
|
460
|
+
const mediaCapabilities = navigator.mediaCapabilities;
|
|
426
461
|
|
|
427
462
|
const operations = [];
|
|
428
463
|
const getVariantDecodingInfos = (async (variant, decodingConfig) => {
|
|
@@ -516,12 +551,8 @@ shaka.util.StreamUtils = class {
|
|
|
516
551
|
}
|
|
517
552
|
}
|
|
518
553
|
if (audio) {
|
|
519
|
-
// Some Tizen devices seem to misreport AC-3 support, but correctly
|
|
520
|
-
// report EC-3 support. So query EC-3 as a fallback for AC-3.
|
|
521
|
-
// See https://github.com/google/shaka-player/issues/2989 for details.
|
|
522
554
|
const codecs =
|
|
523
|
-
(audio.codecs
|
|
524
|
-
shaka.util.Platform.isTizen()) ? 'ec-3' : audio.codecs;
|
|
555
|
+
shaka.util.StreamUtils.getCorrectAudioCodecs_(audio.codecs);
|
|
525
556
|
const fullType = shaka.util.MimeUtils.getFullOrConvertedType(
|
|
526
557
|
audio.mimeType, codecs, ContentType.AUDIO);
|
|
527
558
|
|
|
@@ -632,6 +663,27 @@ shaka.util.StreamUtils = class {
|
|
|
632
663
|
return configs;
|
|
633
664
|
}
|
|
634
665
|
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Generates the correct audio codec for MediaDecodingConfiguration and
|
|
669
|
+
* for MediaSource.isTypeSupported.
|
|
670
|
+
* @param {string} codecs
|
|
671
|
+
* @return {string}
|
|
672
|
+
* @private
|
|
673
|
+
*/
|
|
674
|
+
static getCorrectAudioCodecs_(codecs) {
|
|
675
|
+
// Some Tizen devices seem to misreport AC-3 support, but correctly
|
|
676
|
+
// report EC-3 support. So query EC-3 as a fallback for AC-3.
|
|
677
|
+
// See https://github.com/shaka-project/shaka-player/issues/2989 for
|
|
678
|
+
// details.
|
|
679
|
+
if (shaka.util.Platform.isTizen()) {
|
|
680
|
+
return codecs.toLowerCase() == 'ac-3' ? 'ec-3' : codecs;
|
|
681
|
+
} else {
|
|
682
|
+
return codecs;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
|
|
635
687
|
/**
|
|
636
688
|
* MediaCapabilities supports 'vp09...' codecs, but not 'vp9'. Translate vp9
|
|
637
689
|
* codec strings into 'vp09...', to allow such content to play with
|
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
|
@@ -56,9 +56,13 @@ shaka.util.XmlUtils = class {
|
|
|
56
56
|
* @return {!Array.<!Element>} The child XML elements.
|
|
57
57
|
*/
|
|
58
58
|
static findChildren(elem, name) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
const found = [];
|
|
60
|
+
for (const child of elem.childNodes) {
|
|
61
|
+
if (child instanceof Element && child.tagName == name) {
|
|
62
|
+
found.push(child);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return found;
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
|
|
@@ -81,10 +85,14 @@ shaka.util.XmlUtils = class {
|
|
|
81
85
|
* @return {!Array.<!Element>} The child XML elements.
|
|
82
86
|
*/
|
|
83
87
|
static findChildrenNS(elem, ns, name) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
const found = [];
|
|
89
|
+
for (const child of elem.childNodes) {
|
|
90
|
+
if (child instanceof Element && child.localName == name &&
|
|
91
|
+
child.namespaceURI == ns) {
|
|
92
|
+
found.push(child);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return found;
|
|
88
96
|
}
|
|
89
97
|
|
|
90
98
|
|
|
@@ -102,6 +110,25 @@ shaka.util.XmlUtils = class {
|
|
|
102
110
|
}
|
|
103
111
|
|
|
104
112
|
|
|
113
|
+
/**
|
|
114
|
+
* Gets a namespace-qualified attribute.
|
|
115
|
+
* @param {!Element} elem The element to get from.
|
|
116
|
+
* @param {!Array.<string>} nsList The lis of namespace URIs.
|
|
117
|
+
* @param {string} name The local name of the attribute.
|
|
118
|
+
* @return {?string} The attribute's value, or null if not present.
|
|
119
|
+
*/
|
|
120
|
+
static getAttributeNSList(elem, nsList, name) {
|
|
121
|
+
// Some browsers return the empty string when the attribute is missing,
|
|
122
|
+
// so check if it exists first. See: https://mzl.la/2L7F0UK
|
|
123
|
+
for (const ns of nsList) {
|
|
124
|
+
if (elem.hasAttributeNS(ns, name)) {
|
|
125
|
+
return elem.getAttributeNS(ns, name);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
105
132
|
/**
|
|
106
133
|
* Gets the text contents of a node.
|
|
107
134
|
* @param {!Node} elem The XML element.
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shaka-player",
|
|
3
3
|
"description": "DASH/EME video player library",
|
|
4
|
-
"version": "3.1.
|
|
5
|
-
"homepage": "https://github.com/
|
|
4
|
+
"version": "3.1.7",
|
|
5
|
+
"homepage": "https://github.com/shaka-project/shaka-player",
|
|
6
6
|
"author": "Google",
|
|
7
7
|
"maintainers": [
|
|
8
8
|
{
|
|
@@ -11,63 +11,85 @@
|
|
|
11
11
|
}
|
|
12
12
|
],
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@
|
|
14
|
+
"@babel/core": "^7.17.5",
|
|
15
|
+
"@babel/polyfill": "^7.12.1",
|
|
16
|
+
"@babel/preset-env": "^7.16.11",
|
|
15
17
|
"@teppeis/clutz": "^1.0.29-4c95e12.v20190929",
|
|
16
|
-
"awesomplete": "^1.1.
|
|
17
|
-
"babel-
|
|
18
|
-
"babel-plugin-istanbul": "^4.1.6",
|
|
19
|
-
"babel-polyfill": "^6.26.0",
|
|
20
|
-
"babel-preset-env": "^1.7.0",
|
|
18
|
+
"awesomplete": "^1.1.5",
|
|
19
|
+
"babel-plugin-istanbul": "^6.1.1",
|
|
21
20
|
"cajon": "^0.4.4",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
21
|
+
"code-prettify": "^0.1.0",
|
|
22
|
+
"color-themes-for-google-code-prettify": "^2.0.4",
|
|
23
|
+
"core-js": "^3.21.1",
|
|
24
|
+
"dialog-polyfill": "^0.5.6",
|
|
24
25
|
"es6-promise-polyfill": "^1.2.0",
|
|
25
|
-
"eslint": "^
|
|
26
|
-
"eslint-config-google": "^0.
|
|
26
|
+
"eslint": "^8.9.0",
|
|
27
|
+
"eslint-config-google": "^0.14.0",
|
|
27
28
|
"eslint-plugin-shaka-rules": "file:./build/eslint-plugin-shaka-rules",
|
|
28
29
|
"esprima": "^4.0.1",
|
|
29
30
|
"fastestsmallesttextencoderdecoder": "^1.0.22",
|
|
30
31
|
"fontfaceonload": "^1.0.2",
|
|
31
|
-
"google-closure-compiler-java": "^
|
|
32
|
-
"google-closure-
|
|
33
|
-
"
|
|
32
|
+
"google-closure-compiler-java": "^20220301.0.0",
|
|
33
|
+
"google-closure-deps": "https://gitpkg.now.sh/google/closure-library/closure-deps?d7736da6",
|
|
34
|
+
"google-closure-library": "^20220301.0.0",
|
|
35
|
+
"htmlhint": "^1.1.3",
|
|
34
36
|
"jasmine-ajax": "^4.0.0",
|
|
35
|
-
"jimp": "^0.
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"karma
|
|
39
|
-
"karma-
|
|
40
|
-
"karma-coverage": "^
|
|
41
|
-
"karma-
|
|
42
|
-
"karma-firefox-launcher": "^1.1.0",
|
|
43
|
-
"karma-ie-launcher": "^1.0.0",
|
|
44
|
-
"karma-jasmine": "^3.3.1",
|
|
37
|
+
"jimp": "^0.16.1",
|
|
38
|
+
"js-yaml": "^4.1.0",
|
|
39
|
+
"jsdoc": "github:joeyparrish/jsdoc#2ca85bb6",
|
|
40
|
+
"karma": "^6.3.16",
|
|
41
|
+
"karma-babel-preprocessor": "^8.0.2",
|
|
42
|
+
"karma-coverage": "^2.2.0",
|
|
43
|
+
"karma-jasmine": "^4.0.1",
|
|
45
44
|
"karma-jasmine-ajax": "^0.1.13",
|
|
45
|
+
"karma-local-wd-launcher": "^1.6.1",
|
|
46
46
|
"karma-opera-launcher": "^1.0.0",
|
|
47
|
-
"karma-
|
|
48
|
-
"karma-
|
|
49
|
-
"karma-spec-reporter": "0.0.32",
|
|
47
|
+
"karma-sourcemap-loader": "^0.3.8",
|
|
48
|
+
"karma-spec-reporter": "^0.0.34",
|
|
50
49
|
"karma-webdriver-launcher": "^1.0.8",
|
|
51
|
-
"less": "
|
|
52
|
-
"less-plugin-clean-css": "
|
|
50
|
+
"less": "https://gitpkg.now.sh/joeyparrish/less.js/packages/less?28c63a43",
|
|
51
|
+
"less-plugin-clean-css": "github:austingardner/less-plugin-clean-css#4e9e77bf",
|
|
53
52
|
"material-design-lite": "^1.3.0",
|
|
54
|
-
"mux.js": "^5.
|
|
55
|
-
"
|
|
56
|
-
"
|
|
53
|
+
"mux.js": "^5.14.1",
|
|
54
|
+
"open-sans-fonts": "^1.6.2",
|
|
55
|
+
"postcss-less": "^6.0.0",
|
|
56
|
+
"pwacompat": "^2.0.17",
|
|
57
|
+
"rimraf": "^3.0.2",
|
|
57
58
|
"sprintf-js": "^1.1.2",
|
|
58
|
-
"
|
|
59
|
-
"stylelint
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"which": "^
|
|
59
|
+
"ssim.js": "^3.5.0",
|
|
60
|
+
"stylelint": "^14.5.1",
|
|
61
|
+
"stylelint-config-standard": "^25.0.0",
|
|
62
|
+
"tippy.js": "^4.3.5",
|
|
63
|
+
"which": "^2.0.2"
|
|
64
|
+
},
|
|
65
|
+
"shakaCustom": {
|
|
66
|
+
"purposeOfDemoDeps": "These are the files from node_modules that need to be deployed with the demo app.",
|
|
67
|
+
"demoDeps": [
|
|
68
|
+
"awesomplete/awesomplete.css",
|
|
69
|
+
"awesomplete/awesomplete.min.js",
|
|
70
|
+
"dialog-polyfill/dialog-polyfill.css",
|
|
71
|
+
"dialog-polyfill/dist/dialog-polyfill.js",
|
|
72
|
+
"eme-encryption-scheme-polyfill/index.js",
|
|
73
|
+
"es6-promise-polyfill/promise.min.js",
|
|
74
|
+
"fastestsmallesttextencoderdecoder/EncoderDecoderTogether.min.js",
|
|
75
|
+
"google-closure-library/closure/goog/base.js",
|
|
76
|
+
"less/dist/less.js",
|
|
77
|
+
"material-design-lite/dist/material.indigo-blue.min.css",
|
|
78
|
+
"material-design-lite/dist/material.min.js",
|
|
79
|
+
"mux.js/dist/mux.min.js",
|
|
80
|
+
"popper.js/dist/umd/popper.min.js",
|
|
81
|
+
"pwacompat/pwacompat.min.js",
|
|
82
|
+
"tippy.js/umd/index.min.js",
|
|
83
|
+
"tippy.js/index.css"
|
|
84
|
+
]
|
|
63
85
|
},
|
|
64
86
|
"main": "dist/shaka-player.compiled.js",
|
|
65
87
|
"repository": {
|
|
66
88
|
"type": "git",
|
|
67
|
-
"url": "https://github.com/
|
|
89
|
+
"url": "https://github.com/shaka-project/shaka-player.git"
|
|
68
90
|
},
|
|
69
91
|
"bugs": {
|
|
70
|
-
"url": "https://github.com/
|
|
92
|
+
"url": "https://github.com/shaka-project/shaka-player/issues"
|
|
71
93
|
},
|
|
72
94
|
"license": "Apache-2.0",
|
|
73
95
|
"scripts": {
|
package/roadmap.md
CHANGED
|
@@ -10,45 +10,45 @@ so the exact milestone for future features is not pre-determined.
|
|
|
10
10
|
|
|
11
11
|
Candidate features for future release cycles
|
|
12
12
|
- HLS performance improvements
|
|
13
|
-
https://github.com/
|
|
13
|
+
https://github.com/shaka-project/shaka-player/issues/3363
|
|
14
14
|
- HLS interstitial support
|
|
15
|
-
https://github.com/
|
|
15
|
+
https://github.com/shaka-project/shaka-player/issues/3364
|
|
16
16
|
- Integration with Google Video ML/Cloud AI
|
|
17
17
|
- Support containerless formats
|
|
18
|
-
https://github.com/
|
|
18
|
+
https://github.com/shaka-project/shaka-player/issues/2337
|
|
19
19
|
- Support ID3 tags in mp4
|
|
20
|
-
https://github.com/
|
|
20
|
+
https://github.com/shaka-project/shaka-player/issues/3351
|
|
21
21
|
- MSE support for FairPlay
|
|
22
|
-
https://github.com/
|
|
22
|
+
https://github.com/shaka-project/shaka-player/issues/3346
|
|
23
23
|
- Codec-switching and order preference
|
|
24
|
-
https://github.com/
|
|
25
|
-
https://github.com/
|
|
24
|
+
https://github.com/shaka-project/shaka-player/issues/1528
|
|
25
|
+
https://github.com/shaka-project/shaka-player/issues/2179
|
|
26
26
|
- Configurable key-system priority
|
|
27
|
-
https://github.com/
|
|
27
|
+
https://github.com/shaka-project/shaka-player/issues/3002
|
|
28
28
|
- Preload API
|
|
29
|
-
https://github.com/
|
|
29
|
+
https://github.com/shaka-project/shaka-player/issues/880
|
|
30
30
|
- Thumbnail tracks
|
|
31
|
-
DASH: https://github.com/
|
|
32
|
-
HLS: https://github.com/
|
|
31
|
+
DASH: https://github.com/shaka-project/shaka-player/issues/559
|
|
32
|
+
HLS: https://github.com/shaka-project/shaka-player/issues/2429
|
|
33
33
|
- Smaller, more modular binary
|
|
34
34
|
- Official TypeScript defs, generated from source
|
|
35
|
-
https://github.com/
|
|
35
|
+
https://github.com/shaka-project/shaka-player/issues/1030
|
|
36
36
|
|
|
37
37
|
v3.3 - 2021 Q3
|
|
38
38
|
- Background fetch for offline storage
|
|
39
|
-
https://github.com/
|
|
39
|
+
https://github.com/shaka-project/shaka-player/issues/879
|
|
40
40
|
- Shaka Analytics Component and an integration with BigQuery Analytics
|
|
41
|
-
https://github.com/
|
|
41
|
+
https://github.com/shaka-project/shaka-player/issues/3359
|
|
42
42
|
|
|
43
43
|
v3.2 - 2021 Q2
|
|
44
44
|
- MediaCapabilities to make performance-based decisions
|
|
45
|
-
https://github.com/
|
|
45
|
+
https://github.com/shaka-project/shaka-player/issues/1391
|
|
46
46
|
|
|
47
47
|
v3.1 - 2021 Q2
|
|
48
48
|
- Low-latency live (LL-HLS, LL-DASH)
|
|
49
|
-
https://github.com/
|
|
49
|
+
https://github.com/shaka-project/shaka-player/issues/1525
|
|
50
50
|
- Own CEA parser, use mux.js only for TS
|
|
51
|
-
https://github.com/
|
|
51
|
+
https://github.com/shaka-project/shaka-player/issues/2648
|
|
52
52
|
|
|
53
53
|
=====
|
|
54
54
|
|