shaka-player 3.3.0 → 3.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) 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 +130 -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 +145 -0
  10. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  11. package/.github/workflows/selenium-lab-tests.yaml +93 -0
  12. package/AUTHORS +2 -0
  13. package/CHANGELOG.md +1722 -1640
  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 +1 -1
  59. package/build/checkversion.py +1 -1
  60. package/build/conformance.textproto +196 -169
  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 +93 -28
  67. package/build/types/polyfill +1 -0
  68. package/build/wrapper.template.js +2 -2
  69. package/demo/TengwarTelcontar.woff2 +0 -0
  70. package/demo/asset_card.js +1 -2
  71. package/demo/cast_receiver/index.html +1 -1
  72. package/demo/cast_receiver/receiver_app.css +14 -14
  73. package/demo/common/assets.js +2 -0
  74. package/demo/config.js +0 -1
  75. package/demo/custom.js +0 -1
  76. package/demo/customWarning.txt +2 -2
  77. package/demo/demo.less +29 -18
  78. package/demo/demo_uncompiled.js +1 -13
  79. package/demo/index.html +1 -1
  80. package/demo/main.js +3 -3
  81. package/dist/controls.css +3 -3
  82. package/dist/controls.css.map +1 -1
  83. package/dist/demo.compiled.debug.js +191 -194
  84. package/dist/demo.compiled.debug.map +4 -4
  85. package/dist/demo.compiled.js +191 -194
  86. package/dist/demo.compiled.map +4 -4
  87. package/dist/demo.css +1 -1
  88. package/dist/demo.css.map +1 -1
  89. package/dist/deps.js +233 -226
  90. package/dist/locales.js +30 -30
  91. package/dist/receiver.compiled.debug.js +43 -45
  92. package/dist/receiver.compiled.debug.map +4 -4
  93. package/dist/receiver.compiled.js +43 -45
  94. package/dist/receiver.compiled.map +4 -4
  95. package/dist/shaka-player.compiled.d.ts +272 -238
  96. package/dist/shaka-player.compiled.debug.d.ts +272 -238
  97. package/dist/shaka-player.compiled.debug.externs.js +53 -16
  98. package/dist/shaka-player.compiled.debug.js +393 -394
  99. package/dist/shaka-player.compiled.debug.map +4 -4
  100. package/dist/shaka-player.compiled.externs.js +53 -16
  101. package/dist/shaka-player.compiled.js +840 -843
  102. package/dist/shaka-player.compiled.map +4 -4
  103. package/dist/shaka-player.ui.d.ts +318 -293
  104. package/dist/shaka-player.ui.debug.d.ts +318 -293
  105. package/dist/shaka-player.ui.debug.externs.js +55 -27
  106. package/dist/shaka-player.ui.debug.js +415 -417
  107. package/dist/shaka-player.ui.debug.map +4 -4
  108. package/dist/shaka-player.ui.externs.js +55 -27
  109. package/dist/shaka-player.ui.js +997 -1000
  110. package/dist/shaka-player.ui.map +4 -4
  111. package/docs/design/REDESIGN.md +33 -33
  112. package/docs/design/bg-fetch.md +2 -2
  113. package/docs/design/codec_preferences.md +1 -1
  114. package/docs/design/dash-audio-channels.md +3 -3
  115. package/docs/design/dash-manifests.md +1 -1
  116. package/docs/design/gap-jumping.md +3 -3
  117. package/docs/design/preload.md +2 -2
  118. package/docs/tutorials/faq.md +8 -8
  119. package/docs/tutorials/index.json +1 -0
  120. package/docs/tutorials/plugins.md +3 -3
  121. package/docs/tutorials/selenium-grid-config.md +122 -0
  122. package/docs/tutorials/welcome.md +10 -2
  123. package/externs/cmcd.js +186 -0
  124. package/externs/shaka/player.js +8 -0
  125. package/externs/shaka/text.js +10 -0
  126. package/karma.conf.js +156 -45
  127. package/lib/abr/simple_abr_manager.js +12 -6
  128. package/lib/ads/ad_manager.js +1 -0
  129. package/lib/cast/cast_proxy.js +6 -4
  130. package/lib/cast/cast_receiver.js +3 -0
  131. package/lib/cea/cea608_data_channel.js +2 -2
  132. package/lib/cea/cea708_service.js +5 -4
  133. package/lib/cea/mp4_cea_parser.js +11 -5
  134. package/lib/cea/sei_processor.js +6 -3
  135. package/lib/dash/dash_parser.js +40 -30
  136. package/lib/dash/mpd_utils.js +4 -5
  137. package/lib/dash/segment_list.js +1 -2
  138. package/lib/dash/segment_template.js +3 -3
  139. package/lib/hls/hls_parser.js +41 -9
  140. package/lib/hls/manifest_text_parser.js +4 -3
  141. package/lib/media/adaptation_set.js +1 -2
  142. package/lib/media/content_workarounds.js +2 -2
  143. package/lib/media/drm_engine.js +3 -2
  144. package/lib/media/media_source_engine.js +3 -2
  145. package/lib/media/mp4_segment_index_parser.js +1 -4
  146. package/lib/media/playhead.js +2 -2
  147. package/lib/media/presentation_timeline.js +18 -8
  148. package/lib/media/quality_observer.js +17 -34
  149. package/lib/media/region_observer.js +39 -33
  150. package/lib/media/region_timeline.js +17 -19
  151. package/lib/media/segment_index.js +2 -1
  152. package/lib/media/segment_reference.js +19 -1
  153. package/lib/media/streaming_engine.js +12 -9
  154. package/lib/media/time_ranges_utils.js +1 -3
  155. package/lib/media/video_wrapper.js +1 -1
  156. package/lib/net/networking_engine.js +5 -1
  157. package/lib/offline/storage.js +12 -13
  158. package/lib/player.js +87 -41
  159. package/lib/polyfill/all.js +2 -3
  160. package/lib/polyfill/encryption_scheme.js +1 -1
  161. package/lib/polyfill/media_capabilities.js +32 -17
  162. package/lib/polyfill/mediasource.js +1 -1
  163. package/lib/polyfill/symbol.js +46 -0
  164. package/lib/text/cue.js +7 -1
  165. package/lib/text/simple_text_displayer.js +2 -1
  166. package/lib/text/ttml_text_parser.js +92 -63
  167. package/lib/text/ui_text_displayer.js +18 -12
  168. package/lib/util/buffer_utils.js +1 -3
  169. package/lib/util/cmcd_manager.js +47 -201
  170. package/lib/util/ebml_parser.js +3 -3
  171. package/lib/util/error.js +1 -1
  172. package/lib/util/fake_event_target.js +21 -1
  173. package/lib/util/iterables.js +0 -46
  174. package/lib/util/mp4_box_parsers.js +1 -4
  175. package/lib/util/mp4_parser.js +5 -7
  176. package/lib/util/periods.js +10 -11
  177. package/lib/util/platform.js +3 -3
  178. package/lib/util/pssh.js +1 -4
  179. package/lib/util/stream_utils.js +88 -11
  180. package/lib/util/string_utils.js +3 -5
  181. package/lib/util/uint8array_utils.js +3 -5
  182. package/lib/util/xml_utils.js +34 -7
  183. package/package.json +62 -40
  184. package/roadmap.md +17 -17
  185. package/shaka-player.uncompiled.js +1 -0
  186. package/test/abr/simple_abr_manager_unit.js +3 -8
  187. package/test/ads/ad_manager_unit.js +0 -6
  188. package/test/cast/cast_proxy_unit.js +0 -8
  189. package/test/cast/cast_receiver_integration.js +1 -18
  190. package/test/cast/cast_receiver_unit.js +1 -9
  191. package/test/cast/cast_sender_unit.js +0 -6
  192. package/test/cast/cast_utils_unit.js +0 -13
  193. package/test/cea/cea608_memory_unit.js +0 -5
  194. package/test/cea/cea708_service_unit.js +0 -7
  195. package/test/cea/cea708_window_unit.js +0 -5
  196. package/test/cea/cea_decoder_unit.js +0 -6
  197. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  198. package/test/cea/dtvcc_packet_unit.js +0 -5
  199. package/test/cea/mp4_cea_parser_unit.js +0 -4
  200. package/test/dash/dash_parser_content_protection_unit.js +1 -10
  201. package/test/dash/dash_parser_live_unit.js +45 -15
  202. package/test/dash/dash_parser_manifest_unit.js +4 -17
  203. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  204. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  205. package/test/dash/dash_parser_segment_template_unit.js +0 -9
  206. package/test/dash/mpd_utils_unit.js +3 -11
  207. package/test/demo/demo_unit.js +0 -5
  208. package/test/deprecate/enforcer_unit.js +0 -4
  209. package/test/deprecate/version_unit.js +0 -2
  210. package/test/hls/hls_live_unit.js +2 -14
  211. package/test/hls/hls_parser_unit.js +76 -15
  212. package/test/hls/manifest_text_parser_unit.js +0 -10
  213. package/test/media/adaptation_set_criteria_unit.js +3 -7
  214. package/test/media/adaptation_set_unit.js +0 -2
  215. package/test/media/buffering_observer_unit.js +1 -4
  216. package/test/media/closed_caption_parser_unit.js +0 -3
  217. package/test/media/drm_engine_integration.js +2 -15
  218. package/test/media/drm_engine_unit.js +7 -27
  219. package/test/media/manifest_parser_unit.js +0 -4
  220. package/test/media/media_source_engine_integration.js +0 -7
  221. package/test/media/media_source_engine_unit.js +1 -14
  222. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  223. package/test/media/play_rate_controller_unit.js +0 -4
  224. package/test/media/playhead_unit.js +8 -16
  225. package/test/media/presentation_timeline_unit.js +4 -7
  226. package/test/media/quality_observer_unit.js +4 -5
  227. package/test/media/region_observer_unit.js +40 -10
  228. package/test/media/region_timeline_unit.js +40 -25
  229. package/test/media/segment_index_unit.js +0 -6
  230. package/test/media/segment_reference_unit.js +0 -3
  231. package/test/media/stall_detector_unit.js +0 -5
  232. package/test/media/streaming_engine_integration.js +11 -37
  233. package/test/media/streaming_engine_unit.js +155 -34
  234. package/test/media/time_ranges_utils_unit.js +0 -2
  235. package/test/media/transmuxer_integration.js +0 -6
  236. package/test/media/webm_segment_index_parser_unit.js +0 -4
  237. package/test/net/data_uri_plugin_unit.js +0 -7
  238. package/test/net/http_plugin_unit.js +0 -9
  239. package/test/net/networking_engine_unit.js +0 -11
  240. package/test/offline/download_progress_estimator_unit.js +0 -2
  241. package/test/offline/indexeddb_storage_unit.js +0 -6
  242. package/test/offline/manifest_convert_unit.js +0 -8
  243. package/test/offline/offline_integration.js +1 -10
  244. package/test/offline/offline_manifest_parser_unit.js +0 -6
  245. package/test/offline/offline_scheme_unit.js +0 -8
  246. package/test/offline/offline_uri_unit.js +0 -2
  247. package/test/offline/storage_compatibility_unit.js +1 -14
  248. package/test/offline/storage_integration.js +1 -27
  249. package/test/player_external.js +2 -10
  250. package/test/player_integration.js +63 -36
  251. package/test/player_load_graph_integration.js +1 -6
  252. package/test/player_src_equals_external.js +3 -9
  253. package/test/player_src_equals_integration.js +41 -15
  254. package/test/player_unit.js +71 -46
  255. package/test/routing/walker_unit.js +0 -8
  256. package/test/test/assets/chapters.vtt +2 -2
  257. package/test/test/assets/chapters2.vtt +10 -0
  258. package/test/test/assets/large_file.mpd +1 -1
  259. package/test/test/boot.js +75 -22
  260. package/test/test/externs/jasmine.js +2 -2
  261. package/test/test/externs/karma.js +4 -0
  262. package/test/test/namespace.js +10 -0
  263. package/test/test/util/canned_idb.js +0 -8
  264. package/test/test/util/cea_utils.js +0 -6
  265. package/test/test/util/dash_parser_util.js +0 -13
  266. package/test/test/util/fake_ad.js +0 -3
  267. package/test/test/util/fake_ad_manager.js +0 -9
  268. package/test/test/util/fake_demo_main.js +0 -5
  269. package/test/test/util/fake_drm_engine.js +0 -6
  270. package/test/test/util/fake_media_source_engine.js +0 -7
  271. package/test/test/util/fake_networking_engine.js +0 -5
  272. package/test/test/util/fake_text_displayer.js +0 -5
  273. package/test/test/util/indexeddb_utils.js +1 -10
  274. package/test/test/util/jasmine_fetch.js +0 -1
  275. package/test/test/util/loader.js +0 -18
  276. package/test/test/util/manifest_generator.js +9 -14
  277. package/test/test/util/manifest_parser_util.js +0 -6
  278. package/test/test/util/offline_utils.js +0 -5
  279. package/test/test/util/simple_fakes.js +9 -26
  280. package/test/test/util/stream_generator.js +0 -14
  281. package/test/test/util/streaming_engine_util.js +0 -15
  282. package/test/test/util/test_scheme.js +1 -19
  283. package/test/test/util/ttml_utils.js +79 -0
  284. package/test/test/util/ui_utils.js +0 -9
  285. package/test/test/util/util.js +15 -26
  286. package/test/test/util/waiter.js +84 -43
  287. package/test/text/cue_integration.js +0 -4
  288. package/test/text/lrc_text_parser_unit.js +0 -4
  289. package/test/text/mp4_ttml_parser_unit.js +10 -23
  290. package/test/text/mp4_vtt_parser_unit.js +1 -7
  291. package/test/text/sbv_text_parser_unit.js +0 -4
  292. package/test/text/simple_text_displayer_unit.js +1 -8
  293. package/test/text/srt_text_parser_unit.js +0 -4
  294. package/test/text/ssa_text_parser_unit.js +0 -5
  295. package/test/text/text_engine_unit.js +2 -7
  296. package/test/text/text_track_integration.js +0 -2
  297. package/test/text/ttml_text_parser_unit.js +499 -239
  298. package/test/text/ui_text_displayer_unit.js +44 -41
  299. package/test/text/vtt_text_parser_unit.js +0 -9
  300. package/test/text/web_vtt_generator_unit.js +0 -3
  301. package/test/ui/ad_ui_unit.js +0 -11
  302. package/test/ui/localization_unit.js +0 -3
  303. package/test/ui/text_displayer_layout_unit.js +9 -19
  304. package/test/ui/ui_customization_unit.js +0 -6
  305. package/test/ui/ui_integration.js +0 -16
  306. package/test/ui/ui_unit.js +1 -17
  307. package/test/util/abortable_operation_unit.js +4 -9
  308. package/test/util/array_utils_unit.js +0 -2
  309. package/test/util/buffer_utils_unit.js +0 -2
  310. package/test/util/cmcd_manager_unit.js +29 -18
  311. package/test/util/data_view_reader_unit.js +0 -4
  312. package/test/util/ebml_parser_unit.js +0 -4
  313. package/test/util/event_manager_unit.js +0 -3
  314. package/test/util/fake_event_target_unit.js +0 -5
  315. package/test/util/functional_unit.js +1 -1
  316. package/test/util/iterables_unit.js +0 -64
  317. package/test/util/language_utils_unit.js +0 -3
  318. package/test/util/manifest_parser_utils_unit.js +0 -2
  319. package/test/util/mp4_box_parsers_unit.js +0 -5
  320. package/test/util/mp4_parser_unit.js +0 -4
  321. package/test/util/multi_map_unit.js +0 -3
  322. package/test/util/object_utils_unit.js +0 -2
  323. package/test/util/periods_unit.js +14 -7
  324. package/test/util/pssh_unit.js +0 -5
  325. package/test/util/state_history_unit.js +0 -2
  326. package/test/util/stream_utils_unit.js +39 -38
  327. package/test/util/string_utils_unit.js +0 -6
  328. package/test/util/text_parser_unit.js +0 -2
  329. package/test/util/xml_utils_unit.js +0 -4
  330. package/third_party/closure-uri/uri.js +21 -0
  331. package/ui/controls.js +3 -0
  332. package/ui/less/ad_controls.less +4 -4
  333. package/ui/less/buttons.less +5 -5
  334. package/ui/less/containers.less +9 -11
  335. package/ui/less/overflow_menu.less +4 -4
  336. package/ui/less/range_elements.less +5 -0
  337. package/ui/less/tooltip.less +1 -1
  338. package/ui/locales/sjn-translations.yaml +257 -0
  339. package/ui/locales/sjn.json +42 -0
  340. package/ui/localization.js +12 -36
  341. package/ui/text_selection.js +1 -0
  342. package/externs/media_capabilities.js +0 -16
  343. package/externs/svgelement.js +0 -18
  344. package/externs/webcrypto.js +0 -18
package/.csslintrc CHANGED
@@ -1,13 +1,23 @@
1
1
  {
2
2
  "extends": "stylelint-config-standard",
3
+ "customSyntax": "postcss-less",
3
4
  "rules": {
4
5
  "font-family-no-missing-generic-family-keyword": null,
5
6
  "declaration-block-single-line-max-declarations": null,
6
7
  "declaration-empty-line-before": null,
7
- "max-line-length": [ 80, {
8
+ "max-line-length": [80, {
8
9
  ignorePattern: "/^@import\\s+/",
9
10
  }],
11
+ "function-no-unknown": [true, {
12
+ ignoreFunctions: [
13
+ "data-uri",
14
+ "lighten",
15
+ "percentage",
16
+ ],
17
+ }],
18
+ "property-no-vendor-prefix": null,
10
19
  "selector-list-comma-newline-after": "always-multi-line",
20
+ "selector-no-vendor-prefix": null,
11
21
  "selector-pseudo-element-colon-notation": "single",
12
22
  "unit-allowed-list": ["em", "%", "px", "s", "deg", "vmin", "ms", "vh"]
13
23
  }
@@ -18,7 +18,7 @@ assignees: ''
18
18
  **Can you reproduce the issue with our latest release version?**
19
19
 
20
20
 
21
- **Can you reproduce the issue with the latest code from `master`?**
21
+ **Can you reproduce the issue with the latest code from `main`?**
22
22
 
23
23
 
24
24
  **Are you using the demo app or your own custom app?**
@@ -1,38 +1,10 @@
1
- ## Description
2
-
3
1
  <!--
4
- Give the PR a helpful title that summaries what this PR changes. Here, include
5
- a summary of the change and which issue is fixed. Also include relevant
6
- motivation and context. List any dependencies that are required for this
7
- change.
8
-
9
- If this fixes any issues, include lines like this:
10
- Fixes #123
11
- -->
2
+ Please remember to:
12
3
 
4
+ 1. Use Conventional Commits syntax (fix: ..., feat: ..., etc.) in commits and
5
+ PR title (https://www.conventionalcommits.org/)
6
+ 2. Tag any related or fixed issues ("Issue #123", "Closes #420")
7
+ 3. Sign the Google CLA if you haven't (https://cla.developers.google.com)
13
8
 
14
- ## Screenshots (optional)
15
-
16
- <!--
17
- If you change the UI, add before and after screenshots demonstrating your
18
- changes.
9
+ You may delete this comment from the PR description.
19
10
  -->
20
-
21
-
22
- ## Type of change
23
-
24
- - [ ] Bug fix (non-breaking change which fixes an issue)
25
- - [ ] New feature (non-breaking change which adds functionality)
26
- - [ ] Breaking change (fix or feature that would cause existing functionality to
27
- not work as expected)
28
- - [ ] This change requires a documentation update
29
-
30
- ## Checklist:
31
-
32
- - [ ] I have signed the Google CLA <https://cla.developers.google.com>
33
- - [ ] My code follows the style guidelines of this project
34
- - [ ] I have made corresponding changes to the documentation
35
- - [ ] I have added tests that prove my fix is effective or that my feature works
36
- - [ ] I have verified my change on multiple browsers on different platforms
37
- - [ ] I have run `./build/all.py` and the build passes
38
- - [ ] I have run `./build/test.py` and all tests pass
@@ -0,0 +1,130 @@
1
+ name: Build and Test PR
2
+
3
+ on:
4
+ pull_request: # Trigger for pull requests.
5
+ types: [opened, synchronize, reopened]
6
+ branches:
7
+ - main
8
+ - v[0-9]*
9
+ workflow_dispatch: # Allows for manual triggering.
10
+ inputs:
11
+ ref:
12
+ description: "The ref to build and test."
13
+ required: false
14
+
15
+ # If another instance of this workflow is started for the same PR, cancel the
16
+ # old one. If a PR is updated and a new test run is started, the old test run
17
+ # will be cancelled automatically to conserve resources.
18
+ concurrency:
19
+ group: ${{ github.workflow }}-${{ github.event.inputs.ref || github.ref }}
20
+ cancel-in-progress: true
21
+
22
+ jobs:
23
+ lint:
24
+ name: Lint
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - name: Checkout code
28
+ uses: actions/checkout@v2
29
+ with:
30
+ ref: ${{ github.event.inputs.ref || github.ref }}
31
+
32
+ - name: Lint
33
+ run: python build/check.py
34
+
35
+ build_and_test:
36
+ # Don't waste time doing a full matrix of test runs when there was an
37
+ # obvious linter error.
38
+ needs: lint
39
+ strategy:
40
+ matrix:
41
+ os: ["ubuntu-latest", "macos-latest", "windows-latest"]
42
+ browser: ["Chrome", "Firefox", "Edge", "Safari", "Safari-14"]
43
+ exclude:
44
+ - os: ubuntu-latest
45
+ browser: Edge
46
+ - os: windows-latest
47
+ browser: Safari
48
+ - os: windows-latest
49
+ browser: Safari-14
50
+ - os: ubuntu-latest
51
+ browser: Safari
52
+ - os: ubuntu-latest
53
+ browser: Safari-14
54
+ include:
55
+ # Run Linux browsers with xvfb, so they're in a headless X session.
56
+ - os: ubuntu-latest
57
+ extra_flags: "--use-xvfb"
58
+ # Disable fail-fast so that one matrix-job failing doesn't make the other
59
+ # ones end early.
60
+ fail-fast: false
61
+
62
+ name: ${{ matrix.os }} ${{ matrix.browser }}
63
+ runs-on: ${{ matrix.os }}
64
+
65
+ steps:
66
+ # Firefox on Ubuntu appears to not have the right things installed in
67
+ # the environment used by GitHub actions, so make sure that ffmpeg is
68
+ # installed. Otherwise, the browser might not support some codecs that the
69
+ # tests assume will be supported.
70
+ - name: Install FFmpeg
71
+ if: matrix.os == 'ubuntu-latest' && matrix.browser == 'Firefox'
72
+ run: sudo apt -y update && sudo apt -y install ffmpeg
73
+
74
+ - name: Checkout code
75
+ uses: actions/checkout@v2
76
+ with:
77
+ ref: ${{ github.event.inputs.ref || github.ref }}
78
+
79
+ # Safari 14 can be installed, but not to the root, and it can't replace
80
+ # the standard version, at least not on GitHub's VMs. If you try to
81
+ # install directly to the root with sudo, it will appear to succeed, but
82
+ # will have no effect. If you try to script it explicitly with rm -rf
83
+ # and cp, this will fail. Safari may be on a read-only filesystem.
84
+ - name: Install Safari 14 to home directory
85
+ if: matrix.os == 'macos-latest' && matrix.browser == 'Safari-14'
86
+ run: |
87
+ # Download Safari 14
88
+ # See also https://www.macupdate.com/app/mac/15675/apple-safari/old-versions
89
+ curl -Lv https://www.macupdate.com/action/download/63550 > safari-14.1.2.pkg
90
+
91
+ # Install Safari 14 to homedir specifically.
92
+ installer -pkg safari-14.1.2.pkg -target CurrentUserHomeDirectory
93
+
94
+ # Install a launcher that can execute a shell script to launch this
95
+ npm install karma-script-launcher --save-dev
96
+
97
+ - name: Build Player
98
+ run: python build/all.py
99
+
100
+ - name: Test Player
101
+ shell: bash
102
+ run: |
103
+ browser=${{ matrix.browser }}
104
+
105
+ if [[ "$browser" == "Safari-14" ]]; then
106
+ # Replace the browser name with a script that can launch this
107
+ # browser from the command line.
108
+ browser="$PWD/.github/workflows/safari-homedir-launcher.sh"
109
+ fi
110
+
111
+ python build/test.py \
112
+ --browsers "$browser" \
113
+ --reporters spec --spec-hide-passed \
114
+ --drm \
115
+ ${{ matrix.extra_flags }}
116
+
117
+ build_in_docker:
118
+ # Don't waste time doing a full matrix of test runs when there was an
119
+ # obvious linter error.
120
+ needs: lint
121
+ name: Docker
122
+ runs-on: ubuntu-latest
123
+ steps:
124
+ - name: Checkout code
125
+ uses: actions/checkout@v2
126
+ with:
127
+ ref: ${{ github.event.inputs.ref || github.ref }}
128
+
129
+ - name: Docker
130
+ run: docker-compose -f build/docker/docker-compose.yml up
@@ -0,0 +1,56 @@
1
+ name: Prep Appspot Deployment
2
+
3
+ description: |
4
+ A reusable action that prepares the sources to deploy the Shaka Player Demo
5
+ to appspot. Assumes that the source is already checked out.
6
+
7
+ runs:
8
+ using: composite
9
+ steps:
10
+ - name: Install dependencies
11
+ shell: bash
12
+ run: npm ci
13
+
14
+ - name: Build Shaka Player
15
+ shell: bash
16
+ run: python build/all.py
17
+
18
+ - name: Extract git version
19
+ shell: bash
20
+ run: |
21
+ (
22
+ cd build
23
+ python3 -c 'from shakaBuildHelpers import git_version; print(git_version())'
24
+ ) > demo-version
25
+
26
+ - name: Tag the Player version
27
+ shell: bash
28
+ run: |
29
+ DEMO_VERSION="$(cat demo-version)-uncompiled"
30
+ sed \
31
+ -i lib/player.js \
32
+ -e "s/\(shaka.Player.version\) = .*/\1 = '$DEMO_VERSION';/"
33
+ rm demo-version
34
+
35
+ - name: Backup demo node modules
36
+ shell: bash
37
+ run: |
38
+ DEMO_NODE_MODULES=$(jq -r .shakaCustom.demoDeps[] package.json)
39
+ tar cf demo-modules.tar \
40
+ $(echo "$DEMO_NODE_MODULES" | sed -e 's@^@node_modules/@')
41
+
42
+ - name: Delete unneeded files
43
+ shell: bash
44
+ run: rm -rf .git .github build externs test node_modules
45
+
46
+ - name: Restore demo node modules
47
+ shell: bash
48
+ run: |
49
+ tar xf demo-modules.tar
50
+ rm demo-modules.tar
51
+
52
+ - name: Install App Engine code
53
+ shell: bash
54
+ run: |
55
+ mv app-engine/shaka-player-demo/* .
56
+ rm README.md
@@ -0,0 +1,41 @@
1
+ name: Set Commit Status
2
+
3
+ description: |
4
+ A reusable action that sets the commit status. This is used to set PR status
5
+ from workflows with non-PR triggers (such as manually-triggered workflows).
6
+
7
+ inputs:
8
+ context:
9
+ description: An arbitrary string to identify the status check.
10
+ required: true
11
+ state:
12
+ description: Either "pending", "error", "success", or "failure".
13
+ required: true
14
+ ref:
15
+ description: A git ref for which to set the commit status. For PRs, use the head commit, not the merge commit. Defaults to HEAD.
16
+ required: false
17
+ default: HEAD
18
+ token:
19
+ description: A GitHub access token.
20
+ required: true
21
+
22
+ runs:
23
+ using: composite
24
+ steps:
25
+ - name: Report Commit Status
26
+ shell: bash
27
+ run: |
28
+ # This is the URL to view this workflow run on GitHub. It will be
29
+ # attached to the commit status, so that when someone clicks "details"
30
+ # next to the status on the PR, it will link to this run where they can
31
+ # see the logs.
32
+ RUN_URL="https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}"
33
+ SHA1=$(git rev-parse "${{ inputs.ref }}")
34
+
35
+ GITHUB_TOKEN=${{ inputs.token }} \
36
+ gh api \
37
+ -X POST \
38
+ -F "context=${{ inputs.context }}" \
39
+ -F "state=${{ inputs.state }}" \
40
+ -F "target_url=$RUN_URL" \
41
+ "repos/${{ github.repository }}/statuses/$SHA1"
@@ -0,0 +1,29 @@
1
+ name: Deploy Demo Version Index
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ # Allows for manual triggering.
6
+ push:
7
+ branches:
8
+ - main
9
+ paths:
10
+ - .github/workflows/demo-version-index.yaml
11
+ - app-engine/demo-version-index/**
12
+
13
+ jobs:
14
+ appspot:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+
19
+ - uses: google-github-actions/auth@v0
20
+ with:
21
+ credentials_json: '${{ secrets.APPENGINE_DEPLOY_KEY }}'
22
+
23
+ - uses: google-github-actions/deploy-appengine@v0
24
+ with:
25
+ project_id: shaka-player-demo
26
+ version: index
27
+ working_directory: app-engine/demo-version-index/
28
+ promote: false
29
+
@@ -0,0 +1,42 @@
1
+ name: Deploy Nightly Demo
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ # Allows for manual triggering.
6
+ schedule:
7
+ # Run every night at midnight PST / 8am UTC.
8
+ - cron: '0 8 * * *'
9
+
10
+ jobs:
11
+ appspot:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ with:
16
+ fetch-depth: 0
17
+ persist-credentials: false
18
+
19
+ - uses: actions/setup-node@v1
20
+ with:
21
+ node-version: 16
22
+ registry-url: 'https://registry.npmjs.org'
23
+
24
+ # The nightly demo has its own receiver app ID that points to the nightly
25
+ # demo itself for the receiver side.
26
+ - name: Override Cast Receiver App ID
27
+ run: |
28
+ sed \
29
+ -i demo/index.html \
30
+ -e 's/\(data-shaka-player-cast-receiver-id\)="[^"]*"/\1="07AEE832"/'
31
+
32
+ - uses: ./.github/workflows/custom-actions/prep-for-appspot
33
+
34
+ - uses: google-github-actions/auth@v0
35
+ with:
36
+ credentials_json: '${{ secrets.APPENGINE_DEPLOY_KEY }}'
37
+
38
+ - uses: google-github-actions/deploy-appengine@v0
39
+ with:
40
+ project_id: shaka-player-demo
41
+ version: nightly
42
+ promote: false
@@ -0,0 +1,145 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - v[0-9]*
8
+
9
+ jobs:
10
+ release:
11
+ runs-on: ubuntu-latest
12
+ outputs:
13
+ release_created: ${{ steps.release.outputs.release_created }}
14
+ tag_name: ${{ steps.release.outputs.tag_name }}
15
+ steps:
16
+ # Create/update release PR
17
+ - uses: google-github-actions/release-please-action@v3
18
+ id: release
19
+ with:
20
+ # Required input to specify the release type (node package).
21
+ release-type: node
22
+ # Make sure we create the PR against the correct branch.
23
+ default-branch: ${{ github.ref_name }}
24
+
25
+ # If we didn't create a release, we may have created or updated a PR.
26
+ - uses: actions/checkout@v2
27
+ if: steps.release.outputs.release_created == false
28
+ - name: Custom update Player version
29
+ if: steps.release.outputs.release_created == false
30
+ run: |
31
+ # Check out the branch that release-please created, if it exists.
32
+ git fetch
33
+ git checkout release-please--branches--${{ github.ref_name }} || exit 0
34
+ # If it does exist, update lib/player.js in the PR branch, so that the
35
+ # -uncompiled tag remains in the player version in that context.
36
+ VERSION="v$(jq -r .version package.json)-uncompiled"
37
+ sed -e "s/^\\(shaka.Player.version =\\).*/\\1 '$VERSION';/" \
38
+ -i lib/player.js
39
+ git add lib/player.js
40
+ # Emulate the actions bot.
41
+ git config user.name "github-actions[bot]"
42
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
43
+ # Update the PR.
44
+ git commit --amend --no-edit
45
+ git push -f
46
+
47
+ # The jobs below are all conditional on a release having been created by
48
+ # someone merging the release PR. They all run in parallel.
49
+
50
+ tag-main:
51
+ runs-on: ubuntu-latest
52
+ needs: release
53
+ if: needs.release.outputs.release_created
54
+ steps:
55
+ - uses: actions/checkout@v2
56
+ - name: Tag the main branch
57
+ run: |
58
+ # Emulate the actions bot.
59
+ git config user.name "github-actions[bot]"
60
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
61
+ VERSION=${{ needs.release.outputs.tag_name }}
62
+ git tag -m "$VERSION-main" "$VERSION-main"
63
+ git push origin "$VERSION-main"
64
+
65
+ npm:
66
+ runs-on: ubuntu-latest
67
+ needs: release
68
+ if: needs.release.outputs.release_created
69
+ steps:
70
+ - uses: actions/checkout@v2
71
+ with:
72
+ fetch-depth: 0
73
+ persist-credentials: false
74
+
75
+ - uses: actions/setup-node@v1
76
+ with:
77
+ node-version: 16
78
+ registry-url: 'https://registry.npmjs.org'
79
+
80
+ - run: npm ci
81
+ - run: npm publish
82
+ env:
83
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
84
+
85
+ - run: npm pack
86
+ - uses: svenstaro/upload-release-action@483c1e56f95e88835747b1c7c60581215016cbf2
87
+ with:
88
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
89
+ tag: ${{ needs.release.outputs.tag_name }}
90
+ file: shaka-player-*.tgz
91
+ file_glob: true
92
+ overwrite: true
93
+
94
+ appspot:
95
+ runs-on: ubuntu-latest
96
+ needs: release
97
+ if: needs.release.outputs.release_created
98
+ steps:
99
+ - uses: actions/checkout@v2
100
+ with:
101
+ fetch-depth: 0
102
+ persist-credentials: false
103
+
104
+ - uses: actions/setup-node@v1
105
+ with:
106
+ node-version: 16
107
+ registry-url: 'https://registry.npmjs.org'
108
+
109
+ - name: Compute appspot subdomain and promotion
110
+ run: |
111
+ # This is the same as the version tag, but with dots replaced by
112
+ # dashes. For example, v3.2.2 would have the subdomain v3-2-2.
113
+ APPSPOT_SUBDOMAIN=$( echo ${{ needs.release.outputs.tag_name }} | sed -e 's/\./-/g' )
114
+ echo APPSPOT_SUBDOMAIN=$APPSPOT_SUBDOMAIN >> $GITHUB_ENV
115
+
116
+ # "Promoting" an appspot deployment makes it the default which shows
117
+ # up on shaka-player-demo.appspot.com (no subdomain). This should be
118
+ # done for the latest release version from the latest release branch.
119
+ RELEASE_TAGS=$(git tag | grep ^v[0-9] | grep -Ev -- '-(master|main)')
120
+ LATEST_RELEASE=$(echo "$RELEASE_TAGS" | sort --version-sort | tail -1)
121
+ TAG_NAME=${{ needs.release.outputs.tag_name }}
122
+
123
+ if [[ "$TAG_NAME" == "$LATEST_RELEASE" ]]; then
124
+ echo APPSPOT_PROMOTE=true >> $GITHUB_ENV
125
+ else
126
+ echo APPSPOT_PROMOTE=false >> $GITHUB_ENV
127
+ fi
128
+
129
+ # Debug the decisions made here.
130
+ echo "Subdomain: $APPSPOT_SUBDOMAIN"
131
+ echo "Latest release: $LATEST_RELEASE"
132
+ echo "This release: $TAG_NAME"
133
+ echo "Promote: $APPSPOT_PROMOTE"
134
+
135
+ - uses: ./.github/workflows/custom-actions/prep-for-appspot
136
+
137
+ - uses: google-github-actions/auth@v0
138
+ with:
139
+ credentials_json: '${{ secrets.APPENGINE_DEPLOY_KEY }}'
140
+
141
+ - uses: google-github-actions/deploy-appengine@v0
142
+ with:
143
+ project_id: shaka-player-demo
144
+ version: ${{ env.APPSPOT_SUBDOMAIN }}
145
+ promote: ${{ env.APPSPOT_PROMOTE }}
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+
3
+ # A script to launch a homedir-installed copy of Safari in Karma. Used with
4
+ # karma-script-launcher and --browsers path/to/script.
5
+
6
+ # There is an issue where opening a URL in a browser that is not already open
7
+ # will also open it in the default browser. See
8
+ # https://apple.stackexchange.com/a/122000/454832 and the comments below it for
9
+ # details.
10
+
11
+ # The workaround is to open the browser explicitly first, without a URL.
12
+ open -a ~/Applications/Safari.app --fresh
13
+ sleep 5
14
+
15
+ # Then open the browser with the URL, and wait for it to quite. In fact, the
16
+ # browser won't be closed automatically at all, and Karma will kill this script
17
+ # when the tests complete. But if we don't wait, Karma will error instead.
18
+ open -a ~/Applications/Safari.app --wait-apps "$1"
@@ -0,0 +1,93 @@
1
+ name: Selenium Lab Tests
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ # Allows for manual triggering on PRs. They should be reviewed first, to
6
+ # avoid malicious code executing in the lab.
7
+ inputs:
8
+ pr:
9
+ description: "A PR number to build and test in the lab. If empty, will build and test from main."
10
+ required: false
11
+ schedule:
12
+ # Runs every night at 2am PST / 10am UTC, testing against the main branch.
13
+ - cron: '0 10 * * *'
14
+
15
+ # Only one run of this workflow is allowed at a time, since it uses physical
16
+ # resources in our lab.
17
+ concurrency: selenium-lab
18
+
19
+ jobs:
20
+ lab-tests:
21
+ # This is a self-hosted runner in a Docker container, with access to our
22
+ # lab's Selenium grid on port 4444.
23
+ runs-on: self-hosted-selenium
24
+
25
+ steps:
26
+ # This runs on our self-hosted runner, and the Docker image it is based
27
+ # on doesn't have GitHub's CLI pre-installed. This installs it. Taken
28
+ # verbatim from the official installation instructions at
29
+ # https://github.com/cli/cli/blob/trunk/docs/install_linux.md
30
+ - name: Install GitHub Actions CLI
31
+ run: |
32
+ curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
33
+ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
34
+ sudo apt update
35
+ sudo apt install gh
36
+
37
+ - name: Compute ref
38
+ run: |
39
+ if [[ "${{ github.event.inputs.pr }}" != "" ]]; then
40
+ echo LAB_TEST_REF="refs/pull/${{ github.event.inputs.pr }}/head" >> $GITHUB_ENV
41
+ else
42
+ echo LAB_TEST_REF="main" >> $GITHUB_ENV
43
+ fi
44
+
45
+ - uses: actions/checkout@v2
46
+ with:
47
+ ref: ${{ env.LAB_TEST_REF }}
48
+
49
+ - name: Set Commit Status to Pending
50
+ uses: ./.github/workflows/custom-actions/set-commit-status
51
+ with:
52
+ context: Selenium Lab Tests
53
+ state: pending
54
+ token: ${{ secrets.GITHUB_TOKEN }}
55
+
56
+ - uses: actions/setup-node@v1
57
+ with:
58
+ node-version: 16
59
+ registry-url: 'https://registry.npmjs.org'
60
+
61
+ # The Docker image for this self-hosted runner doesn't contain java.
62
+ - uses: actions/setup-java@v2
63
+ with:
64
+ distribution: zulu
65
+ java-version: 11
66
+
67
+ # The Docker image for this self-hosted runner has "python3" but not
68
+ # plain "python".
69
+ - name: Build Player
70
+ run: python3 build/all.py
71
+
72
+ # Run tests on the Selenium grid in our lab. This uses a private
73
+ # hostname and TLS cert to get EME tests working on all platforms
74
+ # (since EME only works on https or localhost).
75
+ - name: Test Player
76
+ run: |
77
+ python3 build/test.py \
78
+ --reporters spec --spec-hide-passed \
79
+ --drm \
80
+ --lets-encrypt-folder /etc/shakalab.rocks \
81
+ --hostname karma.shakalab.rocks \
82
+ --port 61731 \
83
+ --grid-config build/shaka-lab.yaml \
84
+ --grid-address selenium-grid.lab:4444
85
+
86
+ - name: Report Final Commit Status
87
+ # Will run on success or failure, but not if the workflow is cancelled.
88
+ if: ${{ success() || failure() }}
89
+ uses: ./.github/workflows/custom-actions/set-commit-status
90
+ with:
91
+ context: Selenium Lab Tests
92
+ state: ${{ job.status }}
93
+ token: ${{ secrets.GITHUB_TOKEN }}
package/AUTHORS CHANGED
@@ -33,6 +33,7 @@ Enson Choy <enson.choy@harmonicinc.com>
33
33
  Esteban Dosztal <edosztal@gmail.com>
34
34
  Fadomire <fadomire@gmail.com>
35
35
  Gil Gonen <gil.gonen@gmail.com>
36
+ Giorgio Gamberoni <giorgio.gamberoni@gmail.com>
36
37
  Giuseppe Samela <giuseppe.samela@gmail.com>
37
38
  Google Inc. <*@google.com>
38
39
  Itay Kinnrot <Itay.Kinnrot@Kaltura.com>
@@ -41,6 +42,7 @@ Jesper Haug Karsrud <jesper.karsrud@gmail.com>
41
42
  Johan Sundström <oyasumi@gmail.com>
42
43
  Jonas Birmé <jonas.birme@eyevinn.se>
43
44
  Jozef Chúťka <jozefchutka@gmail.com>
45
+ Jun Hong Chong <chongjunhong@gmail.com>
44
46
  JW Player <*@jwplayer.com>
45
47
  Lucas Gabriel Sánchez <unkiwii@gmail.com>
46
48
  Matthias Van Parijs <matvp91@gmail.com>