shaka-player 3.1.6 → 3.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/.csslintrc +11 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  3. package/.github/workflows/build-and-test.yaml +130 -0
  4. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
  5. package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
  6. package/.github/workflows/demo-version-index.yaml +29 -0
  7. package/.github/workflows/nightly-demo.yaml +42 -0
  8. package/.github/workflows/release-please.yaml +145 -0
  9. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  10. package/.github/workflows/selenium-lab-tests.yaml +93 -0
  11. package/AUTHORS +2 -0
  12. package/CHANGELOG.md +1516 -1501
  13. package/CONTRIBUTING.md +2 -2
  14. package/CONTRIBUTORS +2 -0
  15. package/README.md +7 -7
  16. package/app-engine/README.md +9 -0
  17. package/app-engine/demo-version-index/README.md +14 -0
  18. package/app-engine/demo-version-index/app.yaml +2 -0
  19. package/app-engine/demo-version-index/main.py +162 -0
  20. package/app-engine/demo-version-index/requirements.txt +6 -0
  21. package/app-engine/demo-version-index/templates/index.html +114 -0
  22. package/app-engine/shaka-player-demo/README.md +18 -0
  23. package/app-engine/shaka-player-demo/app.yaml +61 -0
  24. package/app-engine/shaka-player-demo/main.py +95 -0
  25. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  26. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  27. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  28. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  29. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  30. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  31. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  32. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  33. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  34. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  35. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  36. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  37. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  38. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  39. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  40. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  41. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  42. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  43. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  44. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  45. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  46. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  47. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  48. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  49. package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
  50. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  51. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  52. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  53. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  54. package/app-engine/shaka-player-demo/posters.py +110 -0
  55. package/app-engine/shaka-player-demo/requirements.txt +5 -0
  56. package/app-engine/shaka-player-demo/time.txt +1 -0
  57. package/build/README.md +1 -1
  58. package/build/conformance.textproto +13 -0
  59. package/build/docker/Dockerfile +20 -0
  60. package/build/docker/docker-compose.yml +10 -0
  61. package/build/gendeps.py +18 -15
  62. package/build/shaka-lab.yaml +163 -0
  63. package/build/shakaBuildHelpers.py +4 -29
  64. package/build/test.py +87 -28
  65. package/build/wrapper.template.js +2 -2
  66. package/demo/TengwarTelcontar.woff2 +0 -0
  67. package/demo/asset_card.js +1 -2
  68. package/demo/cast_receiver/index.html +1 -1
  69. package/demo/cast_receiver/receiver_app.css +14 -14
  70. package/demo/common/assets.js +2 -0
  71. package/demo/config.js +0 -1
  72. package/demo/custom.js +0 -1
  73. package/demo/customWarning.txt +2 -2
  74. package/demo/demo.less +29 -18
  75. package/demo/demo_uncompiled.js +1 -13
  76. package/demo/index.html +1 -1
  77. package/demo/main.js +3 -3
  78. package/dist/controls.css +2 -2
  79. package/dist/controls.css.map +1 -1
  80. package/dist/demo.compiled.debug.js +191 -194
  81. package/dist/demo.compiled.debug.map +4 -4
  82. package/dist/demo.compiled.js +191 -194
  83. package/dist/demo.compiled.map +4 -4
  84. package/dist/demo.css +1 -1
  85. package/dist/demo.css.map +1 -1
  86. package/dist/deps.js +224 -218
  87. package/dist/locales.js +30 -30
  88. package/dist/receiver.compiled.debug.js +43 -45
  89. package/dist/receiver.compiled.debug.map +4 -4
  90. package/dist/receiver.compiled.js +43 -45
  91. package/dist/receiver.compiled.map +4 -4
  92. package/dist/shaka-player.compiled.d.ts +221 -221
  93. package/dist/shaka-player.compiled.debug.d.ts +221 -221
  94. package/dist/shaka-player.compiled.debug.externs.js +4 -3
  95. package/dist/shaka-player.compiled.debug.js +313 -321
  96. package/dist/shaka-player.compiled.debug.map +4 -4
  97. package/dist/shaka-player.compiled.externs.js +4 -3
  98. package/dist/shaka-player.compiled.js +811 -816
  99. package/dist/shaka-player.compiled.map +4 -4
  100. package/dist/shaka-player.ui.d.ts +263 -263
  101. package/dist/shaka-player.ui.debug.d.ts +263 -263
  102. package/dist/shaka-player.ui.debug.externs.js +4 -3
  103. package/dist/shaka-player.ui.debug.js +210 -218
  104. package/dist/shaka-player.ui.debug.map +4 -4
  105. package/dist/shaka-player.ui.externs.js +4 -3
  106. package/dist/shaka-player.ui.js +940 -945
  107. package/dist/shaka-player.ui.map +4 -4
  108. package/docs/design/REDESIGN.md +33 -33
  109. package/docs/design/codec_preferences.md +1 -1
  110. package/docs/design/dash-audio-channels.md +3 -3
  111. package/docs/design/dash-manifests.md +1 -1
  112. package/docs/design/gap-jumping.md +3 -3
  113. package/docs/design/preload.md +2 -2
  114. package/docs/tutorials/faq.md +8 -8
  115. package/docs/tutorials/index.json +1 -0
  116. package/docs/tutorials/plugins.md +3 -3
  117. package/docs/tutorials/selenium-grid-config.md +122 -0
  118. package/docs/tutorials/welcome.md +10 -2
  119. package/karma.conf.js +137 -30
  120. package/lib/abr/simple_abr_manager.js +12 -6
  121. package/lib/cast/cast_proxy.js +3 -4
  122. package/lib/cea/cea608_data_channel.js +3 -3
  123. package/lib/cea/cea608_memory.js +1 -1
  124. package/lib/cea/cea708_service.js +6 -5
  125. package/lib/cea/cea_decoder.js +1 -1
  126. package/lib/cea/i_caption_decoder.js +2 -3
  127. package/lib/cea/mp4_cea_parser.js +11 -5
  128. package/lib/cea/sei_processor.js +6 -3
  129. package/lib/dash/dash_parser.js +9 -11
  130. package/lib/dash/mpd_utils.js +4 -5
  131. package/lib/dash/segment_list.js +1 -2
  132. package/lib/dash/segment_template.js +3 -3
  133. package/lib/hls/hls_parser.js +11 -9
  134. package/lib/hls/manifest_text_parser.js +3 -3
  135. package/lib/media/adaptation_set.js +1 -2
  136. package/lib/media/closed_caption_parser.js +0 -1
  137. package/lib/media/content_workarounds.js +2 -2
  138. package/lib/media/drm_engine.js +3 -2
  139. package/lib/media/media_source_engine.js +3 -2
  140. package/lib/media/mp4_segment_index_parser.js +1 -4
  141. package/lib/media/playhead.js +2 -2
  142. package/lib/media/presentation_timeline.js +18 -8
  143. package/lib/media/streaming_engine.js +6 -6
  144. package/lib/media/time_ranges_utils.js +1 -3
  145. package/lib/media/video_wrapper.js +1 -1
  146. package/lib/net/networking_engine.js +1 -1
  147. package/lib/offline/storage.js +4 -4
  148. package/lib/player.js +28 -14
  149. package/lib/polyfill/all.js +2 -3
  150. package/lib/polyfill/encryption_scheme.js +1 -1
  151. package/lib/polyfill/media_capabilities.js +3 -3
  152. package/lib/polyfill/mediasource.js +1 -1
  153. package/lib/routing/walker.js +2 -3
  154. package/lib/text/cue.js +1 -1
  155. package/lib/text/simple_text_displayer.js +2 -1
  156. package/lib/text/text_engine.js +1 -1
  157. package/lib/text/ttml_text_parser.js +8 -5
  158. package/lib/text/ui_text_displayer.js +1 -1
  159. package/lib/util/buffer_utils.js +1 -3
  160. package/lib/util/ebml_parser.js +3 -3
  161. package/lib/util/error.js +1 -1
  162. package/lib/util/iterables.js +0 -46
  163. package/lib/util/mp4_box_parsers.js +1 -4
  164. package/lib/util/mp4_parser.js +5 -7
  165. package/lib/util/periods.js +8 -9
  166. package/lib/util/platform.js +3 -3
  167. package/lib/util/pssh.js +1 -4
  168. package/lib/util/stream_utils.js +4 -3
  169. package/lib/util/string_utils.js +3 -5
  170. package/lib/util/uint8array_utils.js +3 -5
  171. package/lib/util/xml_utils.js +15 -7
  172. package/package.json +61 -36
  173. package/roadmap.md +17 -17
  174. package/test/abr/simple_abr_manager_unit.js +3 -8
  175. package/test/ads/ad_manager_unit.js +0 -6
  176. package/test/cast/cast_proxy_unit.js +0 -8
  177. package/test/cast/cast_receiver_integration.js +1 -18
  178. package/test/cast/cast_receiver_unit.js +1 -9
  179. package/test/cast/cast_sender_unit.js +0 -6
  180. package/test/cast/cast_utils_unit.js +0 -13
  181. package/test/cea/cea608_memory_unit.js +0 -5
  182. package/test/cea/cea708_service_unit.js +0 -7
  183. package/test/cea/cea708_window_unit.js +0 -5
  184. package/test/cea/cea_decoder_unit.js +0 -6
  185. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  186. package/test/cea/dtvcc_packet_unit.js +0 -5
  187. package/test/cea/mp4_cea_parser_unit.js +0 -4
  188. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  189. package/test/dash/dash_parser_live_unit.js +2 -15
  190. package/test/dash/dash_parser_manifest_unit.js +2 -16
  191. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  192. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  193. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  194. package/test/dash/mpd_utils_unit.js +3 -11
  195. package/test/demo/demo_unit.js +0 -5
  196. package/test/deprecate/enforcer_unit.js +0 -4
  197. package/test/deprecate/version_unit.js +0 -2
  198. package/test/hls/hls_live_unit.js +2 -14
  199. package/test/hls/hls_parser_unit.js +2 -15
  200. package/test/hls/manifest_text_parser_unit.js +0 -10
  201. package/test/media/adaptation_set_criteria_unit.js +3 -7
  202. package/test/media/adaptation_set_unit.js +0 -2
  203. package/test/media/buffering_observer_unit.js +1 -4
  204. package/test/media/closed_caption_parser_unit.js +0 -3
  205. package/test/media/drm_engine_integration.js +3 -17
  206. package/test/media/drm_engine_unit.js +4 -23
  207. package/test/media/manifest_parser_unit.js +0 -4
  208. package/test/media/media_source_engine_integration.js +0 -7
  209. package/test/media/media_source_engine_unit.js +1 -14
  210. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  211. package/test/media/play_rate_controller_unit.js +0 -4
  212. package/test/media/playhead_unit.js +8 -16
  213. package/test/media/presentation_timeline_unit.js +4 -7
  214. package/test/media/region_observer_unit.js +1 -6
  215. package/test/media/region_timeline_unit.js +0 -3
  216. package/test/media/segment_index_unit.js +0 -6
  217. package/test/media/segment_reference_unit.js +0 -3
  218. package/test/media/stall_detector_unit.js +0 -5
  219. package/test/media/streaming_engine_integration.js +9 -36
  220. package/test/media/streaming_engine_unit.js +11 -35
  221. package/test/media/time_ranges_utils_unit.js +0 -2
  222. package/test/media/transmuxer_integration.js +0 -6
  223. package/test/media/webm_segment_index_parser_unit.js +0 -4
  224. package/test/net/data_uri_plugin_unit.js +0 -7
  225. package/test/net/http_plugin_unit.js +0 -9
  226. package/test/net/networking_engine_unit.js +0 -11
  227. package/test/offline/download_progress_estimator_unit.js +0 -2
  228. package/test/offline/indexeddb_storage_unit.js +0 -6
  229. package/test/offline/manifest_convert_unit.js +0 -8
  230. package/test/offline/offline_integration.js +1 -10
  231. package/test/offline/offline_manifest_parser_unit.js +0 -6
  232. package/test/offline/offline_scheme_unit.js +0 -8
  233. package/test/offline/offline_uri_unit.js +0 -2
  234. package/test/offline/storage_compatibility_unit.js +1 -14
  235. package/test/offline/storage_integration.js +1 -25
  236. package/test/player_external.js +2 -10
  237. package/test/player_integration.js +21 -28
  238. package/test/player_load_graph_integration.js +1 -6
  239. package/test/player_src_equals_external.js +3 -9
  240. package/test/player_src_equals_integration.js +0 -7
  241. package/test/player_unit.js +52 -37
  242. package/test/routing/walker_unit.js +0 -8
  243. package/test/test/assets/large_file.mpd +1 -1
  244. package/test/test/boot.js +75 -22
  245. package/test/test/externs/jasmine.js +2 -2
  246. package/test/test/externs/karma.js +4 -0
  247. package/test/test/namespace.js +10 -0
  248. package/test/test/util/canned_idb.js +0 -8
  249. package/test/test/util/cea_utils.js +0 -6
  250. package/test/test/util/dash_parser_util.js +0 -13
  251. package/test/test/util/fake_ad.js +0 -3
  252. package/test/test/util/fake_ad_manager.js +0 -9
  253. package/test/test/util/fake_demo_main.js +0 -5
  254. package/test/test/util/fake_drm_engine.js +0 -6
  255. package/test/test/util/fake_media_source_engine.js +0 -7
  256. package/test/test/util/fake_networking_engine.js +0 -5
  257. package/test/test/util/fake_text_displayer.js +0 -5
  258. package/test/test/util/indexeddb_utils.js +1 -10
  259. package/test/test/util/jasmine_fetch.js +0 -1
  260. package/test/test/util/loader.js +0 -18
  261. package/test/test/util/manifest_generator.js +9 -14
  262. package/test/test/util/manifest_parser_util.js +0 -6
  263. package/test/test/util/offline_utils.js +0 -5
  264. package/test/test/util/simple_fakes.js +9 -26
  265. package/test/test/util/stream_generator.js +0 -14
  266. package/test/test/util/streaming_engine_util.js +0 -15
  267. package/test/test/util/test_scheme.js +1 -19
  268. package/test/test/util/ttml_utils.js +0 -2
  269. package/test/test/util/ui_utils.js +0 -9
  270. package/test/test/util/util.js +5 -19
  271. package/test/test/util/waiter.js +84 -43
  272. package/test/text/cue_integration.js +0 -4
  273. package/test/text/lrc_text_parser_unit.js +0 -4
  274. package/test/text/mp4_ttml_parser_unit.js +0 -6
  275. package/test/text/mp4_vtt_parser_unit.js +1 -7
  276. package/test/text/sbv_text_parser_unit.js +0 -4
  277. package/test/text/simple_text_displayer_unit.js +1 -8
  278. package/test/text/srt_text_parser_unit.js +0 -4
  279. package/test/text/ssa_text_parser_unit.js +0 -5
  280. package/test/text/text_engine_unit.js +2 -7
  281. package/test/text/text_track_integration.js +0 -2
  282. package/test/text/ttml_text_parser_unit.js +2 -11
  283. package/test/text/ui_text_displayer_unit.js +44 -41
  284. package/test/text/vtt_text_parser_unit.js +0 -9
  285. package/test/text/web_vtt_generator_unit.js +0 -3
  286. package/test/ui/ad_ui_unit.js +0 -11
  287. package/test/ui/localization_unit.js +0 -3
  288. package/test/ui/text_displayer_layout_unit.js +1 -12
  289. package/test/ui/ui_customization_unit.js +0 -6
  290. package/test/ui/ui_integration.js +0 -16
  291. package/test/ui/ui_unit.js +1 -17
  292. package/test/util/abortable_operation_unit.js +4 -9
  293. package/test/util/array_utils_unit.js +0 -2
  294. package/test/util/buffer_utils_unit.js +0 -2
  295. package/test/util/data_view_reader_unit.js +0 -4
  296. package/test/util/ebml_parser_unit.js +0 -4
  297. package/test/util/event_manager_unit.js +0 -3
  298. package/test/util/fake_event_target_unit.js +0 -5
  299. package/test/util/functional_unit.js +1 -1
  300. package/test/util/iterables_unit.js +0 -64
  301. package/test/util/language_utils_unit.js +0 -3
  302. package/test/util/manifest_parser_utils_unit.js +0 -2
  303. package/test/util/mp4_box_parsers_unit.js +0 -5
  304. package/test/util/mp4_parser_unit.js +0 -4
  305. package/test/util/multi_map_unit.js +0 -3
  306. package/test/util/object_utils_unit.js +0 -2
  307. package/test/util/periods_unit.js +14 -7
  308. package/test/util/pssh_unit.js +0 -5
  309. package/test/util/state_history_unit.js +0 -2
  310. package/test/util/stream_utils_unit.js +3 -8
  311. package/test/util/string_utils_unit.js +0 -6
  312. package/test/util/text_parser_unit.js +0 -2
  313. package/test/util/xml_utils_unit.js +0 -4
  314. package/ui/less/ad_controls.less +4 -4
  315. package/ui/less/buttons.less +5 -5
  316. package/ui/less/containers.less +5 -7
  317. package/ui/less/overflow_menu.less +4 -4
  318. package/ui/less/range_elements.less +5 -0
  319. package/ui/locales/sjn-translations.yaml +257 -0
  320. package/ui/locales/sjn.json +42 -0
  321. package/.github/workflows/build_and_test.yaml +0 -73
  322. package/.github/workflows/release.yaml +0 -53
  323. package/externs/svgelement.js +0 -18
@@ -29,7 +29,6 @@ goog.require('shaka.util.DataViewReader');
29
29
  goog.require('shaka.util.Error');
30
30
  goog.require('shaka.util.FakeEvent');
31
31
  goog.require('shaka.util.Functional');
32
- goog.require('shaka.util.Iterables');
33
32
  goog.require('shaka.util.LanguageUtils');
34
33
  goog.require('shaka.util.ManifestParserUtils');
35
34
  goog.require('shaka.util.MimeUtils');
@@ -885,7 +884,7 @@ shaka.hls.HlsParser = class {
885
884
  // the content. This means that if the content changes profiles, it should
886
885
  // include both. Since all known browsers support changing profiles
887
886
  // without any other work, just ignore them. See also:
888
- // https://github.com/google/shaka-player/issues/1817
887
+ // https://github.com/shaka-project/shaka-player/issues/1817
889
888
  const shortCodec = shaka.util.MimeUtils.getCodecBase(codec);
890
889
  if (!seen.has(shortCodec)) {
891
890
  ret.push(codec);
@@ -1653,8 +1652,8 @@ shaka.hls.HlsParser = class {
1653
1652
  // Create SegmentReferences for the partial segments.
1654
1653
  const partialSegmentRefs = [];
1655
1654
  if (this.lowLatencyMode_ && hlsSegment.partialSegments.length) {
1656
- const enumerate = (it) => shaka.util.Iterables.enumerate(it);
1657
- for (const {i, item} of enumerate(hlsSegment.partialSegments)) {
1655
+ for (let i = 0; i < hlsSegment.partialSegments.length; i++) {
1656
+ const item = hlsSegment.partialSegments[i];
1658
1657
  const pPreviousReference = i == 0 ?
1659
1658
  previousReference : partialSegmentRefs[partialSegmentRefs.length - 1];
1660
1659
  const pStartTime = (i == 0) ? startTime : pPreviousReference.endTime;
@@ -1675,6 +1674,9 @@ shaka.hls.HlsParser = class {
1675
1674
  this.parseByteRange_(pPreviousReference, pByterange);
1676
1675
  }
1677
1676
  const pUri = item.getAttributeValue('URI');
1677
+ if (!pUri) {
1678
+ continue;
1679
+ }
1678
1680
  const pAbsoluteUri = shaka.hls.Utils.constructAbsoluteUri(
1679
1681
  absoluteMediaPlaylistUri, pUri);
1680
1682
 
@@ -1860,9 +1862,9 @@ shaka.hls.HlsParser = class {
1860
1862
  // With delta updates, the DISCONTINUITY may be skipped. Check if
1861
1863
  // the discontintuity Sequence Number based on the media sequence
1862
1864
  // number.
1863
- while (discontinuityToMediaSequence.has(discontintuitySequenceNum + 1)
1864
- && discontinuityToMediaSequence.get(discontintuitySequenceNum + 1) <
1865
- position) {
1865
+ const disconMap = discontinuityToMediaSequence;
1866
+ while (disconMap.has(discontintuitySequenceNum + 1) &&
1867
+ disconMap.get(discontintuitySequenceNum + 1) < position) {
1866
1868
  discontintuitySequenceNum++;
1867
1869
  }
1868
1870
  }
@@ -1873,8 +1875,8 @@ shaka.hls.HlsParser = class {
1873
1875
  /** @type {!Array.<!shaka.media.SegmentReference>} */
1874
1876
  const references = [];
1875
1877
 
1876
- const enumerate = (it) => shaka.util.Iterables.enumerate(it);
1877
- for (const {i, item} of enumerate(hlsSegments)) {
1878
+ for (let i = 0; i < hlsSegments.length; i++) {
1879
+ const item = hlsSegments[i];
1878
1880
  const previousReference = references[references.length - 1];
1879
1881
  const startTime = (i == 0) ? firstStartTime :
1880
1882
  previousReference.endTime;
@@ -13,7 +13,6 @@ goog.require('shaka.hls.Segment');
13
13
  goog.require('shaka.hls.Tag');
14
14
  goog.require('shaka.hls.Utils');
15
15
  goog.require('shaka.util.Error');
16
- goog.require('shaka.util.Iterables');
17
16
  goog.require('shaka.util.StringUtils');
18
17
  goog.require('shaka.util.TextParser');
19
18
 
@@ -82,8 +81,9 @@ shaka.hls.ManifestTextParser = class {
82
81
  const tags = [];
83
82
  // Initialize to "true" to skip the first element.
84
83
  skip = true;
85
- const enumerate = (it) => shaka.util.Iterables.enumerate(it);
86
- for (const {i, item: line, next} of enumerate(lines)) {
84
+ for (let i = 0; i < lines.length; i++) {
85
+ const line = lines[i];
86
+ const next = lines[i + 1];
87
87
  // Skip comments
88
88
  if (shaka.hls.Utils.isComment(line) || skip) {
89
89
  skip = false;
@@ -8,7 +8,6 @@ goog.provide('shaka.media.AdaptationSet');
8
8
 
9
9
  goog.require('goog.asserts');
10
10
  goog.require('shaka.log');
11
- goog.require('shaka.util.Iterables');
12
11
  goog.require('shaka.util.MimeUtils');
13
12
 
14
13
 
@@ -215,7 +214,7 @@ shaka.media.AdaptationSet = class {
215
214
  codecsA.sort();
216
215
  codecsB.sort();
217
216
 
218
- for (const i of shaka.util.Iterables.range(codecsA.length)) {
217
+ for (let i = 0; i < codecsA.length; i++) {
219
218
  if (codecsA[i] != codecsB[i]) {
220
219
  return false;
221
220
  }
@@ -11,7 +11,6 @@ goog.require('shaka.cea.CeaDecoder');
11
11
  goog.require('shaka.cea.Mp4CeaParser');
12
12
  goog.require('shaka.util.BufferUtils');
13
13
  goog.requireType('shaka.cea.ICaptionDecoder');
14
- goog.requireType('shaka.cea.ICaptionDecoder.ClosedCaption');
15
14
  goog.requireType('shaka.cea.ICeaParser');
16
15
 
17
16
 
@@ -31,7 +31,7 @@ shaka.media.ContentWorkarounds = class {
31
31
  *
32
32
  * @param {!BufferSource} initSegmentBuffer
33
33
  * @return {!Uint8Array}
34
- * @see https://github.com/google/shaka-player/issues/2759
34
+ * @see https://github.com/shaka-project/shaka-player/issues/2759
35
35
  */
36
36
  static fakeEncryption(initSegmentBuffer) {
37
37
  const ContentWorkarounds = shaka.media.ContentWorkarounds;
@@ -283,7 +283,7 @@ shaka.media.ContentWorkarounds = class {
283
283
  *
284
284
  * @const {!shaka.util.Lazy.<!Uint8Array>}
285
285
  * @private
286
- * @see https://github.com/google/shaka-player/issues/2759
286
+ * @see https://github.com/shaka-project/shaka-player/issues/2759
287
287
  */
288
288
  shaka.media.ContentWorkarounds.CANNED_SINF_BOX_ =
289
289
  new shaka.util.Lazy(() => new Uint8Array([
@@ -616,7 +616,7 @@ shaka.media.DrmEngine = class {
616
616
  // first MIME type even if the others are supported. To work around this,
617
617
  // we say that Edge supports everything.
618
618
  //
619
- // See https://github.com/google/shaka-player/issues/1495 for details.
619
+ // See https://github.com/shaka-project/shaka-player/issues/1495 for details.
620
620
  if (shaka.util.Platform.isLegacyEdge()) {
621
621
  return true;
622
622
  }
@@ -628,7 +628,8 @@ shaka.media.DrmEngine = class {
628
628
  // Some Tizen devices seem to misreport AC-3 support. This works around
629
629
  // the issue, by falling back to EC-3, which seems to be supported on the
630
630
  // same devices and be correctly reported in all cases we have observed.
631
- // See https://github.com/google/shaka-player/issues/2989 for details.
631
+ // See https://github.com/shaka-project/shaka-player/issues/2989 for
632
+ // details.
632
633
  const fallback = contentType.replace('ac-3', 'ec-3');
633
634
  return this.supportedTypes_.has(contentType) ||
634
635
  this.supportedTypes_.has(fallback);
@@ -830,7 +830,8 @@ shaka.media.MediaSourceEngine = class {
830
830
  * @private
831
831
  */
832
832
  setTimestampOffset_(contentType, timestampOffset) {
833
- // Work around for https://github.com/google/shaka-player/issues/1281:
833
+ // Work around for
834
+ // https://github.com/shaka-project/shaka-player/issues/1281:
834
835
  // TODO(https://bit.ly/2ttKiBU): follow up when this is fixed in Edge
835
836
  if (timestampOffset < 0) {
836
837
  // Try to prevent rounding errors in Edge from removing the first
@@ -1100,7 +1101,7 @@ shaka.media.MediaSourceEngine = class {
1100
1101
  // then insert fake encryption metadata for init segments that lack it.
1101
1102
  // The MP4 requirement is because we can currently only do this
1102
1103
  // transformation on MP4 containers.
1103
- // See: https://github.com/google/shaka-player/issues/2759
1104
+ // See: https://github.com/shaka-project/shaka-player/issues/2759
1104
1105
  if (isInitSegment &&
1105
1106
  encryptionExpected &&
1106
1107
  shaka.util.Platform.requiresEncryptionInfoInAllInitSegments() &&
@@ -11,8 +11,6 @@ goog.require('shaka.log');
11
11
  goog.require('shaka.media.InitSegmentReference');
12
12
  goog.require('shaka.media.SegmentReference');
13
13
  goog.require('shaka.util.Error');
14
- goog.require('shaka.util.Functional');
15
- goog.require('shaka.util.Iterables');
16
14
  goog.require('shaka.util.Mp4Parser');
17
15
 
18
16
 
@@ -123,8 +121,7 @@ shaka.media.Mp4SegmentIndexParser = class {
123
121
  let unscaledStartTime = earliestPresentationTime;
124
122
  let startByte = sidxOffset + box.size + firstOffset;
125
123
 
126
- for (const _ of shaka.util.Iterables.range(referenceCount)) {
127
- shaka.util.Functional.ignored(_);
124
+ for (let i = 0; i < referenceCount; i++) {
128
125
  // |chunk| is 1 bit for |referenceType|, and 31 bits for |referenceSize|.
129
126
  const chunk = box.reader.readUint32();
130
127
  const referenceType = (chunk & 0x80000000) >>> 31;
@@ -256,7 +256,7 @@ shaka.media.MediaSourcePlayhead = class {
256
256
  // We don't buffer when the livestream video is paused and the playhead time
257
257
  // is out of the seek range; thus, we do not clamp the current time when the
258
258
  // video is paused.
259
- // https://github.com/google/shaka-player/issues/1121
259
+ // https://github.com/shaka-project/shaka-player/issues/1121
260
260
  if (this.mediaElement_.readyState > 0 && !this.mediaElement_.paused) {
261
261
  return this.clampTime_(time);
262
262
  }
@@ -362,7 +362,7 @@ shaka.media.MediaSourcePlayhead = class {
362
362
  * presentation duration. Seeking to or starting at duration does not work
363
363
  * consistently across browsers.
364
364
  *
365
- * @see https://github.com/google/shaka-player/issues/979
365
+ * @see https://github.com/shaka-project/shaka-player/issues/979
366
366
  * @param {number} time
367
367
  * @return {number} The adjusted seek time.
368
368
  * @private
@@ -355,14 +355,23 @@ shaka.media.PresentationTimeline = class {
355
355
  * starting after this time should be assumed to be unavailable.
356
356
  *
357
357
  * @return {number} The current segment availability end time, in seconds,
358
- * relative to the start of the presentation. Always returns the
359
- * presentation's duration for video-on-demand.
358
+ * relative to the start of the presentation. For VOD, the availability
359
+ * end time is the content's duration. If the Player's playRangeEnd
360
+ * configuration is used, this can override the duration.
360
361
  * @export
361
362
  */
362
363
  getSegmentAvailabilityEnd() {
363
364
  if (!this.isLive() && !this.isInProgress()) {
364
365
  // It's a static manifest (can also be a dynamic->static conversion)
365
- return this.maxSegmentEndTime_ || this.duration_;
366
+ if (this.maxSegmentEndTime_) {
367
+ // If we know segment times, use the min of that and duration.
368
+ // Note that the playRangeEnd configuration changes this.duration_.
369
+ // See https://github.com/shaka-project/shaka-player/issues/4026
370
+ return Math.min(this.maxSegmentEndTime_, this.duration_);
371
+ } else {
372
+ // If we don't have segment times, use duration.
373
+ return this.duration_;
374
+ }
366
375
  }
367
376
  // Can be either live or "in-progress recording" (live with known duration)
368
377
  return Math.min(this.getLiveEdge_() + this.availabilityTimeOffset_,
@@ -389,10 +398,11 @@ shaka.media.PresentationTimeline = class {
389
398
  // For VOD, the offset and end time are ignored, and we just return the
390
399
  // earliest segment time. All segments are "safe" in VOD. However, we
391
400
  // should round up to the nearest millisecond to avoid issues like
392
- // https://github.com/google/shaka-player/issues/2831, in which we tried to
393
- // seek repeatedly to catch up to the seek range, and never actually
394
- // "arrived" within it. The video's currentTime is not as accurate as the
395
- // JS number representing the earliest segment time for some content.
401
+ // https://github.com/shaka-project/shaka-player/issues/2831, in which we
402
+ // tried to seek repeatedly to catch up to the seek range, and never
403
+ // actually "arrived" within it. The video's currentTime is not as
404
+ // accurate as the JS number representing the earliest segment time for
405
+ // some content.
396
406
  if (this.segmentAvailabilityDuration_ == Infinity) {
397
407
  return Math.ceil(earliestSegmentTime * 1e3) / 1e3;
398
408
  }
@@ -407,7 +417,7 @@ shaka.media.PresentationTimeline = class {
407
417
  // Add the offset to the availability start to ensure that we don't fall
408
418
  // outside the availability window while we buffer; we don't need to add the
409
419
  // offset to earliestSegmentTime since that won't change over time.
410
- // Also see: https://github.com/google/shaka-player/issues/692
420
+ // Also see: https://github.com/shaka-project/shaka-player/issues/692
411
421
  const desiredStart =
412
422
  Math.min(availabilityStart + offset, this.getSeekRangeEnd());
413
423
  return Math.max(earliestSegmentTime, desiredStart);
@@ -669,7 +669,7 @@ shaka.media.StreamingEngine = class {
669
669
 
670
670
  if (mediaState.waitingToClearBuffer) {
671
671
  // May not be performing an update, but an update will still happen.
672
- // See: https://github.com/google/shaka-player/issues/334
672
+ // See: https://github.com/shaka-project/shaka-player/issues/334
673
673
  shaka.log.debug(logPrefix, 'clear: already waiting');
674
674
  return;
675
675
  }
@@ -909,9 +909,9 @@ shaka.media.StreamingEngine = class {
909
909
  // buffering forever at the end.
910
910
  // We should only do this if the duration needs to shrink.
911
911
  // Growing it by less than 1ms can actually cause buffering on
912
- // replay, as in https://github.com/google/shaka-player/issues/979
912
+ // replay, as in https://github.com/shaka-project/shaka-player/issues/979
913
913
  // On some platforms, this can spuriously be 0, so ignore this case.
914
- // https://github.com/google/shaka-player/issues/1967,
914
+ // https://github.com/shaka-project/shaka-player/issues/1967,
915
915
  const duration = this.playerInterface_.mediaSourceEngine.getDuration();
916
916
  if (duration != 0 &&
917
917
  duration < this.manifest_.presentationTimeline.getDuration()) {
@@ -1702,7 +1702,7 @@ shaka.media.StreamingEngine = class {
1702
1702
  const bufferedBehind = presentationTime - startTime;
1703
1703
 
1704
1704
  const overflow = bufferedBehind - bufferBehind;
1705
- // See: https://github.com/google/shaka-player/issues/2982
1705
+ // See: https://github.com/shaka-project/shaka-player/issues/2982
1706
1706
  if (overflow <= 0.01) {
1707
1707
  shaka.log.v2(logPrefix,
1708
1708
  'buffer behind okay:',
@@ -2041,7 +2041,7 @@ shaka.media.StreamingEngine.MediaState_;
2041
2041
  * of the Period.
2042
2042
  *
2043
2043
  * NOTE: This was increased as part of the solution to
2044
- * https://github.com/google/shaka-player/issues/1281
2044
+ * https://github.com/shaka-project/shaka-player/issues/1281
2045
2045
  *
2046
2046
  * @const {number}
2047
2047
  * @private
@@ -2055,7 +2055,7 @@ shaka.media.StreamingEngine.APPEND_WINDOW_START_FUDGE_ = 0.1;
2055
2055
  * the Period. This rounding error could then create an artificial gap and a
2056
2056
  * stutter when the gap-jumping logic takes over.
2057
2057
  *
2058
- * https://github.com/google/shaka-player/issues/1597
2058
+ * https://github.com/shaka-project/shaka-player/issues/1597
2059
2059
  *
2060
2060
  * @const {number}
2061
2061
  * @private
@@ -6,8 +6,6 @@
6
6
 
7
7
  goog.provide('shaka.media.TimeRangesUtils');
8
8
 
9
- goog.require('shaka.util.Iterables');
10
-
11
9
 
12
10
  /**
13
11
  * @summary A set of utility functions for dealing with TimeRanges objects.
@@ -157,7 +155,7 @@ shaka.media.TimeRangesUtils = class {
157
155
  return [];
158
156
  }
159
157
  const ret = [];
160
- for (const i of shaka.util.Iterables.range(b.length)) {
158
+ for (let i = 0; i < b.length; i++) {
161
159
  ret.push({start: b.start(i), end: b.end(i)});
162
160
  }
163
161
  return ret;
@@ -141,7 +141,7 @@ shaka.media.VideoWrapper = class {
141
141
  // TODO: Need further investigation why it happens. Before and after
142
142
  // setting the current time, video.readyState is 1, video.paused is true,
143
143
  // and video.buffered's TimeRanges length is 0.
144
- // See: https://github.com/google/shaka-player/issues/1298
144
+ // See: https://github.com/shaka-project/shaka-player/issues/1298
145
145
  this.mover_.moveTo(
146
146
  this.video_.currentTime == 0 ?
147
147
  startTime :
@@ -421,7 +421,7 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
421
421
  }
422
422
 
423
423
  // Schemes are meant to be case-insensitive.
424
- // See https://github.com/google/shaka-player/issues/2173
424
+ // See https://github.com/shaka-project/shaka-player/issues/2173
425
425
  // and https://tools.ietf.org/html/rfc3986#section-3.1
426
426
  scheme = scheme.toLowerCase();
427
427
 
@@ -600,10 +600,10 @@ shaka.offline.Storage = class {
600
600
  storage, drmEngine, manifest, uri, metadata, config, downloader) {
601
601
  const pendingContent = shaka.offline.StoredContentUtils.fromManifest(
602
602
  uri, manifest, /* size= */ 0, metadata);
603
- // In https://github.com/google/shaka-player/issues/2652, we found that this
604
- // callback would be removed by the compiler if we reference the config in
605
- // the onProgress closure below. Reading it into a local variable first
606
- // seems to work around this apparent compiler bug.
603
+ // In https://github.com/shaka-project/shaka-player/issues/2652, we found
604
+ // that this callback would be removed by the compiler if we reference the
605
+ // config in the onProgress closure below. Reading it into a local
606
+ // variable first seems to work around this apparent compiler bug.
607
607
  const progressCallback = config.offline.progressCallback;
608
608
 
609
609
  const onProgress = (progress, size) => {
package/lib/player.js CHANGED
@@ -2120,6 +2120,14 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
2120
2120
 
2121
2121
  this.playhead_ = new shaka.media.SrcEqualsPlayhead(has.mediaElement);
2122
2122
 
2123
+ // This flag is used below in the language preference setup and
2124
+ // track-management to check if this load was canceled before the necessary
2125
+ // events fired.
2126
+ let unloaded = false;
2127
+ this.cleanupOnUnload_.push(() => {
2128
+ unloaded = true;
2129
+ });
2130
+
2123
2131
  if (has.startTime != null) {
2124
2132
  this.playhead_.setStartTime(has.startTime);
2125
2133
  }
@@ -2147,7 +2155,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
2147
2155
 
2148
2156
  // Wait for the 'loadedmetadata' event to measure load() latency, but only
2149
2157
  // if preload is set in a way that would result in this event firing
2150
- // automatically. See https://github.com/google/shaka-player/issues/2483
2158
+ // automatically.
2159
+ // See https://github.com/shaka-project/shaka-player/issues/2483
2151
2160
  if (this.video_.preload != 'none') {
2152
2161
  this.eventManager_.listenOnce(this.video_, 'loadedmetadata', () => {
2153
2162
  const now = Date.now() / 1000;
@@ -2170,6 +2179,12 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
2170
2179
  }
2171
2180
  if (this.video_.textTracks) {
2172
2181
  this.eventManager_.listen(this.video_.textTracks, 'addtrack', (e) => {
2182
+ // If we have moved on to another piece of content while waiting for
2183
+ // the above event, we should not process tracks here.
2184
+ if (unloaded) {
2185
+ return;
2186
+ }
2187
+
2173
2188
  this.onTracksChanged_();
2174
2189
  this.processTimedMetadataSrcEqls_(/** @type {!TrackEvent} */(e));
2175
2190
  });
@@ -2211,13 +2226,6 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
2211
2226
  fullyLoaded.resolve();
2212
2227
  });
2213
2228
 
2214
- // This flag is used below in the language preference setup to check if this
2215
- // load was canceled before the necessary events fire.
2216
- let unloaded = false;
2217
- this.cleanupOnUnload_.push(() => {
2218
- unloaded = true;
2219
- });
2220
-
2221
2229
  // We can't switch to preferred languages, though, until the data is loaded.
2222
2230
  shaka.util.MediaReadyState.waitForReadyState(this.video_,
2223
2231
  HTMLMediaElement.HAVE_CURRENT_DATA,
@@ -2375,12 +2383,16 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
2375
2383
  // In Safari the initial assignment does not always work, so we schedule
2376
2384
  // this process to be repeated several times to ensure that it has been put
2377
2385
  // in the correct mode.
2378
- new shaka.util.Timer(() => {
2386
+ const timer = new shaka.util.Timer(() => {
2379
2387
  const textTracks = this.getMetadataTracks_();
2380
2388
  for (const textTrack of textTracks) {
2381
2389
  textTrack.mode = 'hidden';
2382
2390
  }
2383
- }).tickNow().tickAfter(/* seconds= */ 0.5);
2391
+ }).tickNow().tickAfter(0.5);
2392
+
2393
+ this.cleanupOnUnload_.push(() => {
2394
+ timer.stop();
2395
+ });
2384
2396
  }
2385
2397
 
2386
2398
 
@@ -3455,7 +3467,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
3455
3467
  this.streamingEngine_.switchTextStream(stream);
3456
3468
  this.onTextChanged_();
3457
3469
 
3458
- // Workaround for https://github.com/google/shaka-player/issues/1299
3470
+ // Workaround for
3471
+ // https://github.com/shaka-project/shaka-player/issues/1299
3459
3472
  // When track is selected, back-propagate the language to
3460
3473
  // currentTextLanguage_.
3461
3474
  this.currentTextLanguage_ = stream.language;
@@ -3531,7 +3544,8 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
3531
3544
  this.switchVariant_(variant, /* fromAdaptation= */ false, clearBuffer,
3532
3545
  safeMargin);
3533
3546
 
3534
- // Workaround for https://github.com/google/shaka-player/issues/1299
3547
+ // Workaround for
3548
+ // https://github.com/shaka-project/shaka-player/issues/1299
3535
3549
  // When track is selected, back-propagate the language to
3536
3550
  // currentAudioLanguage_.
3537
3551
  this.currentAdaptationSetCriteria_ = new shaka.media.ExampleBasedCriteria(
@@ -4854,7 +4868,7 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
4854
4868
  // If the playback rate changes while seeking, Edge will cache the playback
4855
4869
  // rate and use it after seeking.
4856
4870
  //
4857
- // https://github.com/google/shaka-player/issues/951
4871
+ // https://github.com/shaka-project/shaka-player/issues/951
4858
4872
  if (newRate == 0) {
4859
4873
  return;
4860
4874
  }
@@ -6118,7 +6132,7 @@ shaka.Player.TYPICAL_BUFFERING_THRESHOLD_ = 0.5;
6118
6132
  * @define {string} A version number taken from git at compile time.
6119
6133
  * @export
6120
6134
  */
6121
- shaka.Player.version = 'v3.1.6-uncompiled'; // x-release-please-version
6135
+ shaka.Player.version = 'v3.1.7-uncompiled';
6122
6136
 
6123
6137
  // Initialize the deprecation system using the version string we just set
6124
6138
  // on the player.
@@ -7,7 +7,6 @@
7
7
  goog.provide('shaka.polyfill');
8
8
 
9
9
  goog.require('shaka.log');
10
- goog.require('shaka.util.Iterables');
11
10
 
12
11
 
13
12
  /**
@@ -40,8 +39,8 @@ shaka.polyfill = class {
40
39
  */
41
40
  static register(polyfill, priority) {
42
41
  const newItem = {priority: priority || 0, callback: polyfill};
43
- const enumerate = (it) => shaka.util.Iterables.enumerate(it);
44
- for (const {i, item} of enumerate(shaka.polyfill.polyfills_)) {
42
+ for (let i = 0; i < shaka.polyfill.polyfills_.length; i++) {
43
+ const item = shaka.polyfill.polyfills_[i];
45
44
  if (item.priority < newItem.priority) {
46
45
  shaka.polyfill.polyfills_.splice(i, 0, newItem);
47
46
  return;
@@ -12,7 +12,7 @@ goog.require('shaka.polyfill');
12
12
  * @summary A polyfill to add support for EncryptionScheme queries in EME.
13
13
  * @see https://wicg.github.io/encrypted-media-encryption-scheme/
14
14
  * @see https://github.com/w3c/encrypted-media/pull/457
15
- * @see https://github.com/google/eme-encryption-scheme-polyfill
15
+ * @see https://github.com/shaka-project/eme-encryption-scheme-polyfill
16
16
  * @export
17
17
  */
18
18
  shaka.polyfill.EncryptionScheme = class {
@@ -29,12 +29,12 @@ shaka.polyfill.MediaCapabilities = class {
29
29
  // TODO: re-evaluate MediaCapabilities in the future versions of Chromecast.
30
30
  // Since MediaCapabilities implementation is buggy in Apple browsers, we
31
31
  // should always install polyfill for Apple browsers.
32
- // See: https://github.com/google/shaka-player/issues/3530
32
+ // See: https://github.com/shaka-project/shaka-player/issues/3530
33
33
  // TODO: re-evaluate MediaCapabilities in the future versions of Apple
34
34
  // Browsers.
35
35
  // Since MediaCapabilities implementation is buggy in PS5 browsers, we
36
36
  // should always install polyfill for PS5 browsers.
37
- // See: https://github.com/google/shaka-player/issues/3582
37
+ // See: https://github.com/shaka-project/shaka-player/issues/3582
38
38
  // TODO: re-evaluate MediaCapabilities in the future versions of PS5
39
39
  // Browsers.
40
40
  if (!shaka.util.Platform.isChromecast() &&
@@ -54,7 +54,7 @@ shaka.polyfill.MediaCapabilities = class {
54
54
 
55
55
  // Keep the patched MediaCapabilities object from being garbage-collected in
56
56
  // Safari.
57
- // See https://github.com/google/shaka-player/issues/3696#issuecomment-1009472718
57
+ // See https://github.com/shaka-project/shaka-player/issues/3696#issuecomment-1009472718
58
58
  shaka.polyfill.MediaCapabilities.originalMcap =
59
59
  navigator.mediaCapabilities;
60
60
 
@@ -39,7 +39,7 @@ shaka.polyfill.MediaSource = class {
39
39
  shaka.polyfill.MediaSource.patchCastIsTypeSupported_();
40
40
  } else if (safariVersion) {
41
41
  // TS content is broken on Safari in general.
42
- // See https://github.com/google/shaka-player/issues/743
42
+ // See https://github.com/shaka-project/shaka-player/issues/743
43
43
  // and https://bugs.webkit.org/show_bug.cgi?id=165342
44
44
  shaka.polyfill.MediaSource.rejectTsContent_();
45
45
 
@@ -5,7 +5,6 @@
5
5
  */
6
6
 
7
7
  goog.provide('shaka.routing.Walker');
8
- goog.provide('shaka.routing.Walker.Implementation');
9
8
 
10
9
  goog.require('goog.asserts');
11
10
  goog.require('shaka.routing.Node');
@@ -81,7 +80,7 @@ shaka.routing.Walker = class {
81
80
  * new work is added (and this is not null) it can be resolved. The only
82
81
  * time when this should be non-null is when we are waiting for more work.
83
82
  *
84
- * @private {shaka.util.PublicPromise}
83
+ * @private {?shaka.util.PublicPromise}
85
84
  */
86
85
  this.waitForWork_ = null;
87
86
 
@@ -91,7 +90,7 @@ shaka.routing.Walker = class {
91
90
  /** @private {?shaka.routing.Walker.ActiveRoute_} */
92
91
  this.currentRoute_ = null;
93
92
 
94
- /** @private {shaka.util.AbortableOperation} */
93
+ /** @private {?shaka.util.AbortableOperation} */
95
94
  this.currentStep_ = null;
96
95
 
97
96
  /**
package/lib/text/cue.js CHANGED
@@ -282,7 +282,7 @@ shaka.text.Cue = class {
282
282
  // Compare the start time, end time and payload of the cues first for
283
283
  // performance optimization. We can avoid the more expensive recursive
284
284
  // checks if the top-level properties don't match.
285
- // See: https://github.com/google/shaka-player/issues/3018
285
+ // See: https://github.com/shaka-project/shaka-player/issues/3018
286
286
  if (cue1.startTime != cue2.startTime || cue1.endTime != cue2.endTime ||
287
287
  cue1.payload != cue2.payload) {
288
288
  return false;
@@ -178,7 +178,8 @@ shaka.text.SimpleTextDisplayer = class {
178
178
  // The browser will display cues with identical time ranges from the
179
179
  // bottom up. Reversing the order of equal cues means the first one
180
180
  // parsed will be at the top, as you would expect.
181
- // See https://github.com/google/shaka-player/issues/848 for more info.
181
+ // See https://github.com/shaka-project/shaka-player/issues/848 for
182
+ // more info.
182
183
  // However, this ordering behavior is part of VTTCue's "line" field.
183
184
  // Some platforms don't have a real VTTCue and use a polyfill instead.
184
185
  // When VTTCue is polyfilled or does not support "line", we should _not_
@@ -12,7 +12,7 @@ goog.require('shaka.util.BufferUtils');
12
12
  goog.require('shaka.util.Functional');
13
13
  goog.require('shaka.util.IDestroyable');
14
14
  goog.require('shaka.util.MimeUtils');
15
- goog.requireType('shaka.cea.ICaptionDecoder.ClosedCaption');
15
+ goog.requireType('shaka.cea.ICaptionDecoder');
16
16
 
17
17
 
18
18
  // TODO: revisit this when Closure Compiler supports partially-exported classes.
@@ -536,8 +536,10 @@ shaka.text.TtmlTextParser = class {
536
536
 
537
537
  cue.textAlign = Cue.textAlign[align.toUpperCase()];
538
538
  } else {
539
- // Default value is START: https://bit.ly/32OGmvo
540
- cue.textAlign = Cue.textAlign.START;
539
+ // Default value is START in the TTML spec: https://bit.ly/32OGmvo
540
+ // But to make the subtitle render consitent with other players and the
541
+ // shaka.text.Cue we use CENTER
542
+ cue.textAlign = Cue.textAlign.CENTER;
541
543
  }
542
544
 
543
545
  const displayAlign = TtmlTextParser.getStyleAttribute_(
@@ -559,7 +561,7 @@ shaka.text.TtmlTextParser = class {
559
561
  // Background color should not be set on a container. If this is a nested
560
562
  // cue, you can set the background. If it's a top-level that happens to
561
563
  // also be a leaf, you can set the background.
562
- // See https://github.com/google/shaka-player/issues/2623
564
+ // See https://github.com/shaka-project/shaka-player/issues/2623
563
565
  // This used to be handled in the displayer, but that is confusing. The Cue
564
566
  // structure should reflect what you want to happen in the displayer, and
565
567
  // the displayer shouldn't have to know about TTML.
@@ -919,8 +921,9 @@ shaka.text.TtmlTextParser = class {
919
921
  let ret = null;
920
922
  const XmlUtils = shaka.util.XmlUtils;
921
923
  while (element) {
922
- ret = nsName ? XmlUtils.getAttributeNS(element, nsName, attributeName)
923
- : element.getAttribute(attributeName);
924
+ ret = nsName ?
925
+ XmlUtils.getAttributeNS(element, nsName, attributeName) :
926
+ element.getAttribute(attributeName);
924
927
  if (ret) {
925
928
  break;
926
929
  }
@@ -108,7 +108,7 @@ shaka.text.UITextDisplayer = class {
108
108
  append(cues) {
109
109
  // Clone the cues list for performace optimization. We can avoid the cues
110
110
  // list growing during the comparisons for duplicate cues.
111
- // See: https://github.com/google/shaka-player/issues/3018
111
+ // See: https://github.com/shaka-project/shaka-player/issues/3018
112
112
  const cuesList = [...this.cues_];
113
113
  for (const cue of cues) {
114
114
  // When a VTT cue spans a segment boundary, the cue will be duplicated