shaka-player 3.3.2 → 3.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.csslintrc +11 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/pull_request_template.md +6 -34
- package/.github/workflows/build-and-test.yaml +129 -0
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
- package/.github/workflows/demo-version-index.yaml +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 +92 -0
- package/AUTHORS +2 -0
- package/CHANGELOG.md +1718 -1675
- 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 +3 -3
- package/build/checkversion.py +2 -2
- 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 +94 -29
- package/build/types/core +0 -1
- 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 +232 -226
- 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 +247 -236
- package/dist/shaka-player.compiled.debug.d.ts +247 -236
- package/dist/shaka-player.compiled.debug.externs.js +15 -3
- package/dist/shaka-player.compiled.debug.js +284 -290
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +15 -3
- package/dist/shaka-player.compiled.js +855 -859
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +291 -280
- package/dist/shaka-player.ui.debug.d.ts +291 -280
- package/dist/shaka-player.ui.debug.externs.js +15 -3
- package/dist/shaka-player.ui.debug.js +296 -302
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +15 -3
- package/dist/shaka-player.ui.js +1005 -1009
- 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 +141 -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 +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 +11 -14
- 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 +34 -20
- package/lib/hls/manifest_text_parser.js +3 -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 +10 -3
- 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/indexeddb/storage_mechanism.js +4 -2
- package/lib/offline/storage.js +96 -95
- package/lib/player.js +190 -114
- 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/config_utils.js +25 -0
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +8 -1
- package/lib/util/iterables.js +0 -46
- package/lib/util/manifest_parser_utils.js +1 -1
- package/lib/util/mime_utils.js +48 -1
- package/lib/util/mp4_box_parsers.js +1 -4
- package/lib/util/mp4_parser.js +5 -7
- package/lib/util/periods.js +15 -15
- package/lib/util/platform.js +3 -3
- package/lib/util/player_configuration.js +9 -14
- package/lib/util/pssh.js +1 -4
- package/lib/util/stream_utils.js +8 -5
- 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/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 +1 -13
- package/test/cea/cea608_memory_unit.js +0 -5
- package/test/cea/cea708_service_unit.js +0 -7
- package/test/cea/cea708_window_unit.js +0 -5
- package/test/cea/cea_decoder_unit.js +0 -6
- package/test/cea/dtvcc_packet_builder_unit.js +0 -3
- package/test/cea/dtvcc_packet_unit.js +0 -5
- package/test/cea/mp4_cea_parser_unit.js +0 -4
- package/test/dash/dash_parser_content_protection_unit.js +1 -10
- package/test/dash/dash_parser_live_unit.js +2 -15
- package/test/dash/dash_parser_manifest_unit.js +2 -40
- package/test/dash/dash_parser_segment_base_unit.js +1 -8
- package/test/dash/dash_parser_segment_list_unit.js +1 -7
- package/test/dash/dash_parser_segment_template_unit.js +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 +28 -14
- package/test/hls/hls_parser_unit.js +2 -15
- package/test/hls/manifest_text_parser_unit.js +19 -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 +1 -7
- package/test/media/media_source_engine_unit.js +5 -18
- 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 +0 -4
- package/test/media/region_observer_unit.js +1 -6
- package/test/media/region_timeline_unit.js +0 -3
- package/test/media/segment_index_unit.js +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 -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 +1 -7
- 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 +2 -15
- package/test/offline/storage_integration.js +1 -27
- package/test/player_external.js +9 -11
- package/test/player_integration.js +28 -38
- 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 +81 -90
- package/test/player_unit.js +150 -38
- package/test/routing/walker_unit.js +0 -8
- package/test/test/assets/large_file.mpd +1 -1
- package/test/test/boot.js +84 -22
- package/test/test/externs/filters.js +4 -0
- 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 +40 -28
- 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/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/mime_utils_unit.js +54 -0
- 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 +93 -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 +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/seek_bar.js +2 -1
- package/.github/workflows/build_and_test.yaml +0 -73
- package/.github/workflows/release.yaml +0 -53
- package/docs/tutorials/gsoc-ideas-list.md +0 -3
- package/externs/svgelement.js +0 -18
- package/externs/webcrypto.js +0 -18
- package/lib/util/mutex.js +0 -52
package/karma.conf.js
CHANGED
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
|
|
10
10
|
const Jimp = require('jimp');
|
|
11
11
|
const fs = require('fs');
|
|
12
|
+
const glob = require('glob');
|
|
12
13
|
const path = require('path');
|
|
13
14
|
const rimraf = require('rimraf');
|
|
14
15
|
const {ssim} = require('ssim.js');
|
|
15
16
|
const util = require('karma/common/util');
|
|
16
17
|
const which = require('which');
|
|
18
|
+
const yaml = require('js-yaml');
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* @param {Object} config
|
|
@@ -43,6 +45,58 @@ module.exports = (config) => {
|
|
|
43
45
|
const settings =
|
|
44
46
|
settingsIndex >= 0 ? JSON.parse(args[settingsIndex + 1]) : {};
|
|
45
47
|
|
|
48
|
+
if (settings.grid_config) {
|
|
49
|
+
const gridBrowserMetadata =
|
|
50
|
+
yaml.load(fs.readFileSync(settings.grid_config, 'utf8'));
|
|
51
|
+
const customLaunchers = {};
|
|
52
|
+
const [gridHostname, gridPort] = settings.grid_address.split(':');
|
|
53
|
+
console.log(`Using Selenium grid at ${gridHostname}:${gridPort}`);
|
|
54
|
+
|
|
55
|
+
// By default, run on all grid browsers instead of the platform-specific
|
|
56
|
+
// default. This does not disable local browsers, though. Users can still
|
|
57
|
+
// specify a mix of grid and local browsers explicitly.
|
|
58
|
+
settings.default_browsers = [];
|
|
59
|
+
|
|
60
|
+
for (const name in gridBrowserMetadata) {
|
|
61
|
+
if (name == 'vars') {
|
|
62
|
+
// Skip variable defs in the YAML file
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const metadata = gridBrowserMetadata[name];
|
|
67
|
+
|
|
68
|
+
const launcher = {};
|
|
69
|
+
customLaunchers[name] = launcher;
|
|
70
|
+
|
|
71
|
+
// Disabled-by-default browsers are still defined, but not put in the
|
|
72
|
+
// default list. A user can ask for one explicitly. This allows us to
|
|
73
|
+
// disable a browser that is down for some reason in the lab, but still
|
|
74
|
+
// ask for it manually if we want to test it before re-enabling it for
|
|
75
|
+
// everyone.
|
|
76
|
+
if (!metadata.disabled) {
|
|
77
|
+
settings.default_browsers.push(name);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Add standard WebDriver configs.
|
|
81
|
+
Object.assign(launcher, {
|
|
82
|
+
base: 'WebDriver',
|
|
83
|
+
config: {hostname: gridHostname, port: gridPort},
|
|
84
|
+
pseudoActivityInterval: 20000,
|
|
85
|
+
browserName: metadata.browser,
|
|
86
|
+
platform: metadata.os,
|
|
87
|
+
version: metadata.version,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
if (metadata.extra_config) {
|
|
91
|
+
Object.assign(launcher, metadata.extra_config);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
config.set({
|
|
96
|
+
customLaunchers: customLaunchers,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
46
100
|
if (settings.browsers && settings.browsers.length == 1 &&
|
|
47
101
|
settings.browsers[0] == 'help') {
|
|
48
102
|
console.log('Available browsers:');
|
|
@@ -53,6 +107,24 @@ module.exports = (config) => {
|
|
|
53
107
|
process.exit(1);
|
|
54
108
|
}
|
|
55
109
|
|
|
110
|
+
// Resolve the set of browsers we will use.
|
|
111
|
+
const browserSet = new Set(settings.browsers && settings.browsers.length ?
|
|
112
|
+
settings.browsers : settings.default_browsers);
|
|
113
|
+
if (settings.exclude_browsers) {
|
|
114
|
+
for (const excluded of settings.exclude_browsers) {
|
|
115
|
+
browserSet.delete(excluded);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
let browsers = Array.from(browserSet).sort();
|
|
120
|
+
if (settings.no_browsers) {
|
|
121
|
+
console.warn(
|
|
122
|
+
'--no-browsers: In this mode, you must connect browsers to Karma.');
|
|
123
|
+
browsers = null;
|
|
124
|
+
} else {
|
|
125
|
+
console.warn('Running tests on: ' + browsers.join(', '));
|
|
126
|
+
}
|
|
127
|
+
|
|
56
128
|
config.set({
|
|
57
129
|
// base path that will be used to resolve all patterns (eg. files, exclude)
|
|
58
130
|
basePath: '.',
|
|
@@ -87,7 +159,7 @@ module.exports = (config) => {
|
|
|
87
159
|
// Promise polyfill, required since we test uncompiled code on IE11
|
|
88
160
|
'node_modules/es6-promise-polyfill/promise.js',
|
|
89
161
|
// Babel polyfill, required for async/await
|
|
90
|
-
'node_modules/
|
|
162
|
+
'node_modules/@babel/polyfill/dist/polyfill.js',
|
|
91
163
|
// TextDecoder polyfill, required for TextDecoder/TextEncoder on IE and
|
|
92
164
|
// legacy Edge
|
|
93
165
|
// eslint-disable-next-line max-len
|
|
@@ -107,46 +179,46 @@ module.exports = (config) => {
|
|
|
107
179
|
'dist/deps.js',
|
|
108
180
|
'shaka-player.uncompiled.js',
|
|
109
181
|
|
|
182
|
+
// the demo's config tab will register with shakaDemoMain, and will be
|
|
183
|
+
// tested in test/demo/demo_unit.js
|
|
184
|
+
'demo/config.js',
|
|
185
|
+
|
|
110
186
|
// cajon module (an AMD variant of requirejs) next
|
|
111
187
|
'node_modules/cajon/cajon.js',
|
|
112
188
|
|
|
113
|
-
//
|
|
114
|
-
'test/test/
|
|
189
|
+
// define the test namespace next (shaka.test)
|
|
190
|
+
'test/test/namespace.js',
|
|
115
191
|
|
|
116
|
-
// test
|
|
192
|
+
// test utilities next, which fill in that namespace
|
|
117
193
|
'test/test/util/*.js',
|
|
118
194
|
|
|
119
|
-
//
|
|
120
|
-
'
|
|
121
|
-
'demo/common/asset.js',
|
|
122
|
-
'demo/common/assets.js',
|
|
195
|
+
// bootstrapping for the test suite last; this will load the actual tests
|
|
196
|
+
'test/test/boot.js',
|
|
123
197
|
|
|
124
198
|
// if --test-custom-asset *is not* present, we will add unit tests.
|
|
125
199
|
// if --quick *is not* present, we will add integration tests.
|
|
126
200
|
// if --external *is* present, we will add external asset tests.
|
|
127
201
|
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
pattern: 'demo/!(main|load|demo_uncompiled|service_worker).js',
|
|
131
|
-
included: true,
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
// source files - these are only watched and served
|
|
202
|
+
// source files - these are only watched and served.
|
|
203
|
+
// anything not listed here can't be dynamically loaded by other scripts.
|
|
135
204
|
{pattern: 'lib/**/*.js', included: false},
|
|
136
205
|
{pattern: 'ui/**/*.js', included: false},
|
|
137
206
|
{pattern: 'ui/**/*.less', included: false},
|
|
138
207
|
{pattern: 'third_party/**/*.js', included: false},
|
|
139
|
-
{
|
|
140
|
-
pattern: 'node_modules/google-closure-library/closure/goog/**/*.js',
|
|
141
|
-
included: false,
|
|
142
|
-
},
|
|
208
|
+
{pattern: 'test/**/*.js', included: false},
|
|
143
209
|
{pattern: 'test/test/assets/*', included: false},
|
|
144
210
|
{pattern: 'test/test/assets/3675/*', included: false},
|
|
145
211
|
{pattern: 'dist/shaka-player.ui.js', included: false},
|
|
146
212
|
{pattern: 'dist/locales.js', included: false},
|
|
213
|
+
{pattern: 'demo/**/*.js', included: false},
|
|
147
214
|
{pattern: 'demo/locales/en.json', included: false},
|
|
148
215
|
{pattern: 'demo/locales/source.json', included: false},
|
|
149
|
-
{pattern: 'node_modules
|
|
216
|
+
{pattern: 'node_modules/sprintf-js/src/sprintf.js', included: false},
|
|
217
|
+
{pattern: 'node_modules/less/dist/less.js', included: false},
|
|
218
|
+
{
|
|
219
|
+
pattern: 'node_modules/fontfaceonload/dist/fontfaceonload.js',
|
|
220
|
+
included: false,
|
|
221
|
+
},
|
|
150
222
|
],
|
|
151
223
|
|
|
152
224
|
// NOTE: Do not use proxies at all! They cannot be used with the --hostname
|
|
@@ -212,7 +284,7 @@ module.exports = (config) => {
|
|
|
212
284
|
|
|
213
285
|
// Set which browsers to run on. If this is null, then Karma will wait for
|
|
214
286
|
// an incoming connection.
|
|
215
|
-
browsers
|
|
287
|
+
browsers,
|
|
216
288
|
|
|
217
289
|
// Enable / disable colors in the output (reporters and logs). Defaults
|
|
218
290
|
// to true.
|
|
@@ -243,6 +315,7 @@ module.exports = (config) => {
|
|
|
243
315
|
|
|
244
316
|
specReporter: {
|
|
245
317
|
suppressSkipped: true,
|
|
318
|
+
showBrowser: true,
|
|
246
319
|
},
|
|
247
320
|
});
|
|
248
321
|
|
|
@@ -260,7 +333,7 @@ module.exports = (config) => {
|
|
|
260
333
|
|
|
261
334
|
babelPreprocessor: {
|
|
262
335
|
options: {
|
|
263
|
-
presets: ['env'],
|
|
336
|
+
presets: ['@babel/preset-env'],
|
|
264
337
|
// Add source maps so that backtraces refer to the original code.
|
|
265
338
|
// Babel will output inline source maps, and the 'sourcemap'
|
|
266
339
|
// preprocessor will read them and feed them to Karma. Karma will
|
|
@@ -283,26 +356,34 @@ module.exports = (config) => {
|
|
|
283
356
|
});
|
|
284
357
|
}
|
|
285
358
|
|
|
359
|
+
const clientArgs = config.client.args[0];
|
|
360
|
+
clientArgs.testFiles = [];
|
|
361
|
+
|
|
286
362
|
if (settings.test_custom_asset) {
|
|
287
363
|
// If testing custom assets, we don't serve other unit or integration tests.
|
|
288
364
|
// External asset tests are the basis for custom asset testing, so this file
|
|
289
365
|
// is automatically included.
|
|
290
|
-
|
|
366
|
+
clientArgs.testFiles.push('demo/common/asset.js');
|
|
367
|
+
clientArgs.testFiles.push('demo/common/assets.js');
|
|
368
|
+
clientArgs.testFiles.push('test/player_external.js');
|
|
291
369
|
} else {
|
|
292
370
|
// In a normal test run, we serve unit tests.
|
|
293
|
-
|
|
371
|
+
clientArgs.testFiles.push('test/**/*_unit.js');
|
|
294
372
|
|
|
295
373
|
if (!settings.quick) {
|
|
296
374
|
// If --quick is present, we don't serve integration tests.
|
|
297
|
-
|
|
375
|
+
clientArgs.testFiles.push('test/**/*_integration.js');
|
|
298
376
|
}
|
|
299
377
|
if (settings.external) {
|
|
300
378
|
// If --external is present, we serve external asset tests.
|
|
301
|
-
|
|
379
|
+
clientArgs.testFiles.push('demo/common/asset.js');
|
|
380
|
+
clientArgs.testFiles.push('demo/common/assets.js');
|
|
381
|
+
clientArgs.testFiles.push('test/**/*_external.js');
|
|
302
382
|
}
|
|
303
383
|
}
|
|
304
|
-
|
|
305
|
-
//
|
|
384
|
+
|
|
385
|
+
// These are the test files that will be dynamically loaded by boot.js.
|
|
386
|
+
clientArgs.testFiles = resolveGlobs(clientArgs.testFiles);
|
|
306
387
|
|
|
307
388
|
const reporters = [];
|
|
308
389
|
|
|
@@ -347,14 +428,44 @@ module.exports = (config) => {
|
|
|
347
428
|
const seed = settings.seed == null ? new Date().getTime() : settings.seed;
|
|
348
429
|
|
|
349
430
|
// Run tests in a random order.
|
|
350
|
-
const clientArgs = config.client.args[0];
|
|
351
431
|
clientArgs.random = true;
|
|
352
432
|
clientArgs.seed = seed;
|
|
353
433
|
|
|
354
434
|
console.log('Using a random test order (--random) with --seed=' + seed);
|
|
355
435
|
}
|
|
436
|
+
|
|
437
|
+
if (settings.tls_key && settings.tls_cert) {
|
|
438
|
+
config.set({
|
|
439
|
+
protocol: 'https',
|
|
440
|
+
httpsServerOptions: {
|
|
441
|
+
key: fs.readFileSync(settings.tls_key),
|
|
442
|
+
cert: fs.readFileSync(settings.tls_cert),
|
|
443
|
+
},
|
|
444
|
+
});
|
|
445
|
+
}
|
|
356
446
|
};
|
|
357
447
|
|
|
448
|
+
/**
|
|
449
|
+
* Resolves a list of paths using globs into a list of explicit paths.
|
|
450
|
+
* Paths are all relative to the source directory.
|
|
451
|
+
*
|
|
452
|
+
* @param {!Array.<string>} list
|
|
453
|
+
* @return {!Array.<string>}
|
|
454
|
+
*/
|
|
455
|
+
function resolveGlobs(list) {
|
|
456
|
+
const options = {
|
|
457
|
+
cwd: __dirname,
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
const resolved = [];
|
|
461
|
+
for (const path of list) {
|
|
462
|
+
for (const resolvedPath of glob.sync(path, options)) {
|
|
463
|
+
resolved.push(resolvedPath);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
return resolved;
|
|
467
|
+
}
|
|
468
|
+
|
|
358
469
|
/**
|
|
359
470
|
* Determines which launchers and customLaunchers can be used and returns an
|
|
360
471
|
* array of strings.
|
|
@@ -421,7 +532,7 @@ function allUsableBrowserLaunchers(config) {
|
|
|
421
532
|
browsers.push(...Object.keys(config.customLaunchers));
|
|
422
533
|
}
|
|
423
534
|
|
|
424
|
-
return browsers;
|
|
535
|
+
return browsers.sort();
|
|
425
536
|
}
|
|
426
537
|
|
|
427
538
|
/**
|
|
@@ -9,7 +9,6 @@ goog.provide('shaka.abr.SimpleAbrManager');
|
|
|
9
9
|
goog.require('goog.asserts');
|
|
10
10
|
goog.require('shaka.abr.EwmaBandwidthEstimator');
|
|
11
11
|
goog.require('shaka.log');
|
|
12
|
-
goog.require('shaka.util.Iterables');
|
|
13
12
|
goog.require('shaka.util.StreamUtils');
|
|
14
13
|
|
|
15
14
|
|
|
@@ -145,15 +144,21 @@ shaka.abr.SimpleAbrManager = class {
|
|
|
145
144
|
// Start by assuming that we will use the first Stream.
|
|
146
145
|
let chosen = sortedVariants[0] || null;
|
|
147
146
|
|
|
148
|
-
|
|
149
|
-
|
|
147
|
+
for (let i = 0; i < sortedVariants.length; i++) {
|
|
148
|
+
const item = sortedVariants[i];
|
|
150
149
|
const playbackRate =
|
|
151
150
|
!isNaN(this.playbackRate_) ? Math.abs(this.playbackRate_) : 1;
|
|
152
151
|
const itemBandwidth = playbackRate * item.bandwidth;
|
|
153
152
|
const minBandwidth =
|
|
154
153
|
itemBandwidth / this.config_.bandwidthDowngradeTarget;
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
let next = {bandwidth: Infinity};
|
|
155
|
+
for (let j = i + 1; j < sortedVariants.length; j++) {
|
|
156
|
+
if (item.bandwidth != sortedVariants[j].bandwidth) {
|
|
157
|
+
next = sortedVariants[j];
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const nextBandwidth = playbackRate * next.bandwidth;
|
|
157
162
|
const maxBandwidth = nextBandwidth / this.config_.bandwidthUpgradeTarget;
|
|
158
163
|
shaka.log.v2('Bandwidth ranges:',
|
|
159
164
|
(itemBandwidth / 1e6).toFixed(3),
|
|
@@ -161,7 +166,8 @@ shaka.abr.SimpleAbrManager = class {
|
|
|
161
166
|
(maxBandwidth / 1e6).toFixed(3));
|
|
162
167
|
|
|
163
168
|
if (currentBandwidth >= minBandwidth &&
|
|
164
|
-
currentBandwidth <= maxBandwidth
|
|
169
|
+
currentBandwidth <= maxBandwidth &&
|
|
170
|
+
chosen.bandwidth != item.bandwidth) {
|
|
165
171
|
chosen = item;
|
|
166
172
|
}
|
|
167
173
|
}
|
package/lib/cast/cast_proxy.js
CHANGED
|
@@ -314,10 +314,9 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
|
|
|
314
314
|
* @private
|
|
315
315
|
*/
|
|
316
316
|
mapCompiledToUncompiledPlayerMethodNames_() {
|
|
317
|
-
// In compiled mode, UI tries to access player methods
|
|
318
|
-
//
|
|
319
|
-
//
|
|
320
|
-
// See https://github.com/google/shaka-player/issues/2130 for details.
|
|
317
|
+
// In compiled mode, UI tries to access player methods by their internal
|
|
318
|
+
// renamed names, but the proxy object doesn't know about those. See
|
|
319
|
+
// https://github.com/shaka-project/shaka-player/issues/2130 for details.
|
|
321
320
|
const methodsToNames = new Map();
|
|
322
321
|
this.iterateOverPlayerMethods_((name, method) => {
|
|
323
322
|
if (methodsToNames.has(method)) {
|
|
@@ -140,8 +140,8 @@ shaka.cea.Cea608DataChannel = class {
|
|
|
140
140
|
const buf = this.curbuf_;
|
|
141
141
|
|
|
142
142
|
// Move entire scroll window to a new base in rollup mode.
|
|
143
|
-
if (this.type_ === shaka.cea.Cea608DataChannel.CaptionType.ROLLUP
|
|
144
|
-
|
|
143
|
+
if (this.type_ === shaka.cea.Cea608DataChannel.CaptionType.ROLLUP &&
|
|
144
|
+
row !== buf.getRow()) {
|
|
145
145
|
const oldTopRow = 1 + buf.getRow() - buf.getScrollSize();
|
|
146
146
|
const newTopRow = 1 + row - buf.getScrollSize();
|
|
147
147
|
|
|
@@ -9,7 +9,6 @@ goog.provide('shaka.cea.Cea708Service');
|
|
|
9
9
|
goog.require('shaka.cea.Cea708Window');
|
|
10
10
|
goog.require('shaka.cea.DtvccPacket');
|
|
11
11
|
goog.require('shaka.cea.ICaptionDecoder');
|
|
12
|
-
goog.require('shaka.util.Error');
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
/**
|
|
@@ -301,17 +300,19 @@ shaka.cea.Cea708Service = class {
|
|
|
301
300
|
/**
|
|
302
301
|
* Yields each non-null window specified in the 8-bit bitmap.
|
|
303
302
|
* @param {number} bitmap 8 bits corresponding to each of the 8 windows.
|
|
304
|
-
* @return {!
|
|
303
|
+
* @return {!Array.<number>}
|
|
305
304
|
* @private
|
|
306
305
|
*/
|
|
307
|
-
|
|
306
|
+
getSpecifiedWindowIds_(bitmap) {
|
|
307
|
+
const ids = [];
|
|
308
308
|
for (let i = 0; i < 8; i++) {
|
|
309
309
|
const windowSpecified = (bitmap & 0x01) === 0x01;
|
|
310
310
|
if (windowSpecified && this.windows_[i]) {
|
|
311
|
-
|
|
311
|
+
ids.push(i);
|
|
312
312
|
}
|
|
313
313
|
bitmap >>= 1;
|
|
314
314
|
}
|
|
315
|
+
return ids;
|
|
315
316
|
}
|
|
316
317
|
|
|
317
318
|
/**
|
|
@@ -150,11 +150,11 @@ shaka.cea.Mp4CeaParser = class {
|
|
|
150
150
|
|
|
151
151
|
// If specified, defaultSampleDuration and defaultSampleSize
|
|
152
152
|
// override the ones specified in the TREX box
|
|
153
|
-
defaultSampleDuration = parsedTFHD.defaultSampleDuration
|
|
154
|
-
|
|
153
|
+
defaultSampleDuration = parsedTFHD.defaultSampleDuration ||
|
|
154
|
+
this.defaultSampleDuration_;
|
|
155
155
|
|
|
156
|
-
defaultSampleSize = parsedTFHD.defaultSampleSize
|
|
157
|
-
|
|
156
|
+
defaultSampleSize = parsedTFHD.defaultSampleSize ||
|
|
157
|
+
this.defaultSampleSize_;
|
|
158
158
|
|
|
159
159
|
const trackId = parsedTFHD.trackId;
|
|
160
160
|
|
|
@@ -236,7 +236,13 @@ shaka.cea.Mp4CeaParser = class {
|
|
|
236
236
|
});
|
|
237
237
|
}
|
|
238
238
|
} else {
|
|
239
|
-
|
|
239
|
+
try {
|
|
240
|
+
reader.skip(naluSize - 1);
|
|
241
|
+
} catch (e) {
|
|
242
|
+
// It is necessary to ignore this error because it can break the start
|
|
243
|
+
// of playback even if the user does not want to see the subtitles.
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
240
246
|
}
|
|
241
247
|
sampleSize -= (naluSize + 4);
|
|
242
248
|
if (sampleSize == 0) {
|
package/lib/cea/sei_processor.js
CHANGED
|
@@ -14,9 +14,10 @@ shaka.cea.SeiProcessor = class {
|
|
|
14
14
|
/**
|
|
15
15
|
* Processes supplemental enhancement information data.
|
|
16
16
|
* @param {!Uint8Array} naluData NALU from which SEI data is to be processed.
|
|
17
|
-
* @return {!
|
|
17
|
+
* @return {!Array.<!Uint8Array>}
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
process(naluData) {
|
|
20
|
+
const seiPayloads = [];
|
|
20
21
|
const naluClone = this.removeEmu(naluData);
|
|
21
22
|
|
|
22
23
|
// The following is an implementation of section 7.3.2.3.1
|
|
@@ -41,10 +42,12 @@ shaka.cea.SeiProcessor = class {
|
|
|
41
42
|
// Payload type 4 is user_data_registered_itu_t_t35, as per the H.264
|
|
42
43
|
// spec. This payload type contains caption data.
|
|
43
44
|
if (payloadType == 0x04) {
|
|
44
|
-
|
|
45
|
+
seiPayloads.push(naluClone.subarray(offset, offset + payloadSize));
|
|
45
46
|
}
|
|
46
47
|
offset += payloadSize;
|
|
47
48
|
}
|
|
49
|
+
|
|
50
|
+
return seiPayloads;
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
|
package/lib/dash/dash_parser.js
CHANGED
|
@@ -22,7 +22,6 @@ goog.require('shaka.text.TextEngine');
|
|
|
22
22
|
goog.require('shaka.util.CmcdManager');
|
|
23
23
|
goog.require('shaka.util.Error');
|
|
24
24
|
goog.require('shaka.util.Functional');
|
|
25
|
-
goog.require('shaka.util.Iterables');
|
|
26
25
|
goog.require('shaka.util.LanguageUtils');
|
|
27
26
|
goog.require('shaka.util.ManifestParserUtils');
|
|
28
27
|
goog.require('shaka.util.MimeUtils');
|
|
@@ -104,7 +103,7 @@ shaka.dash.DashParser = class {
|
|
|
104
103
|
|
|
105
104
|
/**
|
|
106
105
|
* Period IDs seen in previous manifest.
|
|
107
|
-
* @private {!Array.<
|
|
106
|
+
* @private {!Array.<string>}
|
|
108
107
|
*/
|
|
109
108
|
this.lastManifestUpdatePeriodIds_ = [];
|
|
110
109
|
|
|
@@ -383,7 +382,7 @@ shaka.dash.DashParser = class {
|
|
|
383
382
|
// This gives us confidence that our state is maintained correctly, and
|
|
384
383
|
// that the complex logic of multi-Period eviction and period-flattening
|
|
385
384
|
// is correct. See also:
|
|
386
|
-
// https://github.com/
|
|
385
|
+
// https://github.com/shaka-project/shaka-player/issues/3169#issuecomment-823580634
|
|
387
386
|
for (const stream of Object.values(this.streamMap_)) {
|
|
388
387
|
if (stream.segmentIndex) {
|
|
389
388
|
stream.segmentIndex.evict(
|
|
@@ -555,10 +554,9 @@ shaka.dash.DashParser = class {
|
|
|
555
554
|
const periods = [];
|
|
556
555
|
let prevEnd = 0;
|
|
557
556
|
const periodNodes = XmlUtils.findChildren(mpd, 'Period');
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
for (const {i, item: elem, next} of enumerate(periodNodes)) {
|
|
557
|
+
for (let i = 0; i < periodNodes.length; i++) {
|
|
558
|
+
const elem = periodNodes[i];
|
|
559
|
+
const next = periodNodes[i + 1];
|
|
562
560
|
const start = /** @type {number} */ (
|
|
563
561
|
XmlUtils.parseAttr(elem, 'start', XmlUtils.parseDuration, prevEnd));
|
|
564
562
|
const periodId = elem.id;
|
|
@@ -764,10 +762,10 @@ shaka.dash.DashParser = class {
|
|
|
764
762
|
for (const stream of normalSet.streams) {
|
|
765
763
|
// There may be multiple trick mode streams, but we do not
|
|
766
764
|
// currently support that. Just choose one.
|
|
767
|
-
// TODO: https://github.com/
|
|
765
|
+
// TODO: https://github.com/shaka-project/shaka-player/issues/1528
|
|
768
766
|
stream.trickModeVideo = trickModeSet.streams.find((trickStream) =>
|
|
769
|
-
shaka.util.MimeUtils.
|
|
770
|
-
shaka.util.MimeUtils.
|
|
767
|
+
shaka.util.MimeUtils.getNormalizedCodec(stream.codecs) ==
|
|
768
|
+
shaka.util.MimeUtils.getNormalizedCodec(trickStream.codecs));
|
|
771
769
|
}
|
|
772
770
|
}
|
|
773
771
|
}
|
|
@@ -1157,7 +1155,7 @@ shaka.dash.DashParser = class {
|
|
|
1157
1155
|
// does not make sense in the DASH spec's bandwidth formulas.
|
|
1158
1156
|
// In some content, however, the attribute is missing or zero.
|
|
1159
1157
|
// To avoid NaN at the variant level on broken content, fall back to zero.
|
|
1160
|
-
// https://github.com/
|
|
1158
|
+
// https://github.com/shaka-project/shaka-player/issues/938#issuecomment-317278180
|
|
1161
1159
|
context.bandwidth =
|
|
1162
1160
|
XmlUtils.parseAttr(node, 'bandwidth', XmlUtils.parsePositiveInt) || 0;
|
|
1163
1161
|
|
|
@@ -1230,13 +1228,12 @@ shaka.dash.DashParser = class {
|
|
|
1230
1228
|
});
|
|
1231
1229
|
let spatialAudio = false;
|
|
1232
1230
|
if (hasJoc) {
|
|
1233
|
-
context.representation.mimeType = 'audio/eac3-joc';
|
|
1234
1231
|
spatialAudio = true;
|
|
1235
1232
|
}
|
|
1236
1233
|
|
|
1237
1234
|
let forced = false;
|
|
1238
1235
|
if (isText) {
|
|
1239
|
-
// See: https://github.com/
|
|
1236
|
+
// See: https://github.com/shaka-project/shaka-player/issues/2122 and
|
|
1240
1237
|
// https://github.com/Dash-Industry-Forum/DASH-IF-IOP/issues/165
|
|
1241
1238
|
forced = roles.includes('forced_subtitle') ||
|
|
1242
1239
|
roles.includes('forced-subtitle');
|
|
@@ -1384,7 +1381,7 @@ shaka.dash.DashParser = class {
|
|
|
1384
1381
|
// NOTE: An updatePeriod_ of -1 means the attribute was missing.
|
|
1385
1382
|
// An attribute which is present and set to 0 should still result in
|
|
1386
1383
|
// periodic updates. For more, see:
|
|
1387
|
-
// https://github.com/
|
|
1384
|
+
// https://github.com/shaka-project/shaka-player/issues/331
|
|
1388
1385
|
if (this.updatePeriod_ < 0) {
|
|
1389
1386
|
return;
|
|
1390
1387
|
}
|
package/lib/dash/mpd_utils.js
CHANGED
|
@@ -12,7 +12,6 @@ goog.require('shaka.net.NetworkingEngine');
|
|
|
12
12
|
goog.require('shaka.util.AbortableOperation');
|
|
13
13
|
goog.require('shaka.util.Error');
|
|
14
14
|
goog.require('shaka.util.Functional');
|
|
15
|
-
goog.require('shaka.util.Iterables');
|
|
16
15
|
goog.require('shaka.util.ManifestParserUtils');
|
|
17
16
|
goog.require('shaka.util.XmlUtils');
|
|
18
17
|
goog.requireType('shaka.dash.DashParser');
|
|
@@ -142,8 +141,9 @@ shaka.dash.MpdUtils = class {
|
|
|
142
141
|
const timeline = [];
|
|
143
142
|
let lastEndTime = -unscaledPresentationTimeOffset;
|
|
144
143
|
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
for (let i = 0; i < timePoints.length; ++i) {
|
|
145
|
+
const timePoint = timePoints[i];
|
|
146
|
+
const next = timePoints[i + 1];
|
|
147
147
|
let t = XmlUtils.parseAttr(timePoint, 't', XmlUtils.parseNonNegativeInt);
|
|
148
148
|
const d =
|
|
149
149
|
XmlUtils.parseAttr(timePoint, 'd', XmlUtils.parseNonNegativeInt);
|
|
@@ -225,8 +225,7 @@ shaka.dash.MpdUtils = class {
|
|
|
225
225
|
timeline[timeline.length - 1].end = startTime / timescale;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
for (
|
|
229
|
-
shaka.util.Functional.ignored(_);
|
|
228
|
+
for (let j = 0; j <= repeat; ++j) {
|
|
230
229
|
const endTime = startTime + d;
|
|
231
230
|
const item = {
|
|
232
231
|
start: startTime / timescale,
|
package/lib/dash/segment_list.js
CHANGED
|
@@ -15,7 +15,6 @@ goog.require('shaka.media.SegmentIndex');
|
|
|
15
15
|
goog.require('shaka.media.SegmentReference');
|
|
16
16
|
goog.require('shaka.util.Error');
|
|
17
17
|
goog.require('shaka.util.Functional');
|
|
18
|
-
goog.require('shaka.util.Iterables');
|
|
19
18
|
goog.require('shaka.util.ManifestParserUtils');
|
|
20
19
|
goog.require('shaka.util.XmlUtils');
|
|
21
20
|
goog.requireType('shaka.dash.DashParser');
|
|
@@ -222,7 +221,7 @@ shaka.dash.SegmentList = class {
|
|
|
222
221
|
/** @type {!Array.<!shaka.media.SegmentReference>} */
|
|
223
222
|
const references = [];
|
|
224
223
|
let prevEndTime = info.startTime;
|
|
225
|
-
for (
|
|
224
|
+
for (let i = 0; i < max; i++) {
|
|
226
225
|
const segment = info.mediaSegments[i];
|
|
227
226
|
const mediaUri = ManifestParserUtils.resolveUris(
|
|
228
227
|
baseUris, [segment.mediaUri]);
|
|
@@ -14,7 +14,6 @@ goog.require('shaka.media.InitSegmentReference');
|
|
|
14
14
|
goog.require('shaka.media.SegmentIndex');
|
|
15
15
|
goog.require('shaka.media.SegmentReference');
|
|
16
16
|
goog.require('shaka.util.Error');
|
|
17
|
-
goog.require('shaka.util.Iterables');
|
|
18
17
|
goog.require('shaka.util.ManifestParserUtils');
|
|
19
18
|
goog.require('shaka.util.ObjectUtils');
|
|
20
19
|
goog.requireType('shaka.dash.DashParser');
|
|
@@ -504,8 +503,9 @@ shaka.dash.SegmentTemplate = class {
|
|
|
504
503
|
|
|
505
504
|
/** @type {!Array.<!shaka.media.SegmentReference>} */
|
|
506
505
|
const references = [];
|
|
507
|
-
|
|
508
|
-
|
|
506
|
+
for (let i = 0; i < info.timeline.length; i++) {
|
|
507
|
+
const {start, unscaledStart, end} = info.timeline[i];
|
|
508
|
+
|
|
509
509
|
// Note: i = k - 1, where k indicates the k'th segment listed in the MPD.
|
|
510
510
|
// (See section 5.3.9.5.3 of the DASH spec.)
|
|
511
511
|
const segmentReplacement = i + info.startNumber;
|