shaka-player 3.2.4 → 3.2.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 +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 +1596 -1556
- 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 +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 +94 -29
- package/build/wrapper.template.js +2 -2
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/asset_card.js +1 -2
- package/demo/cast_receiver/index.html +1 -1
- package/demo/cast_receiver/receiver_app.css +14 -14
- package/demo/common/assets.js +2 -0
- package/demo/config.js +0 -1
- package/demo/custom.js +0 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/index.html +1 -1
- package/demo/main.js +3 -3
- package/dist/controls.css +2 -2
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +191 -194
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +191 -194
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +225 -219
- package/dist/locales.js +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 +225 -224
- package/dist/shaka-player.compiled.debug.d.ts +225 -224
- package/dist/shaka-player.compiled.debug.externs.js +5 -3
- package/dist/shaka-player.compiled.debug.js +319 -323
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +5 -3
- package/dist/shaka-player.compiled.js +832 -833
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +267 -266
- package/dist/shaka-player.ui.debug.d.ts +267 -266
- package/dist/shaka-player.ui.debug.externs.js +5 -3
- package/dist/shaka-player.ui.debug.js +287 -291
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +5 -3
- package/dist/shaka-player.ui.js +981 -982
- package/dist/shaka-player.ui.map +4 -4
- package/docs/design/REDESIGN.md +33 -33
- package/docs/design/codec_preferences.md +1 -1
- package/docs/design/dash-audio-channels.md +3 -3
- package/docs/design/dash-manifests.md +1 -1
- package/docs/design/gap-jumping.md +3 -3
- package/docs/design/preload.md +2 -2
- package/docs/tutorials/faq.md +8 -8
- package/docs/tutorials/index.json +1 -0
- package/docs/tutorials/plugins.md +3 -3
- package/docs/tutorials/selenium-grid-config.md +122 -0
- package/docs/tutorials/welcome.md +10 -2
- package/karma.conf.js +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 +4 -4
- 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/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 +13 -13
- 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/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/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 -25
- package/test/player_external.js +9 -11
- package/test/player_integration.js +27 -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/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 +9 -11
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +7 -2
- 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/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
|
|
|
@@ -142,15 +141,21 @@ shaka.abr.SimpleAbrManager = class {
|
|
|
142
141
|
// Start by assuming that we will use the first Stream.
|
|
143
142
|
let chosen = sortedVariants[0] || null;
|
|
144
143
|
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
for (let i = 0; i < sortedVariants.length; i++) {
|
|
145
|
+
const item = sortedVariants[i];
|
|
147
146
|
const playbackRate =
|
|
148
147
|
!isNaN(this.playbackRate_) ? Math.abs(this.playbackRate_) : 1;
|
|
149
148
|
const itemBandwidth = playbackRate * item.bandwidth;
|
|
150
149
|
const minBandwidth =
|
|
151
150
|
itemBandwidth / this.config_.bandwidthDowngradeTarget;
|
|
152
|
-
|
|
153
|
-
|
|
151
|
+
let next = {bandwidth: Infinity};
|
|
152
|
+
for (let j = i + 1; j < sortedVariants.length; j++) {
|
|
153
|
+
if (item.bandwidth != sortedVariants[j].bandwidth) {
|
|
154
|
+
next = sortedVariants[j];
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const nextBandwidth = playbackRate * next.bandwidth;
|
|
154
159
|
const maxBandwidth = nextBandwidth / this.config_.bandwidthUpgradeTarget;
|
|
155
160
|
shaka.log.v2('Bandwidth ranges:',
|
|
156
161
|
(itemBandwidth / 1e6).toFixed(3),
|
|
@@ -158,7 +163,8 @@ shaka.abr.SimpleAbrManager = class {
|
|
|
158
163
|
(maxBandwidth / 1e6).toFixed(3));
|
|
159
164
|
|
|
160
165
|
if (currentBandwidth >= minBandwidth &&
|
|
161
|
-
currentBandwidth <= maxBandwidth
|
|
166
|
+
currentBandwidth <= maxBandwidth &&
|
|
167
|
+
chosen.bandwidth != item.bandwidth) {
|
|
162
168
|
chosen = item;
|
|
163
169
|
}
|
|
164
170
|
}
|
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
|
@@ -21,7 +21,6 @@ goog.require('shaka.net.NetworkingEngine');
|
|
|
21
21
|
goog.require('shaka.text.TextEngine');
|
|
22
22
|
goog.require('shaka.util.Error');
|
|
23
23
|
goog.require('shaka.util.Functional');
|
|
24
|
-
goog.require('shaka.util.Iterables');
|
|
25
24
|
goog.require('shaka.util.LanguageUtils');
|
|
26
25
|
goog.require('shaka.util.ManifestParserUtils');
|
|
27
26
|
goog.require('shaka.util.MimeUtils');
|
|
@@ -103,7 +102,7 @@ shaka.dash.DashParser = class {
|
|
|
103
102
|
|
|
104
103
|
/**
|
|
105
104
|
* Period IDs seen in previous manifest.
|
|
106
|
-
* @private {!Array.<
|
|
105
|
+
* @private {!Array.<string>}
|
|
107
106
|
*/
|
|
108
107
|
this.lastManifestUpdatePeriodIds_ = [];
|
|
109
108
|
|
|
@@ -377,7 +376,7 @@ shaka.dash.DashParser = class {
|
|
|
377
376
|
// This gives us confidence that our state is maintained correctly, and
|
|
378
377
|
// that the complex logic of multi-Period eviction and period-flattening
|
|
379
378
|
// is correct. See also:
|
|
380
|
-
// https://github.com/
|
|
379
|
+
// https://github.com/shaka-project/shaka-player/issues/3169#issuecomment-823580634
|
|
381
380
|
for (const segmentIndex of Object.values(this.segmentIndexMap_)) {
|
|
382
381
|
segmentIndex.evict(presentationTimeline.getSegmentAvailabilityStart());
|
|
383
382
|
}
|
|
@@ -546,10 +545,9 @@ shaka.dash.DashParser = class {
|
|
|
546
545
|
const periods = [];
|
|
547
546
|
let prevEnd = 0;
|
|
548
547
|
const periodNodes = XmlUtils.findChildren(mpd, 'Period');
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
for (const {i, item: elem, next} of enumerate(periodNodes)) {
|
|
548
|
+
for (let i = 0; i < periodNodes.length; i++) {
|
|
549
|
+
const elem = periodNodes[i];
|
|
550
|
+
const next = periodNodes[i + 1];
|
|
553
551
|
const start = /** @type {number} */ (
|
|
554
552
|
XmlUtils.parseAttr(elem, 'start', XmlUtils.parseDuration, prevEnd));
|
|
555
553
|
const periodId = elem.id;
|
|
@@ -755,10 +753,10 @@ shaka.dash.DashParser = class {
|
|
|
755
753
|
for (const stream of normalSet.streams) {
|
|
756
754
|
// There may be multiple trick mode streams, but we do not
|
|
757
755
|
// currently support that. Just choose one.
|
|
758
|
-
// TODO: https://github.com/
|
|
756
|
+
// TODO: https://github.com/shaka-project/shaka-player/issues/1528
|
|
759
757
|
stream.trickModeVideo = trickModeSet.streams.find((trickStream) =>
|
|
760
|
-
shaka.util.MimeUtils.
|
|
761
|
-
shaka.util.MimeUtils.
|
|
758
|
+
shaka.util.MimeUtils.getNormalizedCodec(stream.codecs) ==
|
|
759
|
+
shaka.util.MimeUtils.getNormalizedCodec(trickStream.codecs));
|
|
762
760
|
}
|
|
763
761
|
}
|
|
764
762
|
}
|
|
@@ -1148,7 +1146,7 @@ shaka.dash.DashParser = class {
|
|
|
1148
1146
|
// does not make sense in the DASH spec's bandwidth formulas.
|
|
1149
1147
|
// In some content, however, the attribute is missing or zero.
|
|
1150
1148
|
// To avoid NaN at the variant level on broken content, fall back to zero.
|
|
1151
|
-
// https://github.com/
|
|
1149
|
+
// https://github.com/shaka-project/shaka-player/issues/938#issuecomment-317278180
|
|
1152
1150
|
context.bandwidth =
|
|
1153
1151
|
XmlUtils.parseAttr(node, 'bandwidth', XmlUtils.parsePositiveInt) || 0;
|
|
1154
1152
|
|
|
@@ -1220,13 +1218,12 @@ shaka.dash.DashParser = class {
|
|
|
1220
1218
|
});
|
|
1221
1219
|
let spatialAudio = false;
|
|
1222
1220
|
if (hasJoc) {
|
|
1223
|
-
context.representation.mimeType = 'audio/eac3-joc';
|
|
1224
1221
|
spatialAudio = true;
|
|
1225
1222
|
}
|
|
1226
1223
|
|
|
1227
1224
|
let forced = false;
|
|
1228
1225
|
if (isText) {
|
|
1229
|
-
// See: https://github.com/
|
|
1226
|
+
// See: https://github.com/shaka-project/shaka-player/issues/2122 and
|
|
1230
1227
|
// https://github.com/Dash-Industry-Forum/DASH-IF-IOP/issues/165
|
|
1231
1228
|
forced = roles.includes('forced_subtitle') ||
|
|
1232
1229
|
roles.includes('forced-subtitle');
|
|
@@ -1352,7 +1349,7 @@ shaka.dash.DashParser = class {
|
|
|
1352
1349
|
// NOTE: An updatePeriod_ of -1 means the attribute was missing.
|
|
1353
1350
|
// An attribute which is present and set to 0 should still result in
|
|
1354
1351
|
// periodic updates. For more, see:
|
|
1355
|
-
// https://github.com/
|
|
1352
|
+
// https://github.com/shaka-project/shaka-player/issues/331
|
|
1356
1353
|
if (this.updatePeriod_ < 0) {
|
|
1357
1354
|
return;
|
|
1358
1355
|
}
|
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');
|
|
@@ -213,7 +212,7 @@ shaka.dash.SegmentList = class {
|
|
|
213
212
|
/** @type {!Array.<!shaka.media.SegmentReference>} */
|
|
214
213
|
const references = [];
|
|
215
214
|
let prevEndTime = info.startTime;
|
|
216
|
-
for (
|
|
215
|
+
for (let i = 0; i < max; i++) {
|
|
217
216
|
const segment = info.mediaSegments[i];
|
|
218
217
|
const mediaUri = ManifestParserUtils.resolveUris(
|
|
219
218
|
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');
|
|
@@ -491,8 +490,9 @@ shaka.dash.SegmentTemplate = class {
|
|
|
491
490
|
|
|
492
491
|
/** @type {!Array.<!shaka.media.SegmentReference>} */
|
|
493
492
|
const references = [];
|
|
494
|
-
|
|
495
|
-
|
|
493
|
+
for (let i = 0; i < info.timeline.length; i++) {
|
|
494
|
+
const {start, unscaledStart, end} = info.timeline[i];
|
|
495
|
+
|
|
496
496
|
// Note: i = k - 1, where k indicates the k'th segment listed in the MPD.
|
|
497
497
|
// (See section 5.3.9.5.3 of the DASH spec.)
|
|
498
498
|
const segmentReplacement = i + info.startNumber;
|