shaka-player 3.3.2 → 3.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.csslintrc +11 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- package/.github/pull_request_template.md +6 -34
- package/.github/workflows/build-and-test.yaml +130 -0
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
- package/.github/workflows/demo-version-index.yaml +29 -0
- package/.github/workflows/nightly-demo.yaml +42 -0
- package/.github/workflows/release-please.yaml +145 -0
- package/.github/workflows/safari-homedir-launcher.sh +18 -0
- package/.github/workflows/selenium-lab-tests.yaml +93 -0
- package/AUTHORS +2 -0
- package/CHANGELOG.md +1691 -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 +1 -1
- package/build/checkversion.py +1 -1
- package/build/conformance.textproto +13 -0
- package/build/docker/Dockerfile +20 -0
- package/build/docker/docker-compose.yml +10 -0
- package/build/gendeps.py +18 -15
- package/build/shaka-lab.yaml +163 -0
- package/build/shakaBuildHelpers.py +4 -29
- package/build/test.py +87 -28
- package/build/types/polyfill +1 -0
- package/build/wrapper.template.js +2 -2
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/asset_card.js +1 -2
- package/demo/cast_receiver/index.html +1 -1
- package/demo/cast_receiver/receiver_app.css +14 -14
- package/demo/common/assets.js +2 -0
- package/demo/config.js +0 -1
- package/demo/custom.js +0 -1
- package/demo/customWarning.txt +2 -2
- package/demo/demo.less +29 -18
- package/demo/demo_uncompiled.js +1 -13
- package/demo/index.html +1 -1
- package/demo/main.js +3 -3
- package/dist/controls.css +3 -3
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +191 -194
- package/dist/demo.compiled.debug.map +4 -4
- package/dist/demo.compiled.js +191 -194
- package/dist/demo.compiled.map +4 -4
- package/dist/demo.css +1 -1
- package/dist/demo.css.map +1 -1
- package/dist/deps.js +233 -226
- package/dist/locales.js +31 -31
- 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 +246 -236
- package/dist/shaka-player.compiled.debug.d.ts +246 -236
- package/dist/shaka-player.compiled.debug.externs.js +14 -3
- package/dist/shaka-player.compiled.debug.js +214 -222
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +14 -3
- package/dist/shaka-player.compiled.js +845 -851
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +290 -280
- package/dist/shaka-player.ui.debug.d.ts +290 -280
- package/dist/shaka-player.ui.debug.externs.js +14 -3
- package/dist/shaka-player.ui.debug.js +295 -303
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +14 -3
- package/dist/shaka-player.ui.js +1000 -1006
- 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 +137 -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 +9 -11
- package/lib/dash/mpd_utils.js +4 -5
- package/lib/dash/segment_list.js +1 -2
- package/lib/dash/segment_template.js +3 -3
- package/lib/hls/hls_parser.js +11 -9
- package/lib/hls/manifest_text_parser.js +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 +3 -2
- package/lib/media/mp4_segment_index_parser.js +1 -4
- package/lib/media/playhead.js +2 -2
- package/lib/media/presentation_timeline.js +18 -8
- package/lib/media/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/storage.js +4 -4
- package/lib/player.js +34 -16
- package/lib/polyfill/all.js +2 -3
- package/lib/polyfill/encryption_scheme.js +1 -1
- package/lib/polyfill/media_capabilities.js +3 -3
- package/lib/polyfill/mediasource.js +1 -1
- package/lib/polyfill/symbol.js +46 -0
- package/lib/text/cue.js +1 -1
- package/lib/text/simple_text_displayer.js +2 -1
- package/lib/text/ttml_text_parser.js +8 -5
- package/lib/text/ui_text_displayer.js +1 -1
- package/lib/util/buffer_utils.js +1 -3
- package/lib/util/ebml_parser.js +3 -3
- package/lib/util/error.js +1 -1
- package/lib/util/iterables.js +0 -46
- package/lib/util/mp4_box_parsers.js +1 -4
- package/lib/util/mp4_parser.js +5 -7
- package/lib/util/periods.js +10 -11
- package/lib/util/platform.js +3 -3
- package/lib/util/pssh.js +1 -4
- package/lib/util/stream_utils.js +4 -3
- package/lib/util/string_utils.js +3 -5
- package/lib/util/uint8array_utils.js +3 -5
- package/lib/util/xml_utils.js +15 -7
- package/package.json +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 +0 -13
- package/test/cea/cea608_memory_unit.js +0 -5
- package/test/cea/cea708_service_unit.js +0 -7
- package/test/cea/cea708_window_unit.js +0 -5
- package/test/cea/cea_decoder_unit.js +0 -6
- package/test/cea/dtvcc_packet_builder_unit.js +0 -3
- package/test/cea/dtvcc_packet_unit.js +0 -5
- package/test/cea/mp4_cea_parser_unit.js +0 -4
- package/test/dash/dash_parser_content_protection_unit.js +1 -10
- package/test/dash/dash_parser_live_unit.js +2 -15
- package/test/dash/dash_parser_manifest_unit.js +2 -16
- package/test/dash/dash_parser_segment_base_unit.js +1 -8
- package/test/dash/dash_parser_segment_list_unit.js +1 -7
- package/test/dash/dash_parser_segment_template_unit.js +0 -9
- package/test/dash/mpd_utils_unit.js +3 -11
- package/test/demo/demo_unit.js +0 -5
- package/test/deprecate/enforcer_unit.js +0 -4
- package/test/deprecate/version_unit.js +0 -2
- package/test/hls/hls_live_unit.js +2 -14
- package/test/hls/hls_parser_unit.js +2 -15
- package/test/hls/manifest_text_parser_unit.js +0 -10
- package/test/media/adaptation_set_criteria_unit.js +3 -7
- package/test/media/adaptation_set_unit.js +0 -2
- package/test/media/buffering_observer_unit.js +1 -4
- package/test/media/closed_caption_parser_unit.js +0 -3
- package/test/media/drm_engine_integration.js +2 -15
- package/test/media/drm_engine_unit.js +4 -24
- package/test/media/manifest_parser_unit.js +0 -4
- package/test/media/media_source_engine_integration.js +0 -7
- package/test/media/media_source_engine_unit.js +1 -14
- package/test/media/mp4_segment_index_parser_unit.js +0 -4
- package/test/media/play_rate_controller_unit.js +0 -4
- package/test/media/playhead_unit.js +8 -16
- package/test/media/presentation_timeline_unit.js +4 -7
- package/test/media/quality_observer_unit.js +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 +9 -36
- package/test/media/streaming_engine_unit.js +11 -35
- package/test/media/time_ranges_utils_unit.js +0 -2
- package/test/media/transmuxer_integration.js +0 -6
- package/test/media/webm_segment_index_parser_unit.js +0 -4
- package/test/net/data_uri_plugin_unit.js +0 -7
- package/test/net/http_plugin_unit.js +0 -9
- package/test/net/networking_engine_unit.js +0 -11
- package/test/offline/download_progress_estimator_unit.js +0 -2
- package/test/offline/indexeddb_storage_unit.js +0 -6
- package/test/offline/manifest_convert_unit.js +0 -8
- package/test/offline/offline_integration.js +1 -10
- package/test/offline/offline_manifest_parser_unit.js +0 -6
- package/test/offline/offline_scheme_unit.js +0 -8
- package/test/offline/offline_uri_unit.js +0 -2
- package/test/offline/storage_compatibility_unit.js +1 -14
- package/test/offline/storage_integration.js +1 -27
- package/test/player_external.js +2 -10
- package/test/player_integration.js +22 -28
- package/test/player_load_graph_integration.js +1 -6
- package/test/player_src_equals_external.js +3 -9
- package/test/player_src_equals_integration.js +0 -7
- package/test/player_unit.js +52 -37
- package/test/routing/walker_unit.js +0 -8
- package/test/test/assets/large_file.mpd +1 -1
- package/test/test/boot.js +75 -22
- package/test/test/externs/jasmine.js +2 -2
- package/test/test/externs/karma.js +4 -0
- package/test/test/namespace.js +10 -0
- package/test/test/util/canned_idb.js +0 -8
- package/test/test/util/cea_utils.js +0 -6
- package/test/test/util/dash_parser_util.js +0 -13
- package/test/test/util/fake_ad.js +0 -3
- package/test/test/util/fake_ad_manager.js +0 -9
- package/test/test/util/fake_demo_main.js +0 -5
- package/test/test/util/fake_drm_engine.js +0 -6
- package/test/test/util/fake_media_source_engine.js +0 -7
- package/test/test/util/fake_networking_engine.js +0 -5
- package/test/test/util/fake_text_displayer.js +0 -5
- package/test/test/util/indexeddb_utils.js +1 -10
- package/test/test/util/jasmine_fetch.js +0 -1
- package/test/test/util/loader.js +0 -18
- package/test/test/util/manifest_generator.js +9 -14
- package/test/test/util/manifest_parser_util.js +0 -6
- package/test/test/util/offline_utils.js +0 -5
- package/test/test/util/simple_fakes.js +9 -26
- package/test/test/util/stream_generator.js +0 -14
- package/test/test/util/streaming_engine_util.js +0 -15
- package/test/test/util/test_scheme.js +1 -19
- package/test/test/util/ttml_utils.js +0 -2
- package/test/test/util/ui_utils.js +0 -9
- package/test/test/util/util.js +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/mp4_box_parsers_unit.js +0 -5
- package/test/util/mp4_parser_unit.js +0 -4
- package/test/util/multi_map_unit.js +0 -3
- package/test/util/object_utils_unit.js +0 -2
- package/test/util/periods_unit.js +14 -7
- package/test/util/pssh_unit.js +0 -5
- package/test/util/state_history_unit.js +0 -2
- package/test/util/stream_utils_unit.js +3 -8
- package/test/util/string_utils_unit.js +0 -6
- package/test/util/text_parser_unit.js +0 -2
- package/test/util/xml_utils_unit.js +0 -4
- package/ui/less/ad_controls.less +4 -4
- package/ui/less/buttons.less +5 -5
- package/ui/less/containers.less +9 -11
- package/ui/less/overflow_menu.less +4 -4
- package/ui/less/range_elements.less +5 -0
- package/ui/less/tooltip.less +1 -1
- package/ui/locales/sjn-translations.yaml +257 -0
- package/ui/locales/sjn.json +42 -0
- package/.github/workflows/build_and_test.yaml +0 -73
- package/.github/workflows/release.yaml +0 -53
- package/externs/svgelement.js +0 -18
- package/externs/webcrypto.js +0 -18
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([],
|
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
goog.require('shaka.test.FakeVideo');
|
|
9
|
-
goog.require('shaka.text.Cue');
|
|
10
|
-
goog.require('shaka.text.SimpleTextDisplayer');
|
|
11
|
-
goog.require('shaka.util.Functional');
|
|
12
|
-
goog.requireType('shaka.test.FakeTextTrack');
|
|
13
|
-
|
|
14
7
|
describe('SimpleTextDisplayer', () => {
|
|
15
8
|
const originalVTTCue = window.VTTCue;
|
|
16
9
|
const Cue = shaka.text.Cue;
|
|
@@ -74,7 +67,7 @@ describe('SimpleTextDisplayer', () => {
|
|
|
74
67
|
});
|
|
75
68
|
|
|
76
69
|
it('appends equal time cues in reverse order', () => {
|
|
77
|
-
// Regression test for https://github.com/
|
|
70
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/848
|
|
78
71
|
|
|
79
72
|
// When VTTCue is seen as the real thing (because of the presence of
|
|
80
73
|
// VTTCue.prototype.line), then the reverse-order behavior comes into
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.SrtTextParser');
|
|
8
|
-
goog.require('shaka.util.BufferUtils');
|
|
9
|
-
goog.require('shaka.util.StringUtils');
|
|
10
|
-
|
|
11
7
|
describe('SrtTextParser', () => {
|
|
12
8
|
it('supports no cues', () => {
|
|
13
9
|
verifyHelper([],
|
|
@@ -4,11 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.text.Cue');
|
|
8
|
-
goog.require('shaka.text.SsaTextParser');
|
|
9
|
-
goog.require('shaka.util.BufferUtils');
|
|
10
|
-
goog.require('shaka.util.StringUtils');
|
|
11
|
-
|
|
12
7
|
describe('SsaTextParser', () => {
|
|
13
8
|
const Cue = shaka.text.Cue;
|
|
14
9
|
|
|
@@ -4,11 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.test.FakeTextDisplayer');
|
|
8
|
-
goog.require('shaka.text.Cue');
|
|
9
|
-
goog.require('shaka.text.TextEngine');
|
|
10
|
-
goog.require('shaka.util.MimeUtils');
|
|
11
|
-
|
|
12
7
|
describe('TextEngine', () => {
|
|
13
8
|
const TextEngine = shaka.text.TextEngine;
|
|
14
9
|
|
|
@@ -336,7 +331,7 @@ describe('TextEngine', () => {
|
|
|
336
331
|
it('does not use timestamp offset', async () => {
|
|
337
332
|
// The start and end times passed to appendBuffer are now absolute, so
|
|
338
333
|
// they already account for timestampOffset and period offset.
|
|
339
|
-
// See https://github.com/
|
|
334
|
+
// See https://github.com/shaka-project/shaka-player/issues/1562
|
|
340
335
|
textEngine.setTimestampOffset(60);
|
|
341
336
|
await textEngine.appendBuffer(dummyData, 0, 3);
|
|
342
337
|
expect(textEngine.bufferStart()).toBe(0);
|
|
@@ -379,7 +374,7 @@ describe('TextEngine', () => {
|
|
|
379
374
|
it('does not use timestamp offset', async () => {
|
|
380
375
|
// The start and end times passed to appendBuffer are now absolute, so
|
|
381
376
|
// they already account for timestampOffset and period offset.
|
|
382
|
-
// See https://github.com/
|
|
377
|
+
// See https://github.com/shaka-project/shaka-player/issues/1562
|
|
383
378
|
textEngine.setTimestampOffset(60);
|
|
384
379
|
await textEngine.appendBuffer(dummyData, 3, 6);
|
|
385
380
|
expect(textEngine.bufferedAheadOf(4)).toBe(2);
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.test.UiUtils');
|
|
8
|
-
|
|
9
7
|
// This tests three assumptions we make about text tracks in Shaka Player:
|
|
10
8
|
// 1. If a non-null value for cues is stored, it will always be the
|
|
11
9
|
// non-null value for cues when cues returns a non-null value.
|
|
@@ -4,15 +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.Cue');
|
|
10
|
-
goog.require('shaka.text.CueRegion');
|
|
11
|
-
goog.require('shaka.text.TtmlTextParser');
|
|
12
|
-
goog.require('shaka.util.BufferUtils');
|
|
13
|
-
goog.require('shaka.util.Error');
|
|
14
|
-
goog.require('shaka.util.StringUtils');
|
|
15
|
-
|
|
16
7
|
describe('TtmlTextParser', () => {
|
|
17
8
|
const Cue = shaka.text.Cue;
|
|
18
9
|
const CueRegion = shaka.text.CueRegion;
|
|
@@ -1718,7 +1709,7 @@ describe('TtmlTextParser', () => {
|
|
|
1718
1709
|
{startTime: 1, endTime: 4});
|
|
1719
1710
|
});
|
|
1720
1711
|
|
|
1721
|
-
// Regression test for https://github.com/
|
|
1712
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/2478
|
|
1722
1713
|
it('supports nested cues with only non-ASCII characters', () => {
|
|
1723
1714
|
verifyHelper(
|
|
1724
1715
|
[
|
|
@@ -1920,7 +1911,7 @@ describe('TtmlTextParser', () => {
|
|
|
1920
1911
|
);
|
|
1921
1912
|
});
|
|
1922
1913
|
|
|
1923
|
-
// Regression test for https://github.com/
|
|
1914
|
+
// Regression test for https://github.com/shaka-project/shaka-player/issues/3743
|
|
1924
1915
|
it('inherits styles from other styles on nestedCues', () => {
|
|
1925
1916
|
verifyHelper(
|
|
1926
1917
|
[
|
|
@@ -4,10 +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.UITextDisplayer');
|
|
10
|
-
|
|
11
7
|
describe('UITextDisplayer', () => {
|
|
12
8
|
/** @type {!HTMLElement} */
|
|
13
9
|
let videoContainer;
|
|
@@ -65,7 +61,18 @@ describe('UITextDisplayer', () => {
|
|
|
65
61
|
document.body.removeChild(videoContainer);
|
|
66
62
|
});
|
|
67
63
|
|
|
68
|
-
|
|
64
|
+
/**
|
|
65
|
+
* @suppress {visibility}
|
|
66
|
+
* "suppress visibility" has function scope, so this is a mini-function that
|
|
67
|
+
* exists solely to suppress visibility rules for these actions.
|
|
68
|
+
*/
|
|
69
|
+
function updateCaptions() {
|
|
70
|
+
// Rather than wait for a timer, which can be unreliable on Safari when the
|
|
71
|
+
// device is heavily loaded, trigger the update explicitly.
|
|
72
|
+
textDisplayer.updateCaptions_();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
it('correctly displays styles for cues', () => {
|
|
69
76
|
/** @type {!shaka.text.Cue} */
|
|
70
77
|
const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
|
|
71
78
|
cue.color = 'green';
|
|
@@ -81,8 +88,7 @@ describe('UITextDisplayer', () => {
|
|
|
81
88
|
|
|
82
89
|
textDisplayer.setTextVisibility(true);
|
|
83
90
|
textDisplayer.append([cue]);
|
|
84
|
-
|
|
85
|
-
await shaka.test.Util.delay(0.5);
|
|
91
|
+
updateCaptions();
|
|
86
92
|
|
|
87
93
|
const textContainer = videoContainer.querySelector('.shaka-text-container');
|
|
88
94
|
const captions = textContainer.querySelector('div');
|
|
@@ -114,7 +120,7 @@ describe('UITextDisplayer', () => {
|
|
|
114
120
|
.toEqual(jasmine.objectContaining({'background-color': 'black'}));
|
|
115
121
|
});
|
|
116
122
|
|
|
117
|
-
it('correctly displays styles for nested cues',
|
|
123
|
+
it('correctly displays styles for nested cues', () => {
|
|
118
124
|
/** @type {!shaka.text.Cue} */
|
|
119
125
|
const cue = new shaka.text.Cue(0, 100, '');
|
|
120
126
|
const nestedCue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
|
|
@@ -131,8 +137,7 @@ describe('UITextDisplayer', () => {
|
|
|
131
137
|
|
|
132
138
|
textDisplayer.setTextVisibility(true);
|
|
133
139
|
textDisplayer.append([cue]);
|
|
134
|
-
|
|
135
|
-
await shaka.test.Util.delay(0.5);
|
|
140
|
+
updateCaptions();
|
|
136
141
|
|
|
137
142
|
// Verify styles applied to the nested cues.
|
|
138
143
|
const textContainer = videoContainer.querySelector('.shaka-text-container');
|
|
@@ -165,7 +170,7 @@ describe('UITextDisplayer', () => {
|
|
|
165
170
|
.toEqual(jasmine.objectContaining({'background-color': 'black'}));
|
|
166
171
|
});
|
|
167
172
|
|
|
168
|
-
it('correctly displays styles for cellResolution units',
|
|
173
|
+
it('correctly displays styles for cellResolution units', () => {
|
|
169
174
|
/** @type {!shaka.text.Cue} */
|
|
170
175
|
const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
|
|
171
176
|
cue.fontSize = '0.80c';
|
|
@@ -177,8 +182,7 @@ describe('UITextDisplayer', () => {
|
|
|
177
182
|
|
|
178
183
|
textDisplayer.setTextVisibility(true);
|
|
179
184
|
textDisplayer.append([cue]);
|
|
180
|
-
|
|
181
|
-
await shaka.test.Util.delay(0.5);
|
|
185
|
+
updateCaptions();
|
|
182
186
|
|
|
183
187
|
// Expected value is calculated based on ttp:cellResolution="60 20"
|
|
184
188
|
// videoContainerHeight=450px and tts:fontSize="0.80c" on the default style.
|
|
@@ -200,7 +204,7 @@ describe('UITextDisplayer', () => {
|
|
|
200
204
|
}));
|
|
201
205
|
});
|
|
202
206
|
|
|
203
|
-
it('correctly displays styles for percentages units',
|
|
207
|
+
it('correctly displays styles for percentages units', () => {
|
|
204
208
|
/** @type {!shaka.text.Cue} */
|
|
205
209
|
const cue = new shaka.text.Cue(0, 100, 'Captain\'s log.');
|
|
206
210
|
cue.fontSize = '90%';
|
|
@@ -211,8 +215,7 @@ describe('UITextDisplayer', () => {
|
|
|
211
215
|
|
|
212
216
|
textDisplayer.setTextVisibility(true);
|
|
213
217
|
textDisplayer.append([cue]);
|
|
214
|
-
|
|
215
|
-
await shaka.test.Util.delay(0.5);
|
|
218
|
+
updateCaptions();
|
|
216
219
|
|
|
217
220
|
// Expected value is calculated based on ttp:cellResolution="32 15"
|
|
218
221
|
// videoContainerHeight=450px and tts:fontSize="90%" on the default style.
|
|
@@ -225,15 +228,15 @@ describe('UITextDisplayer', () => {
|
|
|
225
228
|
jasmine.objectContaining({'font-size': expectedFontSize}));
|
|
226
229
|
});
|
|
227
230
|
|
|
228
|
-
it('does not display duplicate cues',
|
|
231
|
+
it('does not display duplicate cues', () => {
|
|
229
232
|
// These are identical.
|
|
230
233
|
const cue1 = new shaka.text.Cue(0, 100, 'Captain\'s log.');
|
|
231
234
|
const cue2 = new shaka.text.Cue(0, 100, 'Captain\'s log.');
|
|
232
235
|
|
|
233
236
|
textDisplayer.setTextVisibility(true);
|
|
234
237
|
textDisplayer.append([cue1]);
|
|
235
|
-
|
|
236
|
-
|
|
238
|
+
updateCaptions();
|
|
239
|
+
|
|
237
240
|
/** @type {Element} */
|
|
238
241
|
const textContainer = videoContainer.querySelector('.shaka-text-container');
|
|
239
242
|
let captions = textContainer.querySelectorAll('div');
|
|
@@ -241,14 +244,14 @@ describe('UITextDisplayer', () => {
|
|
|
241
244
|
expect(captions.length).toBe(1);
|
|
242
245
|
|
|
243
246
|
textDisplayer.append([cue2]);
|
|
244
|
-
|
|
245
|
-
|
|
247
|
+
updateCaptions();
|
|
248
|
+
|
|
246
249
|
captions = textContainer.querySelectorAll('div');
|
|
247
250
|
// Expect textContainer to display one cue without duplication.
|
|
248
251
|
expect(captions.length).toBe(1);
|
|
249
252
|
});
|
|
250
253
|
|
|
251
|
-
it('does not mistake cues with nested cues as duplicates',
|
|
254
|
+
it('does not mistake cues with nested cues as duplicates', () => {
|
|
252
255
|
// These are not identical, but might look like it at the top level.
|
|
253
256
|
const cue1 = new shaka.text.Cue(0, 100, '');
|
|
254
257
|
cue1.nestedCues = [
|
|
@@ -265,8 +268,8 @@ describe('UITextDisplayer', () => {
|
|
|
265
268
|
|
|
266
269
|
textDisplayer.setTextVisibility(true);
|
|
267
270
|
textDisplayer.append([cue1]);
|
|
268
|
-
|
|
269
|
-
|
|
271
|
+
updateCaptions();
|
|
272
|
+
|
|
270
273
|
/** @type {Element} */
|
|
271
274
|
const textContainer = videoContainer.querySelector('.shaka-text-container');
|
|
272
275
|
let captions = textContainer.querySelectorAll('div');
|
|
@@ -274,15 +277,15 @@ describe('UITextDisplayer', () => {
|
|
|
274
277
|
expect(captions.length).toBe(1);
|
|
275
278
|
|
|
276
279
|
textDisplayer.append([cue2, cue3]);
|
|
277
|
-
|
|
278
|
-
|
|
280
|
+
updateCaptions();
|
|
281
|
+
|
|
279
282
|
captions = textContainer.querySelectorAll('div');
|
|
280
283
|
// Expect textContainer to display all three cues, since they are not truly
|
|
281
284
|
// duplicates.
|
|
282
285
|
expect(captions.length).toBe(3);
|
|
283
286
|
});
|
|
284
287
|
|
|
285
|
-
it('does not mistake cues with different styles duplicates',
|
|
288
|
+
it('does not mistake cues with different styles duplicates', () => {
|
|
286
289
|
// These all have the same text and timing, but different styles.
|
|
287
290
|
const cue1 = new shaka.text.Cue(0, 100, 'Hello!');
|
|
288
291
|
cue1.color = 'green';
|
|
@@ -296,8 +299,8 @@ describe('UITextDisplayer', () => {
|
|
|
296
299
|
|
|
297
300
|
textDisplayer.setTextVisibility(true);
|
|
298
301
|
textDisplayer.append([cue1]);
|
|
299
|
-
|
|
300
|
-
|
|
302
|
+
updateCaptions();
|
|
303
|
+
|
|
301
304
|
/** @type {Element} */
|
|
302
305
|
const textContainer = videoContainer.querySelector('.shaka-text-container');
|
|
303
306
|
let captions = textContainer.querySelectorAll('div');
|
|
@@ -305,20 +308,20 @@ describe('UITextDisplayer', () => {
|
|
|
305
308
|
expect(captions.length).toBe(1);
|
|
306
309
|
|
|
307
310
|
textDisplayer.append([cue2, cue3]);
|
|
308
|
-
|
|
309
|
-
|
|
311
|
+
updateCaptions();
|
|
312
|
+
|
|
310
313
|
captions = textContainer.querySelectorAll('div');
|
|
311
314
|
// Expect textContainer to display all three cues, since they are not truly
|
|
312
315
|
// duplicates.
|
|
313
316
|
expect(captions.length).toBe(3);
|
|
314
317
|
});
|
|
315
318
|
|
|
316
|
-
it('hides currently displayed cue when removed',
|
|
319
|
+
it('hides currently displayed cue when removed', () => {
|
|
317
320
|
const cue = new shaka.text.Cue(0, 50, 'One');
|
|
318
321
|
textDisplayer.setTextVisibility(true);
|
|
319
322
|
textDisplayer.append([cue]);
|
|
320
323
|
video.currentTime = 10;
|
|
321
|
-
|
|
324
|
+
updateCaptions();
|
|
322
325
|
const textContainer = videoContainer.querySelector('.shaka-text-container');
|
|
323
326
|
|
|
324
327
|
let cueElements = textContainer.querySelectorAll('div');
|
|
@@ -331,7 +334,7 @@ describe('UITextDisplayer', () => {
|
|
|
331
334
|
expect(cueElements.length).toBe(0);
|
|
332
335
|
});
|
|
333
336
|
|
|
334
|
-
it('hides and shows nested cues at appropriate times',
|
|
337
|
+
it('hides and shows nested cues at appropriate times', () => {
|
|
335
338
|
const parentCue1 = new shaka.text.Cue(0, 100, '');
|
|
336
339
|
const cue1 = new shaka.text.Cue(0, 50, 'One');
|
|
337
340
|
parentCue1.nestedCues.push(cue1);
|
|
@@ -348,7 +351,7 @@ describe('UITextDisplayer', () => {
|
|
|
348
351
|
textDisplayer.append([parentCue1, parentCue2]);
|
|
349
352
|
|
|
350
353
|
video.currentTime = 10;
|
|
351
|
-
|
|
354
|
+
updateCaptions();
|
|
352
355
|
/** @type {Element} */
|
|
353
356
|
const textContainer = videoContainer.querySelector('.shaka-text-container');
|
|
354
357
|
let parentCueElements = textContainer.querySelectorAll('div');
|
|
@@ -357,38 +360,38 @@ describe('UITextDisplayer', () => {
|
|
|
357
360
|
expect(parentCueElements[0].textContent).toBe('One');
|
|
358
361
|
|
|
359
362
|
video.currentTime = 35;
|
|
360
|
-
|
|
363
|
+
updateCaptions();
|
|
361
364
|
parentCueElements = textContainer.querySelectorAll('div');
|
|
362
365
|
expect(parentCueElements.length).toBe(1);
|
|
363
366
|
expect(parentCueElements[0].textContent).toBe('OneTwo');
|
|
364
367
|
|
|
365
368
|
video.currentTime = 60;
|
|
366
|
-
|
|
369
|
+
updateCaptions();
|
|
367
370
|
parentCueElements = textContainer.querySelectorAll('div');
|
|
368
371
|
expect(parentCueElements.length).toBe(1);
|
|
369
372
|
expect(parentCueElements[0].textContent).toBe('TwoThree');
|
|
370
373
|
|
|
371
374
|
video.currentTime = 85;
|
|
372
|
-
|
|
375
|
+
updateCaptions();
|
|
373
376
|
parentCueElements = textContainer.querySelectorAll('div');
|
|
374
377
|
expect(parentCueElements.length).toBe(1);
|
|
375
378
|
expect(parentCueElements[0].textContent).toBe('Three');
|
|
376
379
|
|
|
377
380
|
video.currentTime = 95;
|
|
378
|
-
|
|
381
|
+
updateCaptions();
|
|
379
382
|
parentCueElements = textContainer.querySelectorAll('div');
|
|
380
383
|
expect(parentCueElements.length).toBe(2);
|
|
381
384
|
expect(parentCueElements[0].textContent).toBe('Three');
|
|
382
385
|
expect(parentCueElements[1].textContent).toBe('Four');
|
|
383
386
|
|
|
384
387
|
video.currentTime = 105;
|
|
385
|
-
|
|
388
|
+
updateCaptions();
|
|
386
389
|
parentCueElements = textContainer.querySelectorAll('div');
|
|
387
390
|
expect(parentCueElements.length).toBe(1);
|
|
388
391
|
expect(parentCueElements[0].textContent).toBe('Four');
|
|
389
392
|
|
|
390
393
|
video.currentTime = 150;
|
|
391
|
-
|
|
394
|
+
updateCaptions();
|
|
392
395
|
parentCueElements = textContainer.querySelectorAll('div');
|
|
393
396
|
expect(parentCueElements.length).toBe(1);
|
|
394
397
|
expect(parentCueElements[0].textContent).toBe('');
|
|
@@ -4,15 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
goog.require('shaka.log');
|
|
8
|
-
goog.require('shaka.test.Util');
|
|
9
|
-
goog.require('shaka.text.Cue');
|
|
10
|
-
goog.require('shaka.text.CueRegion');
|
|
11
|
-
goog.require('shaka.text.VttTextParser');
|
|
12
|
-
goog.require('shaka.util.BufferUtils');
|
|
13
|
-
goog.require('shaka.util.Error');
|
|
14
|
-
goog.require('shaka.util.StringUtils');
|
|
15
|
-
|
|
16
7
|
describe('VttTextParser', () => {
|
|
17
8
|
const Cue = shaka.text.Cue;
|
|
18
9
|
const CueRegion = shaka.text.CueRegion;
|