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
|
@@ -4,14 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.IndexedDBUtils');
|
|
8
|
-
|
|
9
|
-
goog.require('shaka.test.Util');
|
|
10
|
-
goog.require('shaka.util.Functional');
|
|
11
|
-
goog.require('shaka.util.Iterables');
|
|
12
|
-
goog.require('shaka.util.PublicPromise');
|
|
13
|
-
|
|
14
|
-
|
|
15
7
|
shaka.test.IndexedDBUtils = class {
|
|
16
8
|
/**
|
|
17
9
|
* Make a connection to indexeddb. This assumes that it will be a new
|
|
@@ -41,8 +33,7 @@ shaka.test.IndexedDBUtils = class {
|
|
|
41
33
|
// connection after 5 attempts (with delays in between), just give
|
|
42
34
|
// up.
|
|
43
35
|
let lastError;
|
|
44
|
-
for (
|
|
45
|
-
shaka.util.Functional.ignored(_);
|
|
36
|
+
for (let i = 0; i < 5; i++) {
|
|
46
37
|
try {
|
|
47
38
|
return await tryOpen(); // eslint-disable-line no-await-in-loop
|
|
48
39
|
} catch (e) { // eslint-disable-line no-restricted-syntax
|
package/test/test/util/loader.js
CHANGED
|
@@ -4,24 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.Loader');
|
|
8
|
-
|
|
9
|
-
goog.require('shaka.log');
|
|
10
|
-
goog.require('shaka.test.TestScheme');
|
|
11
|
-
goog.require('shaka.util.PublicPromise');
|
|
12
|
-
goog.requireType('shaka.Player');
|
|
13
|
-
goog.requireType('shaka.media.InitSegmentReference');
|
|
14
|
-
goog.requireType('shaka.media.PresentationTimeline');
|
|
15
|
-
goog.requireType('shaka.media.SegmentIndex');
|
|
16
|
-
goog.requireType('shaka.media.SegmentReference');
|
|
17
|
-
goog.requireType('shaka.net.NetworkingEngine');
|
|
18
|
-
goog.requireType('shaka.offline.Storage');
|
|
19
|
-
goog.requireType('shaka.ui.Controls');
|
|
20
|
-
goog.requireType('shaka.ui.Element');
|
|
21
|
-
goog.requireType('shaka.ui.Overlay');
|
|
22
|
-
goog.requireType('shaka.util.StringUtils');
|
|
23
|
-
|
|
24
|
-
|
|
25
7
|
/**
|
|
26
8
|
* A stand-in type for the "shaka" namespace. Used when loading the compiled
|
|
27
9
|
* library or when referencing it in ManifestGenerator or TestScheme.
|
|
@@ -4,18 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.ManifestGenerator');
|
|
8
|
-
|
|
9
|
-
goog.require('goog.asserts');
|
|
10
|
-
goog.require('shaka.test.Util');
|
|
11
|
-
goog.require('shaka.util.Iterables');
|
|
12
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
13
|
-
goog.require('shaka.util.Uint8ArrayUtils');
|
|
14
|
-
goog.requireType('shaka.media.InitSegmentReference');
|
|
15
|
-
goog.requireType('shaka.media.PresentationTimeline');
|
|
16
|
-
goog.requireType('shaka.media.SegmentIndex');
|
|
17
|
-
|
|
18
|
-
|
|
19
7
|
/**
|
|
20
8
|
* @summary
|
|
21
9
|
* A helper class used to generate manifests. This is done through a series
|
|
@@ -606,13 +594,20 @@ shaka.test.ManifestGenerator.Stream = class {
|
|
|
606
594
|
segmentDuration, 'Must pass a non-zero segment duration');
|
|
607
595
|
|
|
608
596
|
const shaka_ = this.manifest_.shaka_;
|
|
609
|
-
|
|
597
|
+
let totalDuration = this.manifest_.presentationTimeline.getDuration();
|
|
610
598
|
goog.asserts.assert(
|
|
611
599
|
isFinite(totalDuration), 'Must specify a manifest duration');
|
|
600
|
+
if (!isFinite(totalDuration)) {
|
|
601
|
+
// Without this, a mistake of an infinite duration would result in an
|
|
602
|
+
// infinite loop and a crash, which would in turn prevent you from seeing
|
|
603
|
+
// the above assertion fail.
|
|
604
|
+
totalDuration = 0;
|
|
605
|
+
}
|
|
606
|
+
|
|
612
607
|
const segmentCount = totalDuration / segmentDuration;
|
|
613
608
|
const references = [];
|
|
614
609
|
|
|
615
|
-
for (
|
|
610
|
+
for (let index = 0; index < segmentCount; index++) {
|
|
616
611
|
const getUris = () => [sprintf(template, index)];
|
|
617
612
|
const start = index * segmentDuration;
|
|
618
613
|
const end = Math.min(totalDuration, (index + 1) * segmentDuration);
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.ManifestParser');
|
|
8
|
-
|
|
9
|
-
goog.require('shaka.media.InitSegmentReference');
|
|
10
|
-
goog.require('shaka.media.SegmentReference');
|
|
11
|
-
|
|
12
|
-
|
|
13
7
|
shaka.test.ManifestParser = class {
|
|
14
8
|
/**
|
|
15
9
|
* Verifies the segment references of a stream.
|
|
@@ -4,28 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.FakeAbrManager');
|
|
8
|
-
goog.provide('shaka.test.FakeClosedCaptionParser');
|
|
9
|
-
goog.provide('shaka.test.FakeManifestParser');
|
|
10
|
-
goog.provide('shaka.test.FakePlayhead');
|
|
11
|
-
goog.provide('shaka.test.FakePlayheadObserver');
|
|
12
|
-
goog.provide('shaka.test.FakePresentationTimeline');
|
|
13
|
-
goog.provide('shaka.test.FakeSegmentIndex');
|
|
14
|
-
goog.provide('shaka.test.FakeStreamingEngine');
|
|
15
|
-
goog.provide('shaka.test.FakeTextTrack');
|
|
16
|
-
goog.provide('shaka.test.FakeTransmuxer');
|
|
17
|
-
goog.provide('shaka.test.FakeVideo');
|
|
18
|
-
|
|
19
|
-
goog.require('shaka.test.Util');
|
|
20
|
-
goog.require('shaka.abr.SimpleAbrManager');
|
|
21
|
-
goog.require('shaka.media.IClosedCaptionParser');
|
|
22
|
-
goog.require('shaka.media.Playhead');
|
|
23
|
-
goog.require('shaka.media.PresentationTimeline');
|
|
24
|
-
goog.require('shaka.media.SegmentIndex');
|
|
25
|
-
goog.require('shaka.media.StreamingEngine');
|
|
26
|
-
goog.require('shaka.media.Transmuxer');
|
|
27
|
-
|
|
28
|
-
|
|
29
7
|
/**
|
|
30
8
|
* @fileoverview Defines simple mocks for library types.
|
|
31
9
|
* @suppress {checkTypes} Suppress errors about missmatches between the
|
|
@@ -174,9 +152,27 @@ shaka.test.FakeVideo = class {
|
|
|
174
152
|
constructor(currentTime) {
|
|
175
153
|
/** @const {!Object.<string, !Function>} */
|
|
176
154
|
this.on = {}; // event listeners
|
|
155
|
+
|
|
177
156
|
/** @type {!Array.<!TextTrack>} */
|
|
178
157
|
this.textTracks = [];
|
|
179
158
|
|
|
159
|
+
// In a real video element, textTracks is an event target.
|
|
160
|
+
// Since Player listens to events on textTracks, we need to fake that
|
|
161
|
+
// interface.
|
|
162
|
+
this.textTracksEventTarget = new shaka.util.FakeEventTarget();
|
|
163
|
+
this.textTracks.addEventListener =
|
|
164
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
165
|
+
this.textTracksEventTarget.addEventListener.bind(
|
|
166
|
+
this.textTracksEventTarget);
|
|
167
|
+
this.textTracks.removeEventListener =
|
|
168
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
169
|
+
this.textTracksEventTarget.removeEventListener.bind(
|
|
170
|
+
this.textTracksEventTarget);
|
|
171
|
+
this.textTracks.dispatchEvent =
|
|
172
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
173
|
+
this.textTracksEventTarget.dispatchEvent.bind(
|
|
174
|
+
this.textTracksEventTarget);
|
|
175
|
+
|
|
180
176
|
this.currentTime = currentTime || 0;
|
|
181
177
|
this.readyState = 0;
|
|
182
178
|
this.playbackRate = 1;
|
|
@@ -195,6 +191,10 @@ shaka.test.FakeVideo = class {
|
|
|
195
191
|
jasmine.createSpy('addTextTrack').and.callFake((kind, id) => {
|
|
196
192
|
const track = new shaka.test.FakeTextTrack();
|
|
197
193
|
this.textTracks.push(track);
|
|
194
|
+
|
|
195
|
+
const trackEvent = new shaka.util.FakeEvent('addtrack', {track});
|
|
196
|
+
this.textTracksEventTarget.dispatchEvent(trackEvent);
|
|
197
|
+
|
|
198
198
|
return track;
|
|
199
199
|
});
|
|
200
200
|
|
|
@@ -330,11 +330,18 @@ shaka.test.FakePlayhead = class {
|
|
|
330
330
|
/** @type {!jasmine.Spy} */
|
|
331
331
|
this.setRebufferingGoal = jasmine.createSpy('setRebufferingGoal');
|
|
332
332
|
|
|
333
|
+
/** @private {number} */
|
|
334
|
+
this.startTime_ = 0;
|
|
335
|
+
|
|
333
336
|
/** @type {!jasmine.Spy} */
|
|
334
|
-
this.setStartTime = jasmine.createSpy('setStartTime')
|
|
337
|
+
this.setStartTime = jasmine.createSpy('setStartTime')
|
|
338
|
+
.and.callFake((value) => {
|
|
339
|
+
this.startTime_ = value;
|
|
340
|
+
});
|
|
335
341
|
|
|
336
342
|
/** @type {!jasmine.Spy} */
|
|
337
|
-
this.getTime = jasmine.createSpy('getTime')
|
|
343
|
+
this.getTime = jasmine.createSpy('getTime')
|
|
344
|
+
.and.callFake(() => this.startTime_);
|
|
338
345
|
|
|
339
346
|
/** @type {!jasmine.Spy} */
|
|
340
347
|
this.setBuffering = jasmine.createSpy('setBuffering');
|
|
@@ -351,19 +358,24 @@ shaka.test.FakePlayhead = class {
|
|
|
351
358
|
/** @extends {TextTrack} */
|
|
352
359
|
shaka.test.FakeTextTrack = class {
|
|
353
360
|
constructor() {
|
|
361
|
+
// The compiler knows TextTrack.cues is const, and we lied and said we
|
|
362
|
+
// "extend" TextTrack, so it won't let us assign to cues here. But we
|
|
363
|
+
// must, because this fake is a from-scratch implementation of the API.
|
|
364
|
+
// This cast-hack works around the issue.
|
|
354
365
|
/** @type {!Array.<TextTrackCue>} */
|
|
355
|
-
|
|
366
|
+
const cues = [];
|
|
367
|
+
(/** @type {?} */(this))['cues'] = cues;
|
|
356
368
|
|
|
357
369
|
/** @type {!jasmine.Spy} */
|
|
358
370
|
this.addCue = jasmine.createSpy('addCue').and.callFake((cue) => {
|
|
359
|
-
|
|
371
|
+
cues.push(cue);
|
|
360
372
|
});
|
|
361
373
|
|
|
362
374
|
/** @type {!jasmine.Spy} */
|
|
363
375
|
this.removeCue = jasmine.createSpy('removeCue').and.callFake((cue) => {
|
|
364
|
-
const idx =
|
|
376
|
+
const idx = cues.indexOf(cue);
|
|
365
377
|
expect(idx).not.toBeLessThan(0);
|
|
366
|
-
|
|
378
|
+
cues.splice(idx, 1);
|
|
367
379
|
});
|
|
368
380
|
}
|
|
369
381
|
};
|
|
@@ -4,20 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.IStreamGenerator');
|
|
8
|
-
goog.provide('shaka.test.Mp4LiveStreamGenerator');
|
|
9
|
-
goog.provide('shaka.test.Mp4VodStreamGenerator');
|
|
10
|
-
goog.provide('shaka.test.StreamGenerator');
|
|
11
|
-
goog.provide('shaka.test.TSVodStreamGenerator');
|
|
12
|
-
|
|
13
|
-
goog.require('goog.asserts');
|
|
14
|
-
goog.require('shaka.log');
|
|
15
|
-
goog.require('shaka.test.Util');
|
|
16
|
-
goog.require('shaka.util.BufferUtils');
|
|
17
|
-
goog.require('shaka.util.DataViewReader');
|
|
18
|
-
goog.require('shaka.util.Uint8ArrayUtils');
|
|
19
|
-
|
|
20
|
-
|
|
21
7
|
/**
|
|
22
8
|
* @summary
|
|
23
9
|
* Defines an interface to generate streams.
|
|
@@ -4,21 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.StreamingEngineUtil');
|
|
8
|
-
|
|
9
|
-
goog.require('goog.asserts');
|
|
10
|
-
goog.require('shaka.media.InitSegmentReference');
|
|
11
|
-
goog.require('shaka.media.SegmentReference');
|
|
12
|
-
goog.require('shaka.test.FakeNetworkingEngine');
|
|
13
|
-
goog.require('shaka.test.FakePresentationTimeline');
|
|
14
|
-
goog.require('shaka.test.FakeSegmentIndex');
|
|
15
|
-
goog.require('shaka.test.Util');
|
|
16
|
-
goog.require('shaka.util.AbortableOperation');
|
|
17
|
-
goog.require('shaka.util.Error');
|
|
18
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
19
|
-
goog.requireType('shaka.media.PresentationTimeline');
|
|
20
|
-
|
|
21
|
-
|
|
22
7
|
shaka.test.StreamingEngineUtil = class {
|
|
23
8
|
/**
|
|
24
9
|
* Creates a FakeNetworkingEngine.
|
|
@@ -4,24 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.TestScheme');
|
|
8
|
-
|
|
9
|
-
goog.require('goog.asserts');
|
|
10
|
-
goog.require('goog.Uri');
|
|
11
|
-
goog.require('shaka.Player');
|
|
12
|
-
goog.require('shaka.media.ManifestParser');
|
|
13
|
-
goog.require('shaka.net.NetworkingEngine');
|
|
14
|
-
goog.require('shaka.test.ManifestGenerator');
|
|
15
|
-
goog.require('shaka.test.Mp4VodStreamGenerator');
|
|
16
|
-
goog.require('shaka.test.TSVodStreamGenerator');
|
|
17
|
-
goog.require('shaka.test.Util');
|
|
18
|
-
goog.require('shaka.util.AbortableOperation');
|
|
19
|
-
goog.require('shaka.util.Error');
|
|
20
|
-
goog.require('shaka.util.ManifestParserUtils');
|
|
21
|
-
goog.requireType('shaka.net.NetworkingEngine.RequestType');
|
|
22
|
-
goog.requireType('shaka.test.IStreamGenerator');
|
|
23
|
-
|
|
24
|
-
|
|
25
7
|
/**
|
|
26
8
|
* @typedef {{
|
|
27
9
|
* initSegmentUri: string,
|
|
@@ -565,7 +547,7 @@ shaka.test.TestScheme.DATA = {
|
|
|
565
547
|
duration: 30,
|
|
566
548
|
},
|
|
567
549
|
|
|
568
|
-
// https://github.com/
|
|
550
|
+
// https://github.com/shaka-project/shaka-player/issues/2553
|
|
569
551
|
'forced_subs_simulation': {
|
|
570
552
|
audio: sintelAudioSegment,
|
|
571
553
|
text: vttSegment,
|
|
@@ -4,15 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.provide('shaka.test.UiUtils');
|
|
9
|
-
|
|
10
|
-
goog.require('shaka.Player');
|
|
11
|
-
goog.require('shaka.test.Waiter');
|
|
12
|
-
goog.require('shaka.ui.Overlay');
|
|
13
|
-
goog.require('shaka.util.EventManager');
|
|
14
|
-
|
|
15
|
-
|
|
16
7
|
shaka.test.UiUtils = class {
|
|
17
8
|
/**
|
|
18
9
|
* @param {!HTMLElement} videoContainer
|
package/test/test/util/util.js
CHANGED
|
@@ -4,19 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.StatusPromise');
|
|
8
|
-
goog.provide('shaka.test.Util');
|
|
9
|
-
|
|
10
|
-
goog.require('goog.asserts');
|
|
11
|
-
goog.require('shaka.media.InitSegmentReference');
|
|
12
|
-
goog.require('shaka.media.SegmentReference');
|
|
13
|
-
goog.require('shaka.util.Functional');
|
|
14
|
-
goog.require('shaka.util.Iterables');
|
|
15
|
-
goog.require('shaka.util.StringUtils');
|
|
16
|
-
goog.require('shaka.util.XmlUtils');
|
|
17
|
-
goog.requireType('shaka.util.Error');
|
|
18
|
-
|
|
19
|
-
|
|
20
7
|
/**
|
|
21
8
|
* @extends {Promise}
|
|
22
9
|
*/
|
|
@@ -52,10 +39,9 @@ shaka.test.Util = class {
|
|
|
52
39
|
*/
|
|
53
40
|
static async fakeEventLoop(duration, onTick) {
|
|
54
41
|
// Run this synchronously:
|
|
55
|
-
for (
|
|
42
|
+
for (let time = 0; time < duration; time++) {
|
|
56
43
|
// We shouldn't need more than 6 rounds.
|
|
57
|
-
for (
|
|
58
|
-
shaka.util.Functional.ignored(_);
|
|
44
|
+
for (let i = 0; i < 6; i++) {
|
|
59
45
|
jasmine.clock().tick(0);
|
|
60
46
|
await Promise.resolve(); // eslint-disable-line no-await-in-loop
|
|
61
47
|
}
|
|
@@ -203,7 +189,7 @@ shaka.test.Util = class {
|
|
|
203
189
|
if (actual.childNodes.length != expected.childNodes.length) {
|
|
204
190
|
return prospectiveDiff + 'Different child node list length.';
|
|
205
191
|
}
|
|
206
|
-
for (
|
|
192
|
+
for (let i = 0; i < actual.childNodes.length; i++) {
|
|
207
193
|
const aNode = actual.childNodes[i];
|
|
208
194
|
const eNode = expected.childNodes[i];
|
|
209
195
|
const diff =
|
|
@@ -334,9 +320,9 @@ shaka.test.Util = class {
|
|
|
334
320
|
// TODO: There should be a way to alter the externs for jasmine.Spy so that
|
|
335
321
|
// this utility is not needed.
|
|
336
322
|
// Why isn't there something like ICallable in Closure?
|
|
337
|
-
// https://github.com/
|
|
323
|
+
// https://github.com/shaka-project/closure-compiler/issues/946
|
|
338
324
|
// Why isn't it enough that jasmine.Spy extends Function?
|
|
339
|
-
// https://github.com/
|
|
325
|
+
// https://github.com/shaka-project/closure-compiler/issues/1422
|
|
340
326
|
return /** @type {Function} */(spy)(...varArgs);
|
|
341
327
|
}
|
|
342
328
|
|
package/test/test/util/waiter.js
CHANGED
|
@@ -4,14 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.provide('shaka.test.Waiter');
|
|
8
|
-
|
|
9
|
-
goog.require('shaka.log');
|
|
10
|
-
goog.require('shaka.media.TimeRangesUtils');
|
|
11
|
-
goog.require('shaka.test.Util');
|
|
12
|
-
goog.require('shaka.util.EventManager');
|
|
13
|
-
|
|
14
|
-
|
|
15
7
|
shaka.test.Waiter = class {
|
|
16
8
|
/** @param {!shaka.util.EventManager} eventManager */
|
|
17
9
|
constructor(eventManager) {
|
|
@@ -23,6 +15,12 @@ shaka.test.Waiter = class {
|
|
|
23
15
|
|
|
24
16
|
/** @private {number} */
|
|
25
17
|
this.timeoutSeconds_ = 5;
|
|
18
|
+
|
|
19
|
+
/** @private {shaka.Player} */
|
|
20
|
+
this.player_ = null;
|
|
21
|
+
|
|
22
|
+
/** @private {shaka.media.MediaSourceEngine} */
|
|
23
|
+
this.mediaSourceEngine_ = null;
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
// TODO: Consider replacing this with a settings argument on the individual
|
|
@@ -51,6 +49,30 @@ shaka.test.Waiter = class {
|
|
|
51
49
|
return this;
|
|
52
50
|
}
|
|
53
51
|
|
|
52
|
+
/**
|
|
53
|
+
* For tests with access to MediaSourceEngine, this can provide better
|
|
54
|
+
* debugging for buffered ranges on failure.
|
|
55
|
+
*
|
|
56
|
+
* @param {shaka.Player} player
|
|
57
|
+
* @return {!shaka.test.Waiter}
|
|
58
|
+
*/
|
|
59
|
+
setPlayer(player) {
|
|
60
|
+
this.player_ = player;
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* For tests with access to MediaSourceEngine, this can provide better
|
|
66
|
+
* debugging for buffered ranges on failure.
|
|
67
|
+
*
|
|
68
|
+
* @param {shaka.media.MediaSourceEngine} mediaSourceEngine
|
|
69
|
+
* @return {!shaka.test.Waiter}
|
|
70
|
+
*/
|
|
71
|
+
setMediaSourceEngine(mediaSourceEngine) {
|
|
72
|
+
this.mediaSourceEngine_ = mediaSourceEngine;
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
|
|
54
76
|
/**
|
|
55
77
|
* Wait for the video playhead to move forward by some meaningful delta. The
|
|
56
78
|
* Promise is resolved when the playhead moves or the video ends.
|
|
@@ -109,7 +131,6 @@ shaka.test.Waiter = class {
|
|
|
109
131
|
return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
|
|
110
132
|
}
|
|
111
133
|
|
|
112
|
-
|
|
113
134
|
/**
|
|
114
135
|
* Wait for the video playhead to reach a certain target time.
|
|
115
136
|
* If the playhead reaches |timeGoal| or the video ends before |timeout|
|
|
@@ -132,40 +153,51 @@ shaka.test.Waiter = class {
|
|
|
132
153
|
* @return {!Promise}
|
|
133
154
|
*/
|
|
134
155
|
waitForEnd(mediaElement) {
|
|
135
|
-
// Sometimes, the ended flag is not set, or the event does not fire,
|
|
136
|
-
// (I'm looking at **you**, Safari), so also check if we've reached the
|
|
137
|
-
// duration.
|
|
138
|
-
if (mediaElement.ended ||
|
|
139
|
-
mediaElement.currentTime >= mediaElement.duration) {
|
|
140
|
-
return Promise.resolve();
|
|
141
|
-
}
|
|
142
|
-
|
|
143
156
|
// The name of what we're waiting for.
|
|
144
157
|
const goalName = 'end of media';
|
|
145
158
|
|
|
159
|
+
// The conditions for success. Don't rely on either time, or the ended
|
|
160
|
+
// flag, or the ended event, specifically. Any of these is sufficient.
|
|
161
|
+
// This flexibility cuts down on test flake on Safari (currently 14) in
|
|
162
|
+
// particular, where the flag might be set, but the ended event did not
|
|
163
|
+
// fire. We also see flake on Firefox (currently 99), where test playbacks
|
|
164
|
+
// sometimes stop right before duration is reached. (Duration 60.01, audio
|
|
165
|
+
// buffered to 60.01, video buffered to exactly 60.)
|
|
166
|
+
const hasEnded = () => {
|
|
167
|
+
return mediaElement.currentTime >= mediaElement.duration - 0.1 ||
|
|
168
|
+
mediaElement.ended;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
if (hasEnded()) {
|
|
172
|
+
return Promise.resolve();
|
|
173
|
+
}
|
|
174
|
+
|
|
146
175
|
// Cleanup on timeout.
|
|
176
|
+
let timer = null;
|
|
147
177
|
const cleanup = () => {
|
|
178
|
+
if (timer) {
|
|
179
|
+
timer.stop();
|
|
180
|
+
}
|
|
148
181
|
this.eventManager_.unlisten(mediaElement, 'timeupdate');
|
|
149
182
|
this.eventManager_.unlisten(mediaElement, 'ended');
|
|
150
183
|
};
|
|
151
184
|
|
|
152
|
-
// The conditions for success. Don't rely on either time, or the ended
|
|
153
|
-
// flag, or the ended event, specifically. Any of these is sufficient.
|
|
154
|
-
// This flexibility cuts down on test flake on Safari (currently 14) in
|
|
155
|
-
// particular, where the flag might be set, but the ended event did not
|
|
156
|
-
// fire.
|
|
157
185
|
const p = new Promise((resolve) => {
|
|
158
|
-
|
|
159
|
-
if (
|
|
160
|
-
mediaElement.ended) {
|
|
186
|
+
const check = () => {
|
|
187
|
+
if (hasEnded()) {
|
|
161
188
|
cleanup();
|
|
162
189
|
resolve();
|
|
163
190
|
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
// In Firefox 99, there appears to be some bug in the browser preventing
|
|
194
|
+
// events from being triggered at the end of the presentation. So we
|
|
195
|
+
// check for the end once per second. Without this, StreamingEngine
|
|
196
|
+
// integration tests were failing.
|
|
197
|
+
timer = new shaka.util.Timer(check);
|
|
198
|
+
timer.tickEvery(/* seconds= */ 1);
|
|
199
|
+
this.eventManager_.listen(mediaElement, 'timeupdate', check);
|
|
200
|
+
this.eventManager_.listen(mediaElement, 'ended', check);
|
|
169
201
|
});
|
|
170
202
|
|
|
171
203
|
return this.waitUntilGeneric_(goalName, p, cleanup, mediaElement);
|
|
@@ -263,7 +295,7 @@ shaka.test.Waiter = class {
|
|
|
263
295
|
|
|
264
296
|
// Improve the error message with media-specific debug info.
|
|
265
297
|
if (target instanceof HTMLMediaElement) {
|
|
266
|
-
this.logDebugInfoForMedia_(error
|
|
298
|
+
this.logDebugInfoForMedia_(error, target);
|
|
267
299
|
}
|
|
268
300
|
|
|
269
301
|
// Reject or resolve based on our settings.
|
|
@@ -276,20 +308,29 @@ shaka.test.Waiter = class {
|
|
|
276
308
|
}
|
|
277
309
|
|
|
278
310
|
/**
|
|
279
|
-
* @param {
|
|
311
|
+
* @param {!Error} error
|
|
280
312
|
* @param {!HTMLMediaElement} mediaElement
|
|
281
313
|
* @private
|
|
282
314
|
*/
|
|
283
|
-
logDebugInfoForMedia_(
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
315
|
+
logDebugInfoForMedia_(error, mediaElement) {
|
|
316
|
+
let buffered;
|
|
317
|
+
if (this.player_) {
|
|
318
|
+
buffered = this.player_.getBufferedInfo();
|
|
319
|
+
} else if (this.mediaSourceEngine_) {
|
|
320
|
+
buffered = this.mediaSourceEngine_.getBufferedInfo();
|
|
321
|
+
} else {
|
|
322
|
+
buffered = shaka.media.TimeRangesUtils.getBufferedInfo(
|
|
323
|
+
mediaElement.buffered);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
error.message += '\n' +
|
|
327
|
+
`current time: ${mediaElement.currentTime}\n` +
|
|
328
|
+
`duration: ${mediaElement.duration}\n` +
|
|
329
|
+
`ready state: ${mediaElement.readyState}\n` +
|
|
330
|
+
`playback rate: ${mediaElement.playbackRate}\n` +
|
|
331
|
+
`paused: ${mediaElement.paused}\n` +
|
|
332
|
+
`ended: ${mediaElement.ended}\n` +
|
|
333
|
+
`buffered: ${JSON.stringify(buffered)}\n`;
|
|
334
|
+
shaka.log.error(error.message);
|
|
294
335
|
}
|
|
295
336
|
};
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.VttTextParser');
|
|
8
|
-
goog.require('shaka.util.BufferUtils');
|
|
9
|
-
goog.require('shaka.util.StringUtils');
|
|
10
|
-
|
|
11
7
|
describe('Cue', () => {
|
|
12
8
|
// This integration test checks platform support for various cue scenarios
|
|
13
9
|
// that have caused platform-specific issues. The unit tests for each parser
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.LrcTextParser');
|
|
8
|
-
goog.require('shaka.util.BufferUtils');
|
|
9
|
-
goog.require('shaka.util.StringUtils');
|
|
10
|
-
|
|
11
7
|
describe('LrcTextParser', () => {
|
|
12
8
|
it('supports no cues', () => {
|
|
13
9
|
verifyHelper([],
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.test.TtmlUtils');
|
|
8
|
-
goog.require('shaka.test.Util');
|
|
9
|
-
goog.require('shaka.text.Mp4TtmlParser');
|
|
10
|
-
goog.require('shaka.util.BufferUtils');
|
|
11
|
-
goog.require('shaka.util.Error');
|
|
12
|
-
|
|
13
7
|
describe('Mp4TtmlParser', () => {
|
|
14
8
|
const ttmlInitSegmentUri = '/base/test/test/assets/ttml-init.mp4';
|
|
15
9
|
const ttmlSegmentUri = '/base/test/test/assets/ttml-segment.mp4';
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.test.Util');
|
|
8
|
-
goog.require('shaka.text.Cue');
|
|
9
|
-
goog.require('shaka.text.Mp4VttParser');
|
|
10
|
-
goog.require('shaka.util.BufferUtils');
|
|
11
|
-
goog.require('shaka.util.Error');
|
|
12
|
-
|
|
13
7
|
describe('Mp4VttParser', () => {
|
|
14
8
|
const vttInitSegmentUri = '/base/test/test/assets/vtt-init.mp4';
|
|
15
9
|
const vttSegmentUri = '/base/test/test/assets/vtt-segment.mp4';
|
|
@@ -133,7 +127,7 @@ describe('Mp4VttParser', () => {
|
|
|
133
127
|
});
|
|
134
128
|
|
|
135
129
|
it('parses media segments without a sample duration', () => {
|
|
136
|
-
// Regression test for https://github.com/
|
|
130
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/919
|
|
137
131
|
const cues = [
|
|
138
132
|
{startTime: 10, endTime: 11, payload: 'cue 10'},
|
|
139
133
|
{startTime: 11, endTime: 12, payload: 'cue 11'},
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.SbvTextParser');
|
|
8
|
-
goog.require('shaka.util.BufferUtils');
|
|
9
|
-
goog.require('shaka.util.StringUtils');
|
|
10
|
-
|
|
11
7
|
describe('SbvTextParser', () => {
|
|
12
8
|
it('supports no cues', () => {
|
|
13
9
|
verifyHelper([],
|