shaka-player 3.3.2 → 3.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/.csslintrc +11 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  3. package/.github/pull_request_template.md +6 -34
  4. package/.github/workflows/build-and-test.yaml +129 -0
  5. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
  6. package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
  7. package/.github/workflows/demo-version-index.yaml +29 -0
  8. package/.github/workflows/nightly-demo.yaml +42 -0
  9. package/.github/workflows/release-please.yaml +147 -0
  10. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  11. package/.github/workflows/selenium-lab-tests.yaml +92 -0
  12. package/AUTHORS +2 -0
  13. package/CHANGELOG.md +1718 -1675
  14. package/CONTRIBUTING.md +2 -2
  15. package/CONTRIBUTORS +2 -0
  16. package/README.md +7 -7
  17. package/app-engine/README.md +9 -0
  18. package/app-engine/demo-version-index/README.md +14 -0
  19. package/app-engine/demo-version-index/app.yaml +2 -0
  20. package/app-engine/demo-version-index/main.py +162 -0
  21. package/app-engine/demo-version-index/requirements.txt +6 -0
  22. package/app-engine/demo-version-index/templates/index.html +114 -0
  23. package/app-engine/shaka-player-demo/README.md +18 -0
  24. package/app-engine/shaka-player-demo/app.yaml +61 -0
  25. package/app-engine/shaka-player-demo/main.py +95 -0
  26. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  27. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  28. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  29. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  30. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  31. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  32. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  33. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  34. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  35. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  36. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  37. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  38. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  39. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  40. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  41. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  42. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  43. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  44. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  45. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  46. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  47. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  48. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  49. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  50. package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
  51. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  52. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  53. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  54. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  55. package/app-engine/shaka-player-demo/posters.py +110 -0
  56. package/app-engine/shaka-player-demo/requirements.txt +5 -0
  57. package/app-engine/shaka-player-demo/time.txt +1 -0
  58. package/build/README.md +3 -3
  59. package/build/checkversion.py +2 -2
  60. package/build/conformance.textproto +13 -0
  61. package/build/docker/Dockerfile +20 -0
  62. package/build/docker/docker-compose.yml +10 -0
  63. package/build/gendeps.py +18 -15
  64. package/build/shaka-lab.yaml +163 -0
  65. package/build/shakaBuildHelpers.py +4 -29
  66. package/build/test.py +94 -29
  67. package/build/types/core +0 -1
  68. package/build/types/polyfill +1 -0
  69. package/build/wrapper.template.js +2 -2
  70. package/demo/TengwarTelcontar.woff2 +0 -0
  71. package/demo/asset_card.js +1 -2
  72. package/demo/cast_receiver/index.html +1 -1
  73. package/demo/cast_receiver/receiver_app.css +14 -14
  74. package/demo/common/assets.js +2 -0
  75. package/demo/config.js +0 -1
  76. package/demo/custom.js +0 -1
  77. package/demo/customWarning.txt +2 -2
  78. package/demo/demo.less +29 -18
  79. package/demo/demo_uncompiled.js +1 -13
  80. package/demo/index.html +1 -1
  81. package/demo/main.js +3 -3
  82. package/dist/controls.css +3 -3
  83. package/dist/controls.css.map +1 -1
  84. package/dist/demo.compiled.debug.js +191 -194
  85. package/dist/demo.compiled.debug.map +4 -4
  86. package/dist/demo.compiled.js +191 -194
  87. package/dist/demo.compiled.map +4 -4
  88. package/dist/demo.css +1 -1
  89. package/dist/demo.css.map +1 -1
  90. package/dist/deps.js +232 -226
  91. package/dist/locales.js +30 -30
  92. package/dist/receiver.compiled.debug.js +43 -45
  93. package/dist/receiver.compiled.debug.map +4 -4
  94. package/dist/receiver.compiled.js +43 -45
  95. package/dist/receiver.compiled.map +4 -4
  96. package/dist/shaka-player.compiled.d.ts +247 -236
  97. package/dist/shaka-player.compiled.debug.d.ts +247 -236
  98. package/dist/shaka-player.compiled.debug.externs.js +15 -3
  99. package/dist/shaka-player.compiled.debug.js +284 -290
  100. package/dist/shaka-player.compiled.debug.map +4 -4
  101. package/dist/shaka-player.compiled.externs.js +15 -3
  102. package/dist/shaka-player.compiled.js +855 -859
  103. package/dist/shaka-player.compiled.map +4 -4
  104. package/dist/shaka-player.ui.d.ts +291 -280
  105. package/dist/shaka-player.ui.debug.d.ts +291 -280
  106. package/dist/shaka-player.ui.debug.externs.js +15 -3
  107. package/dist/shaka-player.ui.debug.js +296 -302
  108. package/dist/shaka-player.ui.debug.map +4 -4
  109. package/dist/shaka-player.ui.externs.js +15 -3
  110. package/dist/shaka-player.ui.js +1005 -1009
  111. package/dist/shaka-player.ui.map +4 -4
  112. package/docs/design/REDESIGN.md +33 -33
  113. package/docs/design/bg-fetch.md +2 -2
  114. package/docs/design/codec_preferences.md +1 -1
  115. package/docs/design/dash-audio-channels.md +3 -3
  116. package/docs/design/dash-manifests.md +1 -1
  117. package/docs/design/gap-jumping.md +3 -3
  118. package/docs/design/preload.md +2 -2
  119. package/docs/tutorials/faq.md +8 -8
  120. package/docs/tutorials/index.json +1 -0
  121. package/docs/tutorials/plugins.md +3 -3
  122. package/docs/tutorials/selenium-grid-config.md +122 -0
  123. package/docs/tutorials/welcome.md +10 -2
  124. package/externs/cmcd.js +1 -1
  125. package/karma.conf.js +141 -30
  126. package/lib/abr/simple_abr_manager.js +12 -6
  127. package/lib/cast/cast_proxy.js +3 -4
  128. package/lib/cea/cea608_data_channel.js +2 -2
  129. package/lib/cea/cea708_service.js +5 -4
  130. package/lib/cea/mp4_cea_parser.js +11 -5
  131. package/lib/cea/sei_processor.js +6 -3
  132. package/lib/dash/dash_parser.js +11 -14
  133. package/lib/dash/mpd_utils.js +4 -5
  134. package/lib/dash/segment_list.js +1 -2
  135. package/lib/dash/segment_template.js +3 -3
  136. package/lib/hls/hls_parser.js +34 -20
  137. package/lib/hls/manifest_text_parser.js +3 -3
  138. package/lib/media/adaptation_set.js +1 -2
  139. package/lib/media/content_workarounds.js +2 -2
  140. package/lib/media/drm_engine.js +3 -2
  141. package/lib/media/media_source_engine.js +10 -3
  142. package/lib/media/mp4_segment_index_parser.js +1 -4
  143. package/lib/media/playhead.js +2 -2
  144. package/lib/media/presentation_timeline.js +18 -8
  145. package/lib/media/streaming_engine.js +6 -6
  146. package/lib/media/time_ranges_utils.js +1 -3
  147. package/lib/media/video_wrapper.js +1 -1
  148. package/lib/net/networking_engine.js +1 -1
  149. package/lib/offline/indexeddb/storage_mechanism.js +4 -2
  150. package/lib/offline/storage.js +96 -95
  151. package/lib/player.js +190 -114
  152. package/lib/polyfill/all.js +2 -3
  153. package/lib/polyfill/encryption_scheme.js +1 -1
  154. package/lib/polyfill/media_capabilities.js +3 -3
  155. package/lib/polyfill/mediasource.js +1 -1
  156. package/lib/polyfill/symbol.js +46 -0
  157. package/lib/text/cue.js +1 -1
  158. package/lib/text/simple_text_displayer.js +2 -1
  159. package/lib/text/ttml_text_parser.js +8 -5
  160. package/lib/text/ui_text_displayer.js +1 -1
  161. package/lib/util/buffer_utils.js +1 -3
  162. package/lib/util/config_utils.js +25 -0
  163. package/lib/util/ebml_parser.js +3 -3
  164. package/lib/util/error.js +8 -1
  165. package/lib/util/iterables.js +0 -46
  166. package/lib/util/manifest_parser_utils.js +1 -1
  167. package/lib/util/mime_utils.js +48 -1
  168. package/lib/util/mp4_box_parsers.js +1 -4
  169. package/lib/util/mp4_parser.js +5 -7
  170. package/lib/util/periods.js +15 -15
  171. package/lib/util/platform.js +3 -3
  172. package/lib/util/player_configuration.js +9 -14
  173. package/lib/util/pssh.js +1 -4
  174. package/lib/util/stream_utils.js +8 -5
  175. package/lib/util/string_utils.js +3 -5
  176. package/lib/util/uint8array_utils.js +3 -5
  177. package/lib/util/xml_utils.js +15 -7
  178. package/package.json +61 -36
  179. package/roadmap.md +17 -17
  180. package/shaka-player.uncompiled.js +1 -0
  181. package/test/abr/simple_abr_manager_unit.js +3 -8
  182. package/test/ads/ad_manager_unit.js +0 -6
  183. package/test/cast/cast_proxy_unit.js +0 -8
  184. package/test/cast/cast_receiver_integration.js +1 -18
  185. package/test/cast/cast_receiver_unit.js +1 -9
  186. package/test/cast/cast_sender_unit.js +0 -6
  187. package/test/cast/cast_utils_unit.js +1 -13
  188. package/test/cea/cea608_memory_unit.js +0 -5
  189. package/test/cea/cea708_service_unit.js +0 -7
  190. package/test/cea/cea708_window_unit.js +0 -5
  191. package/test/cea/cea_decoder_unit.js +0 -6
  192. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  193. package/test/cea/dtvcc_packet_unit.js +0 -5
  194. package/test/cea/mp4_cea_parser_unit.js +0 -4
  195. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  196. package/test/dash/dash_parser_live_unit.js +2 -15
  197. package/test/dash/dash_parser_manifest_unit.js +2 -40
  198. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  199. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  200. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  201. package/test/dash/mpd_utils_unit.js +3 -11
  202. package/test/demo/demo_unit.js +0 -5
  203. package/test/deprecate/enforcer_unit.js +0 -4
  204. package/test/deprecate/version_unit.js +0 -2
  205. package/test/hls/hls_live_unit.js +28 -14
  206. package/test/hls/hls_parser_unit.js +2 -15
  207. package/test/hls/manifest_text_parser_unit.js +19 -10
  208. package/test/media/adaptation_set_criteria_unit.js +3 -7
  209. package/test/media/adaptation_set_unit.js +0 -2
  210. package/test/media/buffering_observer_unit.js +1 -4
  211. package/test/media/closed_caption_parser_unit.js +0 -3
  212. package/test/media/drm_engine_integration.js +2 -15
  213. package/test/media/drm_engine_unit.js +4 -24
  214. package/test/media/manifest_parser_unit.js +0 -4
  215. package/test/media/media_source_engine_integration.js +1 -7
  216. package/test/media/media_source_engine_unit.js +5 -18
  217. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  218. package/test/media/play_rate_controller_unit.js +0 -4
  219. package/test/media/playhead_unit.js +8 -16
  220. package/test/media/presentation_timeline_unit.js +4 -7
  221. package/test/media/quality_observer_unit.js +0 -4
  222. package/test/media/region_observer_unit.js +1 -6
  223. package/test/media/region_timeline_unit.js +0 -3
  224. package/test/media/segment_index_unit.js +0 -6
  225. package/test/media/segment_reference_unit.js +0 -3
  226. package/test/media/stall_detector_unit.js +0 -5
  227. package/test/media/streaming_engine_integration.js +11 -36
  228. package/test/media/streaming_engine_unit.js +11 -35
  229. package/test/media/time_ranges_utils_unit.js +0 -2
  230. package/test/media/transmuxer_integration.js +0 -6
  231. package/test/media/webm_segment_index_parser_unit.js +0 -4
  232. package/test/net/data_uri_plugin_unit.js +0 -7
  233. package/test/net/http_plugin_unit.js +0 -9
  234. package/test/net/networking_engine_unit.js +0 -11
  235. package/test/offline/download_progress_estimator_unit.js +0 -2
  236. package/test/offline/indexeddb_storage_unit.js +1 -7
  237. package/test/offline/manifest_convert_unit.js +0 -8
  238. package/test/offline/offline_integration.js +1 -10
  239. package/test/offline/offline_manifest_parser_unit.js +0 -6
  240. package/test/offline/offline_scheme_unit.js +0 -8
  241. package/test/offline/offline_uri_unit.js +0 -2
  242. package/test/offline/storage_compatibility_unit.js +2 -15
  243. package/test/offline/storage_integration.js +1 -27
  244. package/test/player_external.js +9 -11
  245. package/test/player_integration.js +28 -38
  246. package/test/player_load_graph_integration.js +1 -6
  247. package/test/player_src_equals_external.js +3 -9
  248. package/test/player_src_equals_integration.js +81 -90
  249. package/test/player_unit.js +150 -38
  250. package/test/routing/walker_unit.js +0 -8
  251. package/test/test/assets/large_file.mpd +1 -1
  252. package/test/test/boot.js +84 -22
  253. package/test/test/externs/filters.js +4 -0
  254. package/test/test/externs/jasmine.js +2 -2
  255. package/test/test/externs/karma.js +4 -0
  256. package/test/test/namespace.js +10 -0
  257. package/test/test/util/canned_idb.js +0 -8
  258. package/test/test/util/cea_utils.js +0 -6
  259. package/test/test/util/dash_parser_util.js +0 -13
  260. package/test/test/util/fake_ad.js +0 -3
  261. package/test/test/util/fake_ad_manager.js +0 -9
  262. package/test/test/util/fake_demo_main.js +0 -5
  263. package/test/test/util/fake_drm_engine.js +0 -6
  264. package/test/test/util/fake_media_source_engine.js +0 -7
  265. package/test/test/util/fake_networking_engine.js +0 -5
  266. package/test/test/util/fake_text_displayer.js +0 -5
  267. package/test/test/util/indexeddb_utils.js +1 -10
  268. package/test/test/util/jasmine_fetch.js +0 -1
  269. package/test/test/util/loader.js +0 -18
  270. package/test/test/util/manifest_generator.js +9 -14
  271. package/test/test/util/manifest_parser_util.js +0 -6
  272. package/test/test/util/offline_utils.js +0 -5
  273. package/test/test/util/simple_fakes.js +40 -28
  274. package/test/test/util/stream_generator.js +0 -14
  275. package/test/test/util/streaming_engine_util.js +0 -15
  276. package/test/test/util/test_scheme.js +1 -19
  277. package/test/test/util/ttml_utils.js +0 -2
  278. package/test/test/util/ui_utils.js +0 -9
  279. package/test/test/util/util.js +5 -19
  280. package/test/test/util/waiter.js +84 -43
  281. package/test/text/cue_integration.js +0 -4
  282. package/test/text/lrc_text_parser_unit.js +0 -4
  283. package/test/text/mp4_ttml_parser_unit.js +0 -6
  284. package/test/text/mp4_vtt_parser_unit.js +1 -7
  285. package/test/text/sbv_text_parser_unit.js +0 -4
  286. package/test/text/simple_text_displayer_unit.js +1 -8
  287. package/test/text/srt_text_parser_unit.js +0 -4
  288. package/test/text/ssa_text_parser_unit.js +0 -5
  289. package/test/text/text_engine_unit.js +2 -7
  290. package/test/text/text_track_integration.js +0 -2
  291. package/test/text/ttml_text_parser_unit.js +2 -11
  292. package/test/text/ui_text_displayer_unit.js +44 -41
  293. package/test/text/vtt_text_parser_unit.js +0 -9
  294. package/test/text/web_vtt_generator_unit.js +0 -3
  295. package/test/ui/ad_ui_unit.js +0 -11
  296. package/test/ui/localization_unit.js +0 -3
  297. package/test/ui/text_displayer_layout_unit.js +1 -12
  298. package/test/ui/ui_customization_unit.js +0 -6
  299. package/test/ui/ui_integration.js +0 -16
  300. package/test/ui/ui_unit.js +1 -17
  301. package/test/util/abortable_operation_unit.js +4 -9
  302. package/test/util/array_utils_unit.js +0 -2
  303. package/test/util/buffer_utils_unit.js +0 -2
  304. package/test/util/cmcd_manager_unit.js +0 -3
  305. package/test/util/data_view_reader_unit.js +0 -4
  306. package/test/util/ebml_parser_unit.js +0 -4
  307. package/test/util/event_manager_unit.js +0 -3
  308. package/test/util/fake_event_target_unit.js +0 -5
  309. package/test/util/functional_unit.js +1 -1
  310. package/test/util/iterables_unit.js +0 -64
  311. package/test/util/language_utils_unit.js +0 -3
  312. package/test/util/manifest_parser_utils_unit.js +0 -2
  313. package/test/util/mime_utils_unit.js +54 -0
  314. package/test/util/mp4_box_parsers_unit.js +0 -5
  315. package/test/util/mp4_parser_unit.js +0 -4
  316. package/test/util/multi_map_unit.js +0 -3
  317. package/test/util/object_utils_unit.js +0 -2
  318. package/test/util/periods_unit.js +93 -7
  319. package/test/util/pssh_unit.js +0 -5
  320. package/test/util/state_history_unit.js +0 -2
  321. package/test/util/stream_utils_unit.js +3 -8
  322. package/test/util/string_utils_unit.js +0 -6
  323. package/test/util/text_parser_unit.js +0 -2
  324. package/test/util/xml_utils_unit.js +0 -4
  325. package/ui/less/ad_controls.less +6 -6
  326. package/ui/less/buttons.less +6 -6
  327. package/ui/less/containers.less +13 -15
  328. package/ui/less/overflow_menu.less +4 -4
  329. package/ui/less/range_elements.less +7 -2
  330. package/ui/less/tooltip.less +4 -4
  331. package/ui/locales/sjn-translations.yaml +257 -0
  332. package/ui/locales/sjn.json +42 -0
  333. package/ui/seek_bar.js +2 -1
  334. package/.github/workflows/build_and_test.yaml +0 -73
  335. package/.github/workflows/release.yaml +0 -53
  336. package/docs/tutorials/gsoc-ideas-list.md +0 -3
  337. package/externs/svgelement.js +0 -18
  338. package/externs/webcrypto.js +0 -18
  339. package/lib/util/mutex.js +0 -52
@@ -0,0 +1,46 @@
1
+ /*! @license
2
+ * Shaka Player
3
+ * Copyright 2016 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ goog.provide('shaka.polyfill.Symbol');
7
+
8
+ goog.require('shaka.log');
9
+ goog.require('shaka.polyfill');
10
+
11
+ /**
12
+ * @summary A polyfill to provide Symbol.prototype.description in all browsers.
13
+ * See: https://caniuse.com/mdn-javascript_builtins_symbol_description
14
+ * @export
15
+ */
16
+ shaka.polyfill.Symbol = class {
17
+ /**
18
+ * Install the polyfill if needed.
19
+ * @export
20
+ */
21
+ static install() {
22
+ shaka.log.debug('Symbol.install');
23
+
24
+ // eslint-disable-next-line no-restricted-syntax
25
+ const proto = Symbol.prototype;
26
+
27
+ if (!('description' in proto)) {
28
+ Object.defineProperty(proto, 'description', {
29
+ get: shaka.polyfill.Symbol.getSymbolDescription_,
30
+ });
31
+ }
32
+ }
33
+
34
+ /**
35
+ * @this {Symbol}
36
+ * @return {(string|undefined)}
37
+ * @private
38
+ */
39
+ static getSymbolDescription_() {
40
+ const m = /\((.*)\)/.exec(this.toString());
41
+ return m ? m[1] : undefined;
42
+ }
43
+ };
44
+
45
+
46
+ shaka.polyfill.register(shaka.polyfill.Symbol.install);
package/lib/text/cue.js CHANGED
@@ -294,7 +294,7 @@ shaka.text.Cue = class {
294
294
  // Compare the start time, end time and payload of the cues first for
295
295
  // performance optimization. We can avoid the more expensive recursive
296
296
  // checks if the top-level properties don't match.
297
- // See: https://github.com/google/shaka-player/issues/3018
297
+ // See: https://github.com/shaka-project/shaka-player/issues/3018
298
298
  if (cue1.startTime != cue2.startTime || cue1.endTime != cue2.endTime ||
299
299
  cue1.payload != cue2.payload) {
300
300
  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_
@@ -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_(
@@ -558,7 +560,7 @@ shaka.text.TtmlTextParser = class {
558
560
  // Background color should not be set on a container. If this is a nested
559
561
  // cue, you can set the background. If it's a top-level that happens to
560
562
  // also be a leaf, you can set the background.
561
- // See https://github.com/google/shaka-player/issues/2623
563
+ // See https://github.com/shaka-project/shaka-player/issues/2623
562
564
  // This used to be handled in the displayer, but that is confusing. The Cue
563
565
  // structure should reflect what you want to happen in the displayer, and
564
566
  // the displayer shouldn't have to know about TTML.
@@ -942,8 +944,9 @@ shaka.text.TtmlTextParser = class {
942
944
  let ret = null;
943
945
  const XmlUtils = shaka.util.XmlUtils;
944
946
  while (element) {
945
- ret = nsName ? XmlUtils.getAttributeNS(element, nsName, attributeName)
946
- : element.getAttribute(attributeName);
947
+ ret = nsName ?
948
+ XmlUtils.getAttributeNS(element, nsName, attributeName) :
949
+ element.getAttribute(attributeName);
947
950
  if (ret) {
948
951
  break;
949
952
  }
@@ -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
@@ -6,8 +6,6 @@
6
6
 
7
7
  goog.provide('shaka.util.BufferUtils');
8
8
 
9
- goog.require('shaka.util.Iterables');
10
-
11
9
 
12
10
  /**
13
11
  * @summary A set of BufferSource utility functions.
@@ -45,7 +43,7 @@ shaka.util.BufferUtils = class {
45
43
 
46
44
  const uint8A = shaka.util.BufferUtils.toUint8(arr1);
47
45
  const uint8B = shaka.util.BufferUtils.toUint8(arr2);
48
- for (const i of shaka.util.Iterables.range(arr1.byteLength)) {
46
+ for (let i = 0; i < arr1.byteLength; i++) {
49
47
  if (uint8A[i] != uint8B[i]) {
50
48
  return false;
51
49
  }
@@ -127,4 +127,29 @@ shaka.util.ConfigUtils = class {
127
127
  last[fieldName.substring(nameStart).replace(/\\\./g, '.')] = value;
128
128
  return configObject;
129
129
  }
130
+
131
+ /**
132
+ * Reference the input parameters so the compiler doesn't remove them from
133
+ * the calling function. Return whatever value is specified.
134
+ *
135
+ * This allows an empty or default implementation of a config callback that
136
+ * still bears the complete function signature even in compiled mode.
137
+ *
138
+ * The caller should look something like this:
139
+ *
140
+ * const callback = (a, b, c, d) => {
141
+ * return referenceParametersAndReturn(
142
+ [a, b, c, d],
143
+ a); // Can be anything, doesn't need to be one of the parameters
144
+ * };
145
+ *
146
+ * @param {!Array.<?>} parameters
147
+ * @param {T} returnValue
148
+ * @return {T}
149
+ * @template T
150
+ * @noinline
151
+ */
152
+ static referenceParametersAndReturn(parameters, returnValue) {
153
+ return parameters && returnValue;
154
+ }
130
155
  };
@@ -11,7 +11,6 @@ goog.require('goog.asserts');
11
11
  goog.require('shaka.util.BufferUtils');
12
12
  goog.require('shaka.util.DataViewReader');
13
13
  goog.require('shaka.util.Error');
14
- goog.require('shaka.util.Iterables');
15
14
 
16
15
 
17
16
  /**
@@ -157,7 +156,8 @@ shaka.util.EbmlParser = class {
157
156
  }
158
157
 
159
158
  let value = 0;
160
- for (const {item, i} of shaka.util.Iterables.enumerate(vint)) {
159
+ for (let i = 0; i < vint.length; i++) {
160
+ const item = vint[i];
161
161
  if (i == 0) {
162
162
  // Mask out the first few bits of |vint|'s first byte to get the most
163
163
  // significant bits of |vint|'s value. If |vint| is 8 bytes wide then
@@ -267,7 +267,7 @@ shaka.util.EbmlElement = class {
267
267
 
268
268
  let value = 0;
269
269
 
270
- for (const i of shaka.util.Iterables.range(this.dataView_.byteLength)) {
270
+ for (let i = 0; i < this.dataView_.byteLength; i++) {
271
271
  const chunk = this.dataView_.getUint8(i);
272
272
  value = (256 * value) + chunk;
273
273
  }
package/lib/util/error.js CHANGED
@@ -345,6 +345,13 @@ shaka.util.Error.Code = {
345
345
  */
346
346
  'MISSING_TEXT_PLUGIN': 2014,
347
347
 
348
+ /**
349
+ * The chapters track failed to load. The browser does not provide any
350
+ * information in this case to identify why it failed, but there may be
351
+ * details in the JavaScript console.
352
+ */
353
+ 'CHAPTERS_TRACK_FAILED': 2015,
354
+
348
355
  /**
349
356
  * Some component tried to read past the end of a buffer. The segment index,
350
357
  * init segment, or PSSH may be malformed.
@@ -467,7 +474,7 @@ shaka.util.Error.Code = {
467
474
  * Content transformations required by the platform could not be performed for
468
475
  * some reason (unsupported container, etc.)
469
476
  *
470
- * @see https://github.com/google/shaka-player/issues/2759
477
+ * @see https://github.com/shaka-project/shaka-player/issues/2759
471
478
  */
472
479
  'CONTENT_TRANSFORMATION_FAILED': 3019,
473
480
 
@@ -75,50 +75,4 @@ shaka.util.Iterables = class {
75
75
  }
76
76
  return out;
77
77
  }
78
-
79
- /**
80
- * Returns an iterable that contains numbers in the range [0, end).
81
- *
82
- * @param {number} end The exclusive end of the list.
83
- * @return {!Iterable.<number>}
84
- */
85
- static* range(end) {
86
- for (let i = 0; i < end; i++) {
87
- yield i;
88
- }
89
- }
90
-
91
- /**
92
- * Iterates over an iterable object and includes additional info about each
93
- * item:
94
- * - The zero-based index of the element.
95
- * - The next item in the list, if it exists.
96
- * - The previous item in the list, if it exists.
97
- *
98
- * @param {!Iterable.<T>} iterable
99
- * @return {!Iterable.<
100
- * {i: number, item: T, prev: (T|undefined), next: (T|undefined)}>}
101
- * @template T
102
- */
103
- static* enumerate(iterable) {
104
- // Since we want the "next" item, we need to skip the first item and return
105
- // elements one in the past. So as we iterate, we are getting the "next"
106
- // element and yielding the one from the previous iteration.
107
- let i = -1;
108
- let prev = undefined;
109
- let item = undefined;
110
- for (const next of iterable) {
111
- if (i >= 0) {
112
- yield {i, item, prev, next};
113
- }
114
- i++;
115
- prev = item;
116
- item = next;
117
- }
118
- if (i != -1) {
119
- // If it's still -1, there were no items. Otherwise we need to yield
120
- // the last item.
121
- yield {i, prev, item, next: undefined};
122
- }
123
- }
124
78
  };
@@ -167,7 +167,7 @@ shaka.util.ManifestParserUtils.VIDEO_CODEC_REGEXPS_ = [
167
167
  /^hev/,
168
168
  /^hvc/,
169
169
  /^vp0?[89]/,
170
- /^av1$/,
170
+ /^av01/,
171
171
  ];
172
172
 
173
173
 
@@ -94,6 +94,53 @@ shaka.util.MimeUtils = class {
94
94
  return codecs.split(',');
95
95
  }
96
96
 
97
+ /**
98
+ * Get the normalized codec from a codec string,
99
+ * independently of their container.
100
+ *
101
+ * @param {string} codecString
102
+ * @return {string}
103
+ */
104
+ static getNormalizedCodec(codecString) {
105
+ const parts =
106
+ shaka.util.MimeUtils.getCodecParts_(codecString);
107
+ const base = parts[0];
108
+ const profile = parts[1].toLowerCase();
109
+ switch (true) {
110
+ case base === 'mp4a' && profile === '69':
111
+ case base === 'mp4a' && profile === '6b':
112
+ return 'mp3';
113
+ case base === 'mp4a' && profile === '66':
114
+ case base === 'mp4a' && profile === '67':
115
+ case base === 'mp4a' && profile === '68':
116
+ case base === 'mp4a' && profile === '40.2':
117
+ case base === 'mp4a' && profile === '40.02':
118
+ case base === 'mp4a' && profile === '40.5':
119
+ case base === 'mp4a' && profile === '40.05':
120
+ case base === 'mp4a' && profile === '40.29':
121
+ case base === 'mp4a' && profile === '40.42': // Extended HE-AAC
122
+ return 'aac';
123
+ case base === 'mp4a' && profile === 'a5':
124
+ return 'ac-3'; // Dolby Digital
125
+ case base === 'mp4a' && profile === 'a6':
126
+ return 'ec-3'; // Dolby Digital Plus
127
+ case base === 'mp4a' && profile === 'b2':
128
+ return 'dtsx'; // DTS:X
129
+ case base === 'mp4a' && profile === 'a9':
130
+ return 'dtsc'; // DTS Digital Surround
131
+ case base === 'avc1':
132
+ case base === 'avc3':
133
+ return 'avc'; // H264
134
+ case base === 'hvc1':
135
+ case base === 'hev1':
136
+ return 'hevc'; // H265
137
+ case base === 'dvh1':
138
+ case base === 'dvhe':
139
+ return 'dovi'; // Dolby Vision
140
+ }
141
+ return base;
142
+ }
143
+
97
144
  /**
98
145
  * Get the base codec from a codec string.
99
146
  *
@@ -150,7 +197,7 @@ shaka.util.MimeUtils = class {
150
197
 
151
198
  const base = parts[0];
152
199
 
153
- parts.pop();
200
+ parts.shift();
154
201
  const profile = parts.join('.');
155
202
 
156
203
  // Make sure that we always return a "base" and "profile".
@@ -7,8 +7,6 @@
7
7
  goog.provide('shaka.util.Mp4BoxParsers');
8
8
 
9
9
  goog.require('shaka.util.DataViewReader');
10
- goog.require('shaka.util.Functional');
11
- goog.require('shaka.util.Iterables');
12
10
 
13
11
  shaka.util.Mp4BoxParsers = class {
14
12
  /**
@@ -125,8 +123,7 @@ shaka.util.Mp4BoxParsers = class {
125
123
  reader.skip(4);
126
124
  }
127
125
 
128
- for (const _ of shaka.util.Iterables.range(sampleCount)) {
129
- shaka.util.Functional.ignored(_);
126
+ for (let i = 0; i < sampleCount; i++) {
130
127
  /** @type {shaka.util.ParsedTRUNSample} */
131
128
  const sample = {
132
129
  sampleDuration: null,
@@ -9,8 +9,6 @@ goog.provide('shaka.util.Mp4Parser');
9
9
  goog.require('goog.asserts');
10
10
  goog.require('shaka.log');
11
11
  goog.require('shaka.util.DataViewReader');
12
- goog.require('shaka.util.Functional');
13
- goog.require('shaka.util.Iterables');
14
12
 
15
13
 
16
14
  /**
@@ -229,8 +227,7 @@ shaka.util.Mp4Parser = class {
229
227
  // start position. The header size varies.
230
228
  const headerSize = shaka.util.Mp4Parser.headerSize(box);
231
229
  const count = box.reader.readUint32();
232
- for (const _ of shaka.util.Iterables.range(count)) {
233
- shaka.util.Functional.ignored(_);
230
+ for (let i = 0; i < count; i++) {
234
231
  box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);
235
232
  if (box.parser.done_) {
236
233
  break;
@@ -302,9 +299,10 @@ shaka.util.Mp4Parser = class {
302
299
  * @export
303
300
  */
304
301
  static headerSize(box) {
305
- return /* basic header */ 8
306
- + /* additional 64-bit size field */ (box.has64BitSize ? 8 : 0)
307
- + /* version and flags for a "full" box */ (box.flags != null ? 4 : 0);
302
+ const basicHeaderSize = 8;
303
+ const _64BitFieldSize = box.has64BitSize ? 8 : 0;
304
+ const versionAndFlagsSize = box.flags != null ? 4 : 0;
305
+ return basicHeaderSize + _64BitFieldSize + versionAndFlagsSize;
308
306
  }
309
307
  };
310
308
 
@@ -14,7 +14,6 @@ goog.require('shaka.media.SegmentIndex');
14
14
  goog.require('shaka.util.ArrayUtils');
15
15
  goog.require('shaka.util.Error');
16
16
  goog.require('shaka.util.IReleasable');
17
- goog.require('shaka.util.Iterables');
18
17
  goog.require('shaka.util.LanguageUtils');
19
18
  goog.require('shaka.util.ManifestParserUtils');
20
19
  goog.require('shaka.util.MapUtils');
@@ -98,7 +97,6 @@ shaka.util.PeriodCombiner = class {
98
97
  */
99
98
  async combinePeriods(periods, isDynamic) {
100
99
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
101
- const Iterables = shaka.util.Iterables;
102
100
 
103
101
  shaka.util.PeriodCombiner.filterOutAudioStreamDuplicates_(periods);
104
102
  shaka.util.PeriodCombiner.filterOutVideoStreamDuplicates_(periods);
@@ -118,7 +116,8 @@ shaka.util.PeriodCombiner = class {
118
116
  // Find the first period we haven't seen before. Tag all the periods we
119
117
  // see now as "used".
120
118
  let firstNewPeriodIndex = -1;
121
- for (const {i, item: period} of Iterables.enumerate(periods)) {
119
+ for (let i = 0; i < periods.length; i++) {
120
+ const period = periods[i];
122
121
  if (this.usedPeriodIds_.has(period.id)) {
123
122
  // This isn't new.
124
123
  } else {
@@ -301,6 +300,7 @@ shaka.util.PeriodCombiner = class {
301
300
  t1.label == t2.label &&
302
301
  t1.codecs == t2.codecs &&
303
302
  t1.mimeType == t2.mimeType &&
303
+ t1.bandwidth == t2.bandwidth &&
304
304
  ArrayUtils.hasSameElements(t1.roles, t2.roles)) {
305
305
  duplicate = true;
306
306
  }
@@ -510,13 +510,12 @@ shaka.util.PeriodCombiner = class {
510
510
  static async combine_(
511
511
  outputStreams, streamsPerPeriod, firstNewPeriodIndex, clone, concat) {
512
512
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
513
- const Iterables = shaka.util.Iterables;
514
513
 
515
514
  const unusedStreamsPerPeriod = [];
516
- for (const {i, item: streams} of Iterables.enumerate(streamsPerPeriod)) {
515
+ for (let i = 0; i < streamsPerPeriod.length; i++) {
517
516
  if (i >= firstNewPeriodIndex) {
518
517
  // This periods streams are all new.
519
- unusedStreamsPerPeriod.push(new Set(streams));
518
+ unusedStreamsPerPeriod.push(new Set(streamsPerPeriod[i]));
520
519
  } else {
521
520
  // This period's streams have all been used already.
522
521
  unusedStreamsPerPeriod.push(new Set());
@@ -574,8 +573,8 @@ shaka.util.PeriodCombiner = class {
574
573
  // TODO(#1528): Consider changing this when we support codec switching.
575
574
  const hasCodec = outputStreams.some((s) => {
576
575
  return s.mimeType == stream.mimeType &&
577
- shaka.util.MimeUtils.getCodecBase(s.codecs) ==
578
- shaka.util.MimeUtils.getCodecBase(stream.codecs);
576
+ shaka.util.MimeUtils.getNormalizedCodec(s.codecs) ==
577
+ shaka.util.MimeUtils.getNormalizedCodec(stream.codecs);
579
578
  });
580
579
  if (!hasCodec) {
581
580
  continue;
@@ -668,12 +667,12 @@ shaka.util.PeriodCombiner = class {
668
667
 
669
668
  // Concatenate the new matches onto the stream, starting at the first new
670
669
  // period.
671
- const Iterables = shaka.util.Iterables;
672
670
  // Satisfy the compiler about the type.
673
671
  // Also checks if the segmentIndex is still valid after the async
674
672
  // operations, to make sure we stop if the active stream has changed.
675
673
  if (outputStream.segmentIndex instanceof shaka.media.MetaSegmentIndex) {
676
- for (const {i, item: match} of Iterables.enumerate(streams)) {
674
+ for (let i = 0; i < streams.length; i++) {
675
+ const match = streams[i];
677
676
  if (match.segmentIndex && i >= firstNewPeriodIndex) {
678
677
  goog.asserts.assert(match.segmentIndex,
679
678
  'stream should have a segmentIndex.');
@@ -768,9 +767,9 @@ shaka.util.PeriodCombiner = class {
768
767
 
769
768
  // Concatenate the new matches onto the stream, starting at the first new
770
769
  // period.
771
- const Iterables = shaka.util.Iterables;
772
- for (const {i, item: match} of Iterables.enumerate(matches)) {
770
+ for (let i = 0; i < matches.length; i++) {
773
771
  if (i >= firstNewPeriodIndex) {
772
+ const match = matches[i];
774
773
  concat(outputStream, match);
775
774
 
776
775
  // We only consider an audio stream "used" if its language is related to
@@ -1051,10 +1050,11 @@ shaka.util.PeriodCombiner = class {
1051
1050
  * @private
1052
1051
  */
1053
1052
  static areAVStreamsCompatible_(outputStream, candidate) {
1054
- const getCodecBase = (codecs) => shaka.util.MimeUtils.getCodecBase(codecs);
1053
+ const getCodec = (codecs) =>
1054
+ shaka.util.MimeUtils.getNormalizedCodec(codecs);
1055
1055
  // Check MIME type and codecs, which should always be the same.
1056
1056
  if (candidate.mimeType != outputStream.mimeType ||
1057
- getCodecBase(candidate.codecs) != getCodecBase(outputStream.codecs)) {
1057
+ getCodec(candidate.codecs) != getCodec(outputStream.codecs)) {
1058
1058
  return false;
1059
1059
  }
1060
1060
 
@@ -1210,7 +1210,7 @@ shaka.util.PeriodCombiner = class {
1210
1210
  // [r1, r2, r3, r4].
1211
1211
  // If we match stream1 with stream3 due to the same role overlap,
1212
1212
  // stream2 is likely to be left unmatched and error out later.
1213
- // See https://github.com/google/shaka-player/issues/2542 for
1213
+ // See https://github.com/shaka-project/shaka-player/issues/2542 for
1214
1214
  // more details.
1215
1215
  return candidate.roles.length < best.roles.length;
1216
1216
  }
@@ -174,8 +174,8 @@ shaka.util.Platform = class {
174
174
  * @return {boolean}
175
175
  */
176
176
  static isApple() {
177
- return !!navigator.vendor && navigator.vendor.includes('Apple')
178
- && !shaka.util.Platform.isTizen();
177
+ return !!navigator.vendor && navigator.vendor.includes('Apple') &&
178
+ !shaka.util.Platform.isTizen();
179
179
  }
180
180
 
181
181
  /**
@@ -312,7 +312,7 @@ shaka.util.Platform = class {
312
312
  * initialization segments.
313
313
  *
314
314
  * @return {boolean}
315
- * @see https://github.com/google/shaka-player/issues/2759
315
+ * @see https://github.com/shaka-project/shaka-player/issues/2759
316
316
  */
317
317
  static requiresEncryptionInfoInAllInitSegments() {
318
318
  const Platform = shaka.util.Platform;
@@ -17,14 +17,6 @@ goog.require('shaka.util.ManifestParserUtils');
17
17
  goog.require('shaka.util.Platform');
18
18
 
19
19
 
20
- // TODO(vaage): Many times in our configs, we need to create an empty
21
- // implementation of a method, but to avoid closure from removing unused
22
- // parameters (and breaking our merge config code) we need to use each
23
- // parameter. Is there a better solution to this problem than what we are
24
- // doing now?
25
- //
26
- // NOTE: Chrome App Content Security Policy prohibits usage of new Function()
27
-
28
20
  /**
29
21
  * @final
30
22
  * @export
@@ -109,11 +101,10 @@ shaka.util.PlayerConfiguration = class {
109
101
  'urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb':
110
102
  'com.adobe.primetime',
111
103
  },
112
- // Need some operation in the callback or else closure may remove calls
113
- // to the function as it would be a no-op. The operation can't just be
114
- // a log message, because those are stripped in the compiled build.
115
104
  manifestPreprocessor: (element) => {
116
- return element;
105
+ return shaka.util.ConfigUtils.referenceParametersAndReturn(
106
+ [element],
107
+ element);
117
108
  },
118
109
  },
119
110
  hls: {
@@ -132,7 +123,9 @@ shaka.util.PlayerConfiguration = class {
132
123
  // log message, because those are stripped in the compiled build.
133
124
  failureCallback: (error) => {
134
125
  shaka.log.error('Unhandled streaming error', error);
135
- return [error];
126
+ return shaka.util.ConfigUtils.referenceParametersAndReturn(
127
+ [error],
128
+ undefined);
136
129
  },
137
130
  // When low latency streaming is enabled, rebufferingGoal will default to
138
131
  // 0.01 if not specified.
@@ -210,7 +203,9 @@ shaka.util.PlayerConfiguration = class {
210
203
  // to the function as it would be a no-op. The operation can't just be a
211
204
  // log message, because those are stripped in the compiled build.
212
205
  progressCallback: (content, progress) => {
213
- return [content, progress];
206
+ return shaka.util.ConfigUtils.referenceParametersAndReturn(
207
+ [content, progress],
208
+ undefined);
214
209
  },
215
210
 
216
211
  // By default we use persistent licenses as forces errors to surface if
package/lib/util/pssh.js CHANGED
@@ -9,8 +9,6 @@ goog.provide('shaka.util.Pssh');
9
9
  goog.require('goog.asserts');
10
10
  goog.require('shaka.log');
11
11
  goog.require('shaka.util.BufferUtils');
12
- goog.require('shaka.util.Functional');
13
- goog.require('shaka.util.Iterables');
14
12
  goog.require('shaka.util.Mp4Parser');
15
13
  goog.require('shaka.util.Uint8ArrayUtils');
16
14
 
@@ -83,8 +81,7 @@ shaka.util.Pssh = class {
83
81
  shaka.util.Uint8ArrayUtils.toHex(box.reader.readBytes(16)));
84
82
  if (box.version > 0) {
85
83
  const numKeyIds = box.reader.readUint32();
86
- for (const _ of shaka.util.Iterables.range(numKeyIds)) {
87
- shaka.util.Functional.ignored(_);
84
+ for (let i = 0; i < numKeyIds; i++) {
88
85
  const keyId =
89
86
  shaka.util.Uint8ArrayUtils.toHex(box.reader.readBytes(16));
90
87
  this.cencKeyIds.push(keyId);
@@ -283,12 +283,14 @@ shaka.util.StreamUtils = class {
283
283
  // both be considered the same codec: avc1.42c01e, avc1.4d401f
284
284
  let baseVideoCodec = '';
285
285
  if (variant.video) {
286
- baseVideoCodec = shaka.util.MimeUtils.getCodecBase(variant.video.codecs);
286
+ baseVideoCodec =
287
+ shaka.util.MimeUtils.getNormalizedCodec(variant.video.codecs);
287
288
  }
288
289
 
289
290
  let baseAudioCodec = '';
290
291
  if (variant.audio) {
291
- baseAudioCodec = shaka.util.MimeUtils.getCodecBase(variant.audio.codecs);
292
+ baseAudioCodec =
293
+ shaka.util.MimeUtils.getNormalizedCodec(variant.audio.codecs);
292
294
  }
293
295
 
294
296
  return baseVideoCodec + '-' + baseAudioCodec;
@@ -425,7 +427,7 @@ shaka.util.StreamUtils = class {
425
427
  await shaka.util.StreamUtils.getDecodingInfosForVariants(
426
428
  manifest.variants, usePersistentLicenses, /* srcEquals= */ false);
427
429
  manifest.variants = manifest.variants.filter((variant) => {
428
- // See: https://github.com/google/shaka-player/issues/3860
430
+ // See: https://github.com/shaka-project/shaka-player/issues/3860
429
431
  const video = variant.video;
430
432
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
431
433
  if (video) {
@@ -461,7 +463,7 @@ shaka.util.StreamUtils = class {
461
463
  }
462
464
  }
463
465
 
464
- // See: https://github.com/google/shaka-player/issues/3380
466
+ // See: https://github.com/shaka-project/shaka-player/issues/3380
465
467
  if (shaka.util.Platform.isXboxOne() && video &&
466
468
  ((video.width && video.width > 1920) ||
467
469
  (video.height && video.height > 1080)) &&
@@ -720,7 +722,8 @@ shaka.util.StreamUtils = class {
720
722
  static getCorrectAudioCodecs_(codecs) {
721
723
  // Some Tizen devices seem to misreport AC-3 support, but correctly
722
724
  // report EC-3 support. So query EC-3 as a fallback for AC-3.
723
- // See https://github.com/google/shaka-player/issues/2989 for details.
725
+ // See https://github.com/shaka-project/shaka-player/issues/2989 for
726
+ // details.
724
727
  if (shaka.util.Platform.isTizen()) {
725
728
  return codecs.toLowerCase() == 'ac-3' ? 'ec-3' : codecs;
726
729
  } else {
@@ -10,7 +10,6 @@ goog.require('goog.asserts');
10
10
  goog.require('shaka.log');
11
11
  goog.require('shaka.util.BufferUtils');
12
12
  goog.require('shaka.util.Error');
13
- goog.require('shaka.util.Iterables');
14
13
  goog.require('shaka.util.Lazy');
15
14
 
16
15
 
@@ -81,7 +80,7 @@ shaka.util.StringUtils = class {
81
80
  const length = Math.floor(data.byteLength / 2);
82
81
  const arr = new Uint16Array(length);
83
82
  const dataView = shaka.util.BufferUtils.toDataView(data);
84
- for (const i of shaka.util.Iterables.range(length)) {
83
+ for (let i = 0; i < length; i++) {
85
84
  arr[i] = dataView.getUint16(i * 2, littleEndian);
86
85
  }
87
86
  return shaka.util.StringUtils.fromCharCode(arr);
@@ -158,9 +157,8 @@ shaka.util.StringUtils = class {
158
157
  static toUTF16(str, littleEndian) {
159
158
  const result = new ArrayBuffer(str.length * 2);
160
159
  const view = new DataView(result);
161
- const enumerate = (it) => shaka.util.Iterables.enumerate(it);
162
- for (const {i, item} of enumerate(str)) {
163
- const value = item.charCodeAt(0);
160
+ for (let i = 0; i < str.length; ++i) {
161
+ const value = str.charCodeAt(i);
164
162
  view.setUint16(/* position= */ i * 2, value, littleEndian);
165
163
  }
166
164
  return result;