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
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.Iterables');
8
-
9
7
  describe('Iterables', () => {
10
8
  const Iterables = shaka.util.Iterables;
11
9
 
@@ -67,66 +65,4 @@ describe('Iterables', () => {
67
65
  expect(Iterables.filter(input, (x) => x < 0)).toEqual([]);
68
66
  });
69
67
  });
70
-
71
- describe('enumerate', () => {
72
- function enumerate(it) {
73
- return Array.from(Iterables.enumerate(it));
74
- }
75
-
76
- it('works with no items', () => {
77
- expect(enumerate([])).toEqual([]);
78
- });
79
-
80
- it('works with one item', () => {
81
- expect(enumerate([999]))
82
- .toEqual([{i: 0, item: 999, prev: undefined, next: undefined}]);
83
- });
84
-
85
- it('works with special values', () => {
86
- expect(enumerate([[]]))
87
- .toEqual([{i: 0, item: [], prev: undefined, next: undefined}]);
88
- expect(enumerate([0]))
89
- .toEqual([{i: 0, item: 0, prev: undefined, next: undefined}]);
90
- expect(enumerate([null]))
91
- .toEqual([{i: 0, item: null, prev: undefined, next: undefined}]);
92
- expect(enumerate([undefined]))
93
- .toEqual([{i: 0, item: undefined, prev: undefined, next: undefined}]);
94
- });
95
-
96
- it('works with two items', () => {
97
- expect(enumerate([888, 999]))
98
- .toEqual([
99
- {i: 0, item: 888, prev: undefined, next: 999},
100
- {i: 1, item: 999, prev: 888, next: undefined},
101
- ]);
102
- });
103
-
104
- it('works with three items', () => {
105
- expect(enumerate([777, 888, 999]))
106
- .toEqual([
107
- {i: 0, item: 777, prev: undefined, next: 888},
108
- {i: 1, item: 888, prev: 777, next: 999},
109
- {i: 2, item: 999, prev: 888, next: undefined},
110
- ]);
111
- });
112
-
113
- it('keeps references', () => {
114
- const expected = [
115
- {a: 'x'},
116
- {b: 'y'},
117
- {c: 'z'},
118
- ];
119
- const actual = enumerate(expected);
120
-
121
- expect(actual[0].item).toBe(expected[0]);
122
- expect(actual[0].next).toBe(expected[1]);
123
-
124
- expect(actual[1].prev).toBe(expected[0]);
125
- expect(actual[1].item).toBe(expected[1]);
126
- expect(actual[1].next).toBe(expected[2]);
127
-
128
- expect(actual[2].prev).toBe(expected[1]);
129
- expect(actual[2].item).toBe(expected[2]);
130
- });
131
- });
132
68
  });
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.LanguageUtils');
8
- goog.require('shaka.util.ManifestParserUtils');
9
-
10
7
  describe('LanguageUtils', () => {
11
8
  const LanguageUtils = shaka.util.LanguageUtils;
12
9
 
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.ManifestParserUtils');
8
-
9
7
  describe('ManifestParserUtils', () => {
10
8
  const ManifestParserUtils = shaka.util.ManifestParserUtils;
11
9
 
@@ -0,0 +1,54 @@
1
+ /*! @license
2
+ * Shaka Player
3
+ * Copyright 2016 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ describe('MimeUtils', () => {
8
+ const getNormalizedCodec = (codecs) =>
9
+ shaka.util.MimeUtils.getNormalizedCodec(codecs);
10
+
11
+ it('normalizes codecs', () => {
12
+ expect(getNormalizedCodec('mp4a.66')).toBe('aac');
13
+ expect(getNormalizedCodec('mp4a.67')).toBe('aac');
14
+ expect(getNormalizedCodec('mp4a.68')).toBe('aac');
15
+
16
+ expect(getNormalizedCodec('mp3')).toBe('mp3');
17
+ expect(getNormalizedCodec('mp4a.69')).toBe('mp3');
18
+ expect(getNormalizedCodec('mp4a.6B')).toBe('mp3');
19
+ expect(getNormalizedCodec('mp4a.6b')).toBe('mp3');
20
+
21
+ expect(getNormalizedCodec('mp4a.40.2')).toBe('aac');
22
+ expect(getNormalizedCodec('mp4a.40.02')).toBe('aac');
23
+ expect(getNormalizedCodec('mp4a.40.5')).toBe('aac');
24
+ expect(getNormalizedCodec('mp4a.40.05')).toBe('aac');
25
+ expect(getNormalizedCodec('mp4a.40.29')).toBe('aac');
26
+ expect(getNormalizedCodec('mp4a.40.42')).toBe('aac');
27
+
28
+ expect(getNormalizedCodec('ac-3')).toBe('ac-3');
29
+ expect(getNormalizedCodec('mp4a.a5')).toBe('ac-3');
30
+ expect(getNormalizedCodec('mp4a.A5')).toBe('ac-3');
31
+
32
+ expect(getNormalizedCodec('ec-3')).toBe('ec-3');
33
+ expect(getNormalizedCodec('mp4a.a6')).toBe('ec-3');
34
+ expect(getNormalizedCodec('mp4a.A6')).toBe('ec-3');
35
+
36
+ expect(getNormalizedCodec('dtsc')).toBe('dtsc');
37
+ expect(getNormalizedCodec('mp4a.a9')).toBe('dtsc');
38
+
39
+ expect(getNormalizedCodec('dtsx')).toBe('dtsx');
40
+ expect(getNormalizedCodec('mp4a.b2')).toBe('dtsx');
41
+
42
+ expect(getNormalizedCodec('vp8')).toBe('vp8');
43
+ expect(getNormalizedCodec('vp8.0')).toBe('vp8');
44
+
45
+ expect(getNormalizedCodec('avc1')).toBe('avc');
46
+ expect(getNormalizedCodec('avc3')).toBe('avc');
47
+
48
+ expect(getNormalizedCodec('hvc1')).toBe('hevc');
49
+ expect(getNormalizedCodec('hev1')).toBe('hevc');
50
+
51
+ expect(getNormalizedCodec('dvh1.05')).toBe('dovi');
52
+ expect(getNormalizedCodec('dvhe.05')).toBe('dovi');
53
+ });
54
+ });
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.test.Util');
9
- goog.require('shaka.util.Mp4BoxParsers');
10
- goog.require('shaka.util.Mp4Parser');
11
-
12
7
  describe('Mp4BoxParsers', () => {
13
8
  const videoInitSegmentUri = '/base/test/test/assets/sintel-video-init.mp4';
14
9
  const videoSegmentUri = '/base/test/test/assets/sintel-video-segment.mp4';
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.util.Error');
9
- goog.require('shaka.util.Mp4Parser');
10
-
11
7
  describe('Mp4Parser', () => {
12
8
  const Util = shaka.test.Util;
13
9
 
@@ -4,9 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.util.MultiMap');
9
-
10
7
  describe('MultiMap', () => {
11
8
  /** @type {shaka.util.MultiMap<number>} */
12
9
  let map;
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.ObjectUtils');
8
-
9
7
  describe('ObjectUtils', () => {
10
8
  const ObjectUtils = shaka.util.ObjectUtils;
11
9
 
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.ManifestGenerator');
8
- goog.require('shaka.util.ManifestParserUtils');
9
- goog.require('shaka.util.PeriodCombiner');
10
-
11
7
  describe('PeriodCombiner', () => {
12
8
  // These test cases don't really read well as "it" statements. Phrasing them
13
9
  // that way would make the names very long, so here we break with that
@@ -477,7 +473,7 @@ describe('PeriodCombiner', () => {
477
473
  a3.originalId = 'a3';
478
474
  a3.bandwidth = 97065;
479
475
  a3.roles = ['role1', 'role2'];
480
- a2.codecs = 'mp4a.40.2';
476
+ a3.codecs = 'mp4a.40.2';
481
477
 
482
478
  // a4 has a different label from a3, and should not
483
479
  // be filtered out.
@@ -500,14 +496,24 @@ describe('PeriodCombiner', () => {
500
496
  const t1 = makeTextStream('en');
501
497
  t1.originalId = 't1';
502
498
  t1.roles = ['role1'];
499
+ t1.bandwidth = 1158;
503
500
 
504
501
  const t2 = makeTextStream('en');
505
502
  t2.originalId = 't2';
506
503
  t2.roles = ['role1', 'role2'];
504
+ t2.bandwidth = 1172;
507
505
 
508
506
  const t3 = makeTextStream('en');
509
507
  t3.originalId = 't3';
510
508
  t3.roles = ['role1'];
509
+ t3.bandwidth = 1158;
510
+
511
+ // t4 has a different bandwidth from t3, and should not
512
+ // be filtered out.
513
+ const t4 = makeTextStream('en');
514
+ t4.originalId = 't4';
515
+ t4.roles = ['role1'];
516
+ t4.bandwidth = 1186;
511
517
 
512
518
  // i1 and i3 are duplicates.
513
519
  const i1 = makeImageStream(240);
@@ -539,6 +545,7 @@ describe('PeriodCombiner', () => {
539
545
  t1,
540
546
  t2,
541
547
  t3,
548
+ t4,
542
549
  ],
543
550
  imageStreams: [
544
551
  i1,
@@ -565,7 +572,7 @@ describe('PeriodCombiner', () => {
565
572
  }
566
573
 
567
574
  const textStreams = combiner.getTextStreams();
568
- expect(textStreams.length).toBe(2);
575
+ expect(textStreams.length).toBe(3);
569
576
 
570
577
  // t3 should've been filtered out
571
578
  const textIds = textStreams.map((t) => t.originalId);
@@ -989,6 +996,85 @@ describe('PeriodCombiner', () => {
989
996
  expect(audio2.originalId).toBe('2,4');
990
997
  });
991
998
 
999
+ it('Matches streams with related codecs', async () => {
1000
+ const stream1 = makeVideoStream(1080);
1001
+ stream1.originalId = '1';
1002
+ stream1.bandwidth = 120000;
1003
+ stream1.codecs = 'hvc1.1.4.L126.B0';
1004
+
1005
+ const stream2 = makeVideoStream(1080);
1006
+ stream2.originalId = '2';
1007
+ stream2.bandwidth = 120000;
1008
+ stream2.codecs = 'hev1.2.4.L123.B0';
1009
+
1010
+ const stream3 = makeVideoStream(1080);
1011
+ stream3.originalId = '3';
1012
+ stream3.bandwidth = 120000;
1013
+ stream3.codecs = 'dvhe.05.01';
1014
+
1015
+ const stream4 = makeVideoStream(1080);
1016
+ stream4.originalId = '4';
1017
+ stream4.bandwidth = 120000;
1018
+ stream4.codecs = 'dvh1.05.01';
1019
+
1020
+ const stream5 = makeVideoStream(1080);
1021
+ stream5.originalId = '5';
1022
+ stream5.bandwidth = 120000;
1023
+ stream5.codecs = 'avc1.42001f';
1024
+
1025
+ const stream6 = makeVideoStream(1080);
1026
+ stream6.originalId = '6';
1027
+ stream6.bandwidth = 120000;
1028
+ stream6.codecs = 'avc3.42001f';
1029
+
1030
+ const stream7 = makeVideoStream(1080);
1031
+ stream7.originalId = '7';
1032
+ stream7.bandwidth = 120000;
1033
+ stream7.codecs = 'vp09.00.10.08';
1034
+
1035
+ const stream8 = makeVideoStream(1080);
1036
+ stream8.originalId = '8';
1037
+ stream8.bandwidth = 120000;
1038
+ stream8.codecs = 'vp09.01.20.08.01';
1039
+
1040
+ /** @type {!Array.<shaka.util.PeriodCombiner.Period>} */
1041
+ const periods = [
1042
+ {
1043
+ id: '0',
1044
+ videoStreams: [
1045
+ stream1, stream3, stream5, stream7,
1046
+ ],
1047
+ audioStreams: [],
1048
+ textStreams: [],
1049
+ imageStreams: [],
1050
+ },
1051
+ {
1052
+ id: '1',
1053
+ videoStreams: [
1054
+ stream2, stream4, stream6, stream8,
1055
+ ],
1056
+ audioStreams: [],
1057
+ textStreams: [],
1058
+ imageStreams: [],
1059
+ },
1060
+ ];
1061
+
1062
+ await combiner.combinePeriods(periods, /* isDynamic= */ true);
1063
+ const variants = combiner.getVariants();
1064
+ expect(variants.length).toBe(4);
1065
+ // We can use the originalId field to see what each track is composed of.
1066
+ const video1 = variants[0].video;
1067
+ expect(video1.originalId).toBe('1,2');
1068
+
1069
+ const video2 = variants[1].video;
1070
+ expect(video2.originalId).toBe('3,4');
1071
+
1072
+ const video3 = variants[2].video;
1073
+ expect(video3.originalId).toBe('5,6');
1074
+
1075
+ const video4 = variants[3].video;
1076
+ expect(video4.originalId).toBe('7,8');
1077
+ });
992
1078
 
993
1079
  it('Matches streams with most roles in common', async () => {
994
1080
  const makeAudioStreamWithRoles = (roles) => {
@@ -1059,7 +1145,7 @@ describe('PeriodCombiner', () => {
1059
1145
  it('The number of variants stays stable after many periods ' +
1060
1146
  'when going between similar content and varying ads', async () => {
1061
1147
  // This test is based on the content from
1062
- // https://github.com/google/shaka-player/issues/2716
1148
+ // https://github.com/shaka-project/shaka-player/issues/2716
1063
1149
  // that used to cause our period flattening logic to keep
1064
1150
  // creating new variants for every new period added.
1065
1151
  // It's ok to create a few additional varinats/streams,
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.util.Error');
9
- goog.require('shaka.util.Pssh');
10
- goog.require('shaka.util.Uint8ArrayUtils');
11
-
12
7
  describe('Pssh', () => {
13
8
  const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;
14
9
 
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.StateHistory');
8
-
9
7
  describe('StateHistory', () => {
10
8
  const oldDateNow = Date.now;
11
9
 
@@ -4,11 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.FakeDrmEngine');
8
- goog.require('shaka.test.ManifestGenerator');
9
- goog.require('shaka.test.Util');
10
- goog.require('shaka.util.StreamUtils');
11
-
12
7
  describe('StreamUtils', () => {
13
8
  const StreamUtils = shaka.util.StreamUtils;
14
9
 
@@ -184,7 +179,7 @@ describe('StreamUtils', () => {
184
179
  });
185
180
 
186
181
  it('chooses only one role, even if none is preferred', () => {
187
- // Regression test for https://github.com/google/shaka-player/issues/949
182
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
188
183
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
189
184
  manifest.addTextStream(0, (stream) => {
190
185
  stream.language = 'en';
@@ -223,7 +218,7 @@ describe('StreamUtils', () => {
223
218
  });
224
219
 
225
220
  it('chooses only one role, even if all are primary', () => {
226
- // Regression test for https://github.com/google/shaka-player/issues/949
221
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/949
227
222
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
228
223
  manifest.addTextStream(0, (stream) => {
229
224
  stream.language = 'en';
@@ -269,7 +264,7 @@ describe('StreamUtils', () => {
269
264
  });
270
265
 
271
266
  it('chooses only one language, even if all are primary', () => {
272
- // Regression test for https://github.com/google/shaka-player/issues/918
267
+ // Regression test for https://github.com/shaka-project/shaka-player/issues/918
273
268
  manifest = shaka.test.ManifestGenerator.generate((manifest) => {
274
269
  manifest.addTextStream(0, (stream) => {
275
270
  stream.language = 'en';
@@ -4,12 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.test.Util');
8
- goog.require('shaka.util.BufferUtils');
9
- goog.require('shaka.util.Error');
10
- goog.require('shaka.util.ManifestParserUtils');
11
- goog.require('shaka.util.StringUtils');
12
-
13
7
  describe('StringUtils', () => {
14
8
  const StringUtils = shaka.util.StringUtils;
15
9
 
@@ -4,8 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('shaka.util.TextParser');
8
-
9
7
  describe('TextParser', () => {
10
8
  const TextParser = shaka.util.TextParser;
11
9
 
@@ -4,10 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.util.XmlUtils');
9
-
10
-
11
7
  describe('XmlUtils', () => {
12
8
  // A number that cannot be represented as a Javascript number.
13
9
  const HUGE_NUMBER_STRING = new Array(500).join('7');
@@ -78,11 +78,11 @@
78
78
 
79
79
  /* This math is determining how far the button is from the right edge.
80
80
  * Ad panel's parent is centered and @bottom-controls-width wide, so
81
- * 100 - @bottom-controls-width = margins from both sides of the container.
81
+ * 100% - @bottom-controls-width = margins from both sides of the container.
82
82
  * That divided by 2 is margin on one side, so we take that, and move the
83
83
  * button from its normal position to the right by that percentage.
84
84
  */
85
- right: (100 - @bottom-controls-width) / 2 * -1;
85
+ right: calc((100% - @bottom-controls-width) / 2 * -1);
86
86
  display: flex;
87
87
  flex-direction: row;
88
88
  margin: 0;
@@ -90,18 +90,18 @@
90
90
 
91
91
  .shaka-skip-ad-button {
92
92
  padding: 5px 15px;
93
- background: rgba(0, 0, 0, 0.7);
93
+ background: rgba(0 0 0 / 70%);
94
94
  border: none;
95
95
 
96
96
  &:disabled {
97
- background: rgba(0, 0, 0, 0.3);
97
+ background: rgba(0 0 0 / 30%);
98
98
  }
99
99
 
100
100
  cursor: pointer;
101
101
  }
102
102
 
103
103
  .shaka-skip-ad-counter {
104
- padding: 5px 5px;
105
- background: rgba(0, 0, 0, 0.7);
104
+ padding: 5px;
105
+ background: rgba(0 0 0 / 70%);
106
106
  margin: 0;
107
107
  }
@@ -26,7 +26,7 @@
26
26
  *
27
27
  * Based on tips from https://stackoverflow.com/a/12925343 */
28
28
  box-sizing: border-box;
29
- padding: @play-button-size-percentage / 2;
29
+ padding: calc(@play-button-size-percentage / 2);
30
30
  width: 0;
31
31
  height: 0;
32
32
 
@@ -38,7 +38,7 @@
38
38
  border-radius: 50%;
39
39
 
40
40
  /* A small drop shadow below the button. */
41
- box-shadow: rgba(0, 0, 0, 0.1) 0 0 20px 0;
41
+ box-shadow: rgba(0 0 0 / 10%) 0 0 20px 0;
42
42
 
43
43
  /* No border. */
44
44
  border: none;
@@ -51,7 +51,7 @@
51
51
  background-position: center center;
52
52
 
53
53
  /* A background color behind the play arrow. */
54
- background-color: rgba(255, 255, 255, 0.9);
54
+ background-color: rgba(255 255 255 / 90%);
55
55
 
56
56
  .show-when-controls-shown();
57
57
 
@@ -60,11 +60,11 @@
60
60
  * deployed separately from the compiled CSS.
61
61
  * Note that these URIs should relative to ui/controls.less, not this file. */
62
62
  &[icon="play"] {
63
- background-image: data-uri('images/play_arrow.svg');
63
+ background-image: data-uri("images/play_arrow.svg");
64
64
  }
65
65
 
66
66
  &[icon="pause"] {
67
- background-image: data-uri('images/pause.svg');
67
+ background-image: data-uri("images/pause.svg");
68
68
  }
69
69
  }
70
70
 
@@ -74,7 +74,7 @@
74
74
  */
75
75
  .shaka-current-time {
76
76
  font-size: 14px;
77
- color: rgb(255, 255, 255);
77
+ color: white;
78
78
  cursor: pointer;
79
79
 
80
80
  &[disabled] {
@@ -6,8 +6,6 @@
6
6
 
7
7
  /* All of the top-level containers into which various visible features go. */
8
8
 
9
- @transparent: rgba(0, 0, 0, 0);
10
-
11
9
  /* A container for the entire video + controls combo. This is the auto-setup
12
10
  * div which we populate. */
13
11
  .shaka-video-container {
@@ -19,13 +17,13 @@
19
17
 
20
18
  /* Set a special font for material design icons. */
21
19
  .material-icons-round {
22
- font-family: 'Material Icons Round';
20
+ font-family: "Material Icons Round";
23
21
  font-size: 24px;
24
22
  }
25
23
 
26
24
  /* Set the fonts for all other content. */
27
25
  * {
28
- font-family: Roboto-Regular, Roboto, sans-serif;
26
+ font-family: Roboto-Regular, Roboto, sans-serif, TengwarTelcontar;
29
27
  }
30
28
  }
31
29
 
@@ -202,7 +200,7 @@
202
200
  min-width: 300px;
203
201
 
204
202
  color: white;
205
- background-color: rgba(35, 35, 35, 0.9);
203
+ background-color: rgba(35 35 35 / 90%);
206
204
 
207
205
  font-size: 14px;
208
206
 
@@ -223,12 +221,12 @@
223
221
  }
224
222
 
225
223
  span {
226
- color: rgb(150, 150, 150);
224
+ color: rgb(150 150 150);
227
225
  }
228
226
  }
229
227
 
230
228
  .shaka-context-menu {
231
- background-color: rgba(35, 35, 35, 0.9);
229
+ background-color: rgba(35 35 35 / 90%);
232
230
 
233
231
  border-radius: 2px;
234
232
 
@@ -248,7 +246,7 @@
248
246
  cursor: pointer;
249
247
 
250
248
  &:hover {
251
- background-color: rgba(50, 50, 50, 0.9);
249
+ background-color: rgba(50 50 50 / 90%);
252
250
  }
253
251
  }
254
252
 
@@ -277,7 +275,7 @@
277
275
  .show-when-controls-shown();
278
276
 
279
277
  /* A black gradient at the bottom, behind the controls, but only so high. */
280
- background: linear-gradient(to top, rgba(0, 0, 0, 1) 0, @transparent 15%);
278
+ background: linear-gradient(to top, black 0, transparent 15%);
281
279
  }
282
280
 
283
281
  .shaka-text-container {
@@ -305,7 +303,7 @@
305
303
  /* These are defaults which are overridden by JS or cue styles. */
306
304
  font-size: 20px;
307
305
  line-height: 1.4; // relative to font size.
308
- color: rgb(255, 255, 255);
306
+ color: white;
309
307
 
310
308
  span.shaka-text-wrapper {
311
309
  display: inline;
@@ -339,8 +337,8 @@
339
337
 
340
338
  .shaka-spinner {
341
339
  /* This uses the same trickery as the big play button define
342
- the spinner's width and height. See .shaka-play-button
343
- for the detailed explanation. */
340
+ * the spinner's width and height. See .shaka-play-button
341
+ * for the detailed explanation. */
344
342
 
345
343
  /* For the padding thing to work, spinner div needs to be an
346
344
  overlay-parent and spinner svg - an overlay child. */
@@ -348,11 +346,11 @@
348
346
 
349
347
  margin: 0;
350
348
  box-sizing: border-box;
351
- padding: @spinner-size-percentage / 2;
349
+ padding: calc(@spinner-size-percentage / 2);
352
350
  width: 0;
353
351
  height: 0;
354
352
 
355
353
  /* Add a bit of a white shadow to keep our black spinner visible
356
- on a black background. */
357
- filter: drop-shadow(0 0 2px rgba(255, 255, 255, 0.5));
354
+ * on a black background. */
355
+ filter: drop-shadow(0 0 2px rgba(255 255 255 / 50%));
358
356
  }
@@ -18,7 +18,7 @@
18
18
 
19
19
  /* Styles for the menu itself. */
20
20
  background: white;
21
- box-shadow: 0 1px 9px 0 rgba(0, 0, 0, 0.4);
21
+ box-shadow: 0 1px 9px 0 rgba(0 0 0 / 40%);
22
22
  border-radius: 2px;
23
23
  max-height: 250px;
24
24
  min-width: 180px;
@@ -52,7 +52,7 @@
52
52
 
53
53
  /* When hovered, the button's background is highlighted. */
54
54
  &:hover {
55
- background: rgb(224, 224, 224);
55
+ background: rgb(224 224 224);
56
56
  }
57
57
 
58
58
  /* The button is clickable, showing cursor pointer */
@@ -64,7 +64,7 @@
64
64
  }
65
65
 
66
66
  .shaka-keyboard-navigation &:focus {
67
- background: rgb(224, 224, 224);
67
+ background: rgb(224 224 224);
68
68
  }
69
69
  }
70
70
 
@@ -109,7 +109,7 @@
109
109
  * language, the currently-selected resolution, etc. */
110
110
  .shaka-current-selection-span {
111
111
  /* This is dimmer than the other span, which is the name of the submenu. */
112
- color: rgba(0, 0, 0, 0.54);
112
+ color: rgba(0 0 0 / 54%);
113
113
  }
114
114
 
115
115
  /* The submenus have somewhat different margins inside them. */