shaka-player 4.6.3 → 4.7.0

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 (608) hide show
  1. package/README.md +1 -0
  2. package/dist/controls.css +1 -1
  3. package/dist/controls.css.map +1 -1
  4. package/dist/deps.js +13 -9
  5. package/dist/locales.js +33 -33
  6. package/dist/shaka-player.compiled.d.ts +47 -4
  7. package/dist/shaka-player.compiled.debug.d.ts +47 -4
  8. package/dist/shaka-player.compiled.debug.externs.js +50 -2
  9. package/dist/shaka-player.compiled.debug.js +408 -376
  10. package/dist/shaka-player.compiled.debug.map +4 -4
  11. package/dist/shaka-player.compiled.externs.js +50 -2
  12. package/dist/shaka-player.compiled.js +1134 -1118
  13. package/dist/shaka-player.compiled.map +4 -4
  14. package/dist/shaka-player.ui.d.ts +69 -5
  15. package/dist/shaka-player.ui.debug.d.ts +69 -5
  16. package/dist/shaka-player.ui.debug.externs.js +82 -2
  17. package/dist/shaka-player.ui.debug.js +457 -420
  18. package/dist/shaka-player.ui.debug.map +4 -4
  19. package/dist/shaka-player.ui.externs.js +82 -2
  20. package/dist/shaka-player.ui.js +1305 -1289
  21. package/dist/shaka-player.ui.map +4 -4
  22. package/externs/mediasession.js +7 -0
  23. package/externs/shaka/abr_manager.js +8 -0
  24. package/externs/shaka/manifest.js +3 -3
  25. package/externs/shaka/player.js +59 -4
  26. package/lib/abr/simple_abr_manager.js +41 -15
  27. package/lib/ads/client_side_ad_manager.js +4 -0
  28. package/lib/ads/media_tailor_ad_manager.js +5 -0
  29. package/lib/ads/server_side_ad_manager.js +4 -0
  30. package/lib/cea/cea708_service.js +1 -1
  31. package/lib/cea/cea708_window.js +95 -7
  32. package/lib/dash/dash_parser.js +55 -11
  33. package/lib/hls/hls_parser.js +17 -5
  34. package/lib/media/adaptation_set_criteria.js +76 -10
  35. package/lib/media/drm_engine.js +0 -3
  36. package/lib/media/media_source_engine.js +42 -18
  37. package/lib/media/segment_reference.js +12 -0
  38. package/lib/media/streaming_engine.js +58 -5
  39. package/lib/media/video_wrapper.js +4 -3
  40. package/lib/player.js +95 -11
  41. package/lib/text/simple_text_displayer.js +8 -7
  42. package/lib/text/text_utils.js +39 -13
  43. package/lib/text/ui_text_displayer.js +20 -11
  44. package/lib/text/web_vtt_generator.js +1 -1
  45. package/lib/util/cmsd_manager.js +269 -0
  46. package/lib/util/content_steering_manager.js +5 -1
  47. package/lib/util/mime_utils.js +6 -2
  48. package/lib/util/periods.js +108 -39
  49. package/lib/util/player_configuration.js +19 -5
  50. package/lib/util/stream_utils.js +82 -13
  51. package/package.json +1 -1
  52. package/ui/audio_language_selection.js +3 -0
  53. package/ui/controls.js +60 -0
  54. package/ui/externs/ui.js +12 -1
  55. package/ui/hidden_fast_forward_button.js +32 -0
  56. package/ui/hidden_rewind_button.js +32 -0
  57. package/ui/hidden_seek_button.js +121 -0
  58. package/ui/less/buttons.less +50 -0
  59. package/ui/less/containers.less +18 -0
  60. package/ui/resolution_selection.js +2 -0
  61. package/ui/ui.js +2 -0
  62. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -75
  63. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
  64. package/.github/ISSUE_TEMPLATE/question.md +0 -26
  65. package/.github/config.yml +0 -1
  66. package/.github/workflows/appspot.yaml +0 -39
  67. package/.github/workflows/build-and-test.yaml +0 -222
  68. package/.github/workflows/compute-incremental-coverage.py +0 -265
  69. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +0 -56
  70. package/.github/workflows/custom-actions/set-commit-status/action.yaml +0 -37
  71. package/.github/workflows/deflake.yaml +0 -31
  72. package/.github/workflows/demo-version-index.yaml +0 -43
  73. package/.github/workflows/nightly-demo.yaml +0 -42
  74. package/.github/workflows/release-please.yaml +0 -193
  75. package/.github/workflows/report-incremental-coverage.yaml +0 -39
  76. package/.github/workflows/safari-homedir-launcher.sh +0 -18
  77. package/.github/workflows/selenium-lab-tests.yaml +0 -370
  78. package/.github/workflows/shaka-bot-commands/command-help.sh +0 -27
  79. package/.github/workflows/shaka-bot-commands/command-test.sh +0 -56
  80. package/.github/workflows/shaka-bot-commands/lib.sh +0 -83
  81. package/.github/workflows/shaka-bot-commands/main.sh +0 -51
  82. package/.github/workflows/sync-labels.yaml +0 -33
  83. package/.github/workflows/talk-to-shaka-bot.yaml +0 -29
  84. package/.github/workflows/update-issues.yaml +0 -31
  85. package/.github/workflows/update-screenshots.yaml +0 -142
  86. package/.github/workflows/validate-pr-title.yaml +0 -27
  87. package/CHANGELOG.md +0 -5764
  88. package/CODE_OF_CONDUCT.md +0 -93
  89. package/CONTRIBUTING.md +0 -76
  90. package/demo/TengwarTelcontar.woff2 +0 -0
  91. package/demo/app_logo_144.png +0 -0
  92. package/demo/app_logo_192.png +0 -0
  93. package/demo/app_logo_256.png +0 -0
  94. package/demo/app_logo_384.png +0 -0
  95. package/demo/app_logo_512.png +0 -0
  96. package/demo/app_manifest.json +0 -29
  97. package/demo/asset_card.js +0 -410
  98. package/demo/autoTemplate.txt +0 -61
  99. package/demo/cast_receiver/idle1.jpg +0 -0
  100. package/demo/cast_receiver/idle2.jpg +0 -0
  101. package/demo/cast_receiver/idle3.jpg +0 -0
  102. package/demo/cast_receiver/index.html +0 -75
  103. package/demo/cast_receiver/receiver_app.css +0 -111
  104. package/demo/cast_receiver/receiver_app.js +0 -158
  105. package/demo/close_button.js +0 -60
  106. package/demo/common/asset.js +0 -511
  107. package/demo/common/assets.js +0 -1635
  108. package/demo/config.js +0 -859
  109. package/demo/custom.js +0 -907
  110. package/demo/customWarning.txt +0 -8
  111. package/demo/demo.less +0 -591
  112. package/demo/demo_uncompiled.js +0 -11
  113. package/demo/demo_utils.js +0 -113
  114. package/demo/favicon.ico +0 -0
  115. package/demo/front.js +0 -156
  116. package/demo/icons/README.md +0 -4
  117. package/demo/icons/baseline-audiotrack-24px.svg +0 -1
  118. package/demo/icons/baseline-closed_caption-24px.svg +0 -1
  119. package/demo/icons/baseline-fast_forward-24px.svg +0 -1
  120. package/demo/icons/baseline-language-24px.svg +0 -1
  121. package/demo/icons/baseline-live_tv-24px.svg +0 -1
  122. package/demo/icons/baseline-subtitles-24px.svg +0 -1
  123. package/demo/icons/baseline-surround_sound-24px.svg +0 -1
  124. package/demo/icons/custom_ad.svg +0 -1
  125. package/demo/icons/custom_box_with_text.svg +0 -1
  126. package/demo/icons/custom_clear_key.svg +0 -1
  127. package/demo/icons/custom_high_definition.svg +0 -1
  128. package/demo/icons/custom_playready.svg +0 -1
  129. package/demo/icons/custom_ultra_high_definition.svg +0 -1
  130. package/demo/icons/custom_widevine.svg +0 -1
  131. package/demo/index.html +0 -173
  132. package/demo/input.js +0 -270
  133. package/demo/input_container.js +0 -218
  134. package/demo/load.js +0 -156
  135. package/demo/main.js +0 -1854
  136. package/demo/search.js +0 -452
  137. package/demo/service_worker.js +0 -355
  138. package/demo/shaka_logo_trans.png +0 -0
  139. package/demo/tooltip.js +0 -29
  140. package/demo/visualizer.js +0 -335
  141. package/demo/visualizer_button.js +0 -84
  142. package/dist/demo.compiled.debug.js +0 -340
  143. package/dist/demo.compiled.debug.map +0 -8
  144. package/dist/demo.compiled.js +0 -340
  145. package/dist/demo.compiled.map +0 -8
  146. package/dist/demo.css +0 -6
  147. package/dist/demo.css.map +0 -1
  148. package/dist/receiver.compiled.debug.js +0 -187
  149. package/dist/receiver.compiled.debug.map +0 -8
  150. package/dist/receiver.compiled.js +0 -187
  151. package/dist/receiver.compiled.map +0 -8
  152. package/docs/announcement-list-join-group.png +0 -0
  153. package/docs/api-mainpage.md +0 -28
  154. package/docs/design/REDESIGN.md +0 -283
  155. package/docs/design/architecture.md +0 -13
  156. package/docs/design/bg-fetch-after.gv +0 -29
  157. package/docs/design/bg-fetch-after.gv.png +0 -0
  158. package/docs/design/bg-fetch-before.gv +0 -18
  159. package/docs/design/bg-fetch-before.gv.png +0 -0
  160. package/docs/design/bg-fetch.md +0 -134
  161. package/docs/design/cast.gv +0 -35
  162. package/docs/design/cast.gv.png +0 -0
  163. package/docs/design/chromecast.md +0 -151
  164. package/docs/design/codec_preferences.md +0 -158
  165. package/docs/design/dash-audio-channels.md +0 -123
  166. package/docs/design/dash-manifests.md +0 -248
  167. package/docs/design/dash-timeline.svg +0 -4
  168. package/docs/design/dataflow.gv +0 -66
  169. package/docs/design/dataflow.gv.png +0 -0
  170. package/docs/design/export.md +0 -70
  171. package/docs/design/fuzzy-locale-matching.md +0 -40
  172. package/docs/design/gap-jumping.md +0 -151
  173. package/docs/design/lcevc-architecture.png +0 -0
  174. package/docs/design/lcevc-demo.png +0 -0
  175. package/docs/design/lcevc-integration.md +0 -72
  176. package/docs/design/locale_compatibility.svg +0 -1
  177. package/docs/design/locales_tree.svg +0 -1
  178. package/docs/design/localization-design-principles.md +0 -158
  179. package/docs/design/newdemo.gv +0 -83
  180. package/docs/design/newdemo.gv.png +0 -0
  181. package/docs/design/offline.gv +0 -43
  182. package/docs/design/offline.gv.png +0 -0
  183. package/docs/design/offline.md +0 -153
  184. package/docs/design/ownership.gv +0 -76
  185. package/docs/design/ownership.gv.png +0 -0
  186. package/docs/design/preload.md +0 -299
  187. package/docs/design/preload.png +0 -0
  188. package/docs/design/talking-about-languages.md +0 -46
  189. package/docs/design/timeline.svg +0 -152
  190. package/docs/design/ui.md +0 -31
  191. package/docs/design/ui_player_relationships.svg +0 -1
  192. package/docs/jsdoc-plugin.js +0 -74
  193. package/docs/jsdoc-template/README.md +0 -1
  194. package/docs/jsdoc-template/publish.js +0 -879
  195. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
  196. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
  197. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
  198. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  199. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  200. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  201. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
  202. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
  203. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
  204. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.eot +0 -0
  205. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
  206. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.woff +0 -0
  207. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  208. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  209. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  210. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
  211. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
  212. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
  213. package/docs/jsdoc-template/static/scripts/linenumber.js +0 -44
  214. package/docs/jsdoc-template/static/scripts/show-widget.js +0 -55
  215. package/docs/jsdoc-template/static/styles/jsdoc-default.css +0 -438
  216. package/docs/jsdoc-template/tmpl/augments.tmpl +0 -10
  217. package/docs/jsdoc-template/tmpl/container.tmpl +0 -205
  218. package/docs/jsdoc-template/tmpl/details.tmpl +0 -152
  219. package/docs/jsdoc-template/tmpl/example.tmpl +0 -2
  220. package/docs/jsdoc-template/tmpl/examples.tmpl +0 -13
  221. package/docs/jsdoc-template/tmpl/exceptions.tmpl +0 -32
  222. package/docs/jsdoc-template/tmpl/layout.tmpl +0 -50
  223. package/docs/jsdoc-template/tmpl/mainpage.tmpl +0 -14
  224. package/docs/jsdoc-template/tmpl/members.tmpl +0 -47
  225. package/docs/jsdoc-template/tmpl/method.tmpl +0 -140
  226. package/docs/jsdoc-template/tmpl/modifies.tmpl +0 -14
  227. package/docs/jsdoc-template/tmpl/params.tmpl +0 -131
  228. package/docs/jsdoc-template/tmpl/properties.tmpl +0 -125
  229. package/docs/jsdoc-template/tmpl/returns.tmpl +0 -19
  230. package/docs/jsdoc-template/tmpl/source.tmpl +0 -8
  231. package/docs/jsdoc-template/tmpl/tutorial.tmpl +0 -21
  232. package/docs/jsdoc-template/tmpl/type.tmpl +0 -7
  233. package/docs/jsdoc.conf.json +0 -38
  234. package/docs/shaka-player-logo.png +0 -0
  235. package/docs/style.md +0 -174
  236. package/docs/tutorials/a11y.md +0 -64
  237. package/docs/tutorials/ad_monetization.md +0 -292
  238. package/docs/tutorials/application-level-redirects.md +0 -94
  239. package/docs/tutorials/architecture.md +0 -32
  240. package/docs/tutorials/basic-usage.md +0 -89
  241. package/docs/tutorials/blob-url.md +0 -15
  242. package/docs/tutorials/config.md +0 -148
  243. package/docs/tutorials/debugging.md +0 -189
  244. package/docs/tutorials/drm-config.md +0 -274
  245. package/docs/tutorials/errors.md +0 -95
  246. package/docs/tutorials/fairplay.md +0 -242
  247. package/docs/tutorials/faq.md +0 -252
  248. package/docs/tutorials/index.json +0 -29
  249. package/docs/tutorials/lcevc.md +0 -118
  250. package/docs/tutorials/license-server-auth.md +0 -248
  251. package/docs/tutorials/license-wrapping.md +0 -168
  252. package/docs/tutorials/manifest-parser.md +0 -365
  253. package/docs/tutorials/network-and-buffering-config.md +0 -119
  254. package/docs/tutorials/offline.md +0 -683
  255. package/docs/tutorials/plugins.md +0 -184
  256. package/docs/tutorials/selenium-grid-config.md +0 -174
  257. package/docs/tutorials/service-worker.md +0 -106
  258. package/docs/tutorials/ui-customization.md +0 -288
  259. package/docs/tutorials/ui.md +0 -230
  260. package/docs/tutorials/upgrade-manifest.md +0 -281
  261. package/docs/tutorials/upgrade.md +0 -104
  262. package/docs/tutorials/welcome.md +0 -108
  263. package/docs/tutorials/widevine-service-certs.md +0 -45
  264. package/karma.conf.js +0 -879
  265. package/maintained-branches.md +0 -15
  266. package/roadmap.md +0 -186
  267. package/test/abr/simple_abr_manager_unit.js +0 -398
  268. package/test/ads/ad_manager_unit.js +0 -260
  269. package/test/assumptions/uint8_array_unit.js +0 -22
  270. package/test/cast/cast_proxy_unit.js +0 -736
  271. package/test/cast/cast_receiver_integration.js +0 -488
  272. package/test/cast/cast_receiver_unit.js +0 -1183
  273. package/test/cast/cast_sender_unit.js +0 -973
  274. package/test/cast/cast_utils_unit.js +0 -311
  275. package/test/cea/cea608_memory_unit.js +0 -411
  276. package/test/cea/cea708_service_unit.js +0 -674
  277. package/test/cea/cea708_window_unit.js +0 -373
  278. package/test/cea/cea_decoder_unit.js +0 -615
  279. package/test/cea/dtvcc_packet_builder_unit.js +0 -158
  280. package/test/cea/dtvcc_packet_unit.js +0 -60
  281. package/test/cea/mp4_cea_parser_unit.js +0 -127
  282. package/test/codec_switching/codec_switching_integration.js +0 -182
  283. package/test/dash/dash_parser_content_protection_unit.js +0 -998
  284. package/test/dash/dash_parser_integration.js +0 -74
  285. package/test/dash/dash_parser_live_unit.js +0 -1542
  286. package/test/dash/dash_parser_manifest_unit.js +0 -3121
  287. package/test/dash/dash_parser_segment_base_unit.js +0 -421
  288. package/test/dash/dash_parser_segment_list_unit.js +0 -380
  289. package/test/dash/dash_parser_segment_template_unit.js +0 -910
  290. package/test/dash/mpd_utils_unit.js +0 -794
  291. package/test/demo/demo_unit.js +0 -108
  292. package/test/deprecate/enforcer_unit.js +0 -74
  293. package/test/deprecate/version_unit.js +0 -57
  294. package/test/hls/hls_live_unit.js +0 -1330
  295. package/test/hls/hls_parser_unit.js +0 -5276
  296. package/test/hls/manifest_text_parser_unit.js +0 -545
  297. package/test/media/adaptation_set_criteria_unit.js +0 -806
  298. package/test/media/adaptation_set_unit.js +0 -229
  299. package/test/media/buffering_observer_unit.js +0 -143
  300. package/test/media/closed_caption_parser_unit.js +0 -18
  301. package/test/media/content_workarounds_unit.js +0 -43
  302. package/test/media/drm_engine_integration.js +0 -356
  303. package/test/media/drm_engine_unit.js +0 -2778
  304. package/test/media/media_source_engine_integration.js +0 -691
  305. package/test/media/media_source_engine_unit.js +0 -1512
  306. package/test/media/mp4_segment_index_parser_unit.js +0 -80
  307. package/test/media/play_rate_controller_unit.js +0 -69
  308. package/test/media/playhead_unit.js +0 -1394
  309. package/test/media/presentation_timeline_unit.js +0 -477
  310. package/test/media/quality_observer_unit.js +0 -138
  311. package/test/media/region_observer_unit.js +0 -374
  312. package/test/media/region_timeline_unit.js +0 -139
  313. package/test/media/segment_index_unit.js +0 -1080
  314. package/test/media/segment_prefetch_unit.js +0 -243
  315. package/test/media/segment_reference_unit.js +0 -63
  316. package/test/media/stall_detector_unit.js +0 -184
  317. package/test/media/streaming_engine_integration.js +0 -632
  318. package/test/media/streaming_engine_unit.js +0 -4211
  319. package/test/media/time_ranges_utils_unit.js +0 -123
  320. package/test/media/webm_segment_index_parser_unit.js +0 -90
  321. package/test/mss/mss_parser_content_protection_unit.js +0 -49
  322. package/test/mss/mss_parser_unit.js +0 -474
  323. package/test/mss/mss_player_integration.js +0 -124
  324. package/test/net/data_uri_plugin_unit.js +0 -105
  325. package/test/net/http_plugin_unit.js +0 -439
  326. package/test/net/networking_engine_unit.js +0 -1236
  327. package/test/net/networking_utils_unit.js +0 -37
  328. package/test/offline/download_progress_estimator_unit.js +0 -90
  329. package/test/offline/indexeddb_storage_unit.js +0 -192
  330. package/test/offline/manifest_convert_unit.js +0 -622
  331. package/test/offline/offline_integration.js +0 -168
  332. package/test/offline/offline_manifest_parser_unit.js +0 -231
  333. package/test/offline/offline_scheme_unit.js +0 -154
  334. package/test/offline/offline_uri_unit.js +0 -59
  335. package/test/offline/storage_compatibility_unit.js +0 -344
  336. package/test/offline/storage_integration.js +0 -1858
  337. package/test/player_external.js +0 -237
  338. package/test/player_integration.js +0 -1371
  339. package/test/player_load_graph_integration.js +0 -865
  340. package/test/player_src_equals_external.js +0 -154
  341. package/test/player_src_equals_integration.js +0 -527
  342. package/test/player_unit.js +0 -4434
  343. package/test/polyfill/media_capabilities_unit.js +0 -277
  344. package/test/polyfill/patchedmediakeys_apple_unit.js +0 -130
  345. package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
  346. package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
  347. package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
  348. package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
  349. package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
  350. package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
  351. package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
  352. package/test/test/assets/3675/dash_0.mpd +0 -30
  353. package/test/test/assets/3675/dash_1.mpd +0 -30
  354. package/test/test/assets/3675/dash_2.mpd +0 -30
  355. package/test/test/assets/3675/dash_3.mpd +0 -30
  356. package/test/test/assets/3675/dash_4.mpd +0 -30
  357. package/test/test/assets/3675/dash_5.mpd +0 -26
  358. package/test/test/assets/3675/init-stream0.m4s +0 -0
  359. package/test/test/assets/audio-xhe-aac.mp4 +0 -0
  360. package/test/test/assets/audio.ts +0 -0
  361. package/test/test/assets/captions-test.ts +0 -0
  362. package/test/test/assets/cea-init.mp4 +0 -0
  363. package/test/test/assets/cea-segment.mp4 +0 -0
  364. package/test/test/assets/chapters.srt +0 -11
  365. package/test/test/assets/chapters.vtt +0 -10
  366. package/test/test/assets/chapters2.vtt +0 -10
  367. package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
  368. package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
  369. package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
  370. package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
  371. package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
  372. package/test/test/assets/dash-aes-128/dash.mpd +0 -18
  373. package/test/test/assets/dash-aes-128/license +0 -1
  374. package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
  375. package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
  376. package/test/test/assets/dash-multi-codec/dash.mpd +0 -32
  377. package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
  378. package/test/test/assets/db-dump-v1.json +0 -1
  379. package/test/test/assets/db-dump-v2-broken.json +0 -1
  380. package/test/test/assets/db-dump-v2-clean.json +0 -1
  381. package/test/test/assets/db-dump-v3.json +0 -1
  382. package/test/test/assets/db-dump-v4-broken.json +0 -1
  383. package/test/test/assets/db-dump-v5.json +0 -1
  384. package/test/test/assets/empty_caption_video_init.mp4 +0 -0
  385. package/test/test/assets/empty_caption_video_segment.mp4 +0 -0
  386. package/test/test/assets/encrypted-sintel-audio-init.mp4 +0 -0
  387. package/test/test/assets/encrypted-sintel-audio-segment.mp4 +0 -0
  388. package/test/test/assets/encrypted-sintel-video-init.mp4 +0 -0
  389. package/test/test/assets/encrypted-sintel-video-segment.mp4 +0 -0
  390. package/test/test/assets/green-pixel.mp4 +0 -0
  391. package/test/test/assets/green-pixel.txt +0 -15
  392. package/test/test/assets/h265-cea-init.mp4 +0 -0
  393. package/test/test/assets/h265-cea-segment.mp4 +0 -0
  394. package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
  395. package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
  396. package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
  397. package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
  398. package/test/test/assets/hls-raw-aac/manifest.m3u8 +0 -4
  399. package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +0 -14
  400. package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
  401. package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
  402. package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
  403. package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
  404. package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
  405. package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
  406. package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
  407. package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
  408. package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +0 -31
  409. package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
  410. package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
  411. package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
  412. package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
  413. package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
  414. package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
  415. package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
  416. package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
  417. package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +0 -31
  418. package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +0 -13
  419. package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
  420. package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
  421. package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
  422. package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
  423. package/test/test/assets/hls-raw-mp3/playlist.m3u8 +0 -4
  424. package/test/test/assets/hls-ts-aac/playlist.m3u8 +0 -23
  425. package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
  426. package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
  427. package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
  428. package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
  429. package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
  430. package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
  431. package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
  432. package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
  433. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
  434. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
  435. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
  436. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
  437. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
  438. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
  439. package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +0 -19
  440. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
  441. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
  442. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
  443. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
  444. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
  445. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
  446. package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +0 -19
  447. package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
  448. package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
  449. package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
  450. package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
  451. package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
  452. package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
  453. package/test/test/assets/hls-ts-h264/prog_index.m3u8 +0 -25
  454. package/test/test/assets/hls-ts-h265/0.ts +0 -0
  455. package/test/test/assets/hls-ts-h265/hevc.m3u8 +0 -6
  456. package/test/test/assets/hls-ts-h265/index.m3u8 +0 -7
  457. package/test/test/assets/hls-ts-mp3/manifest.m3u8 +0 -13
  458. package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
  459. package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
  460. package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
  461. package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
  462. package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +0 -17
  463. package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
  464. package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
  465. package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
  466. package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
  467. package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
  468. package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
  469. package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +0 -4
  470. package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
  471. package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
  472. package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +0 -9
  473. package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +0 -24
  474. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
  475. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
  476. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
  477. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
  478. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
  479. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
  480. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
  481. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
  482. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
  483. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
  484. package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +0 -14
  485. package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +0 -23
  486. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
  487. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
  488. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
  489. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
  490. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
  491. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
  492. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
  493. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
  494. package/test/test/assets/id3-metadata.aac +0 -0
  495. package/test/test/assets/id3-metadata.ts +0 -0
  496. package/test/test/assets/index-segment.mp4 +0 -0
  497. package/test/test/assets/index-segment.webm +0 -0
  498. package/test/test/assets/init-segment.webm +0 -0
  499. package/test/test/assets/large_file.mpd +0 -4930
  500. package/test/test/assets/multidrm-audio-init.mp4 +0 -0
  501. package/test/test/assets/multidrm-audio-segment.mp4 +0 -0
  502. package/test/test/assets/multidrm-video-init.mp4 +0 -0
  503. package/test/test/assets/multidrm-video-segment.mp4 +0 -0
  504. package/test/test/assets/multiple-trun-init.mp4 +0 -0
  505. package/test/test/assets/multiple-trun-segment.mp4 +0 -0
  506. package/test/test/assets/sintel-audio-init.mp4 +0 -0
  507. package/test/test/assets/sintel-audio-segment.mp4 +0 -0
  508. package/test/test/assets/sintel-video-init.mp4 +0 -0
  509. package/test/test/assets/sintel-video-segment.mp4 +0 -0
  510. package/test/test/assets/small.mp4 +0 -0
  511. package/test/test/assets/text-clip-alt.vtt +0 -63
  512. package/test/test/assets/text-clip.vtt +0 -63
  513. package/test/test/assets/thumbnails-sprites.vtt +0 -10
  514. package/test/test/assets/thumbnails.vtt +0 -10
  515. package/test/test/assets/ttml-init.mp4 +0 -0
  516. package/test/test/assets/ttml-segment-multiplemdat.mp4 +0 -0
  517. package/test/test/assets/ttml-segment.mp4 +0 -0
  518. package/test/test/assets/video.ts +0 -0
  519. package/test/test/assets/vtt-init.mp4 +0 -0
  520. package/test/test/assets/vtt-segment-multi-payload.mp4 +0 -0
  521. package/test/test/assets/vtt-segment-no-duration.mp4 +0 -0
  522. package/test/test/assets/vtt-segment-settings.mp4 +0 -0
  523. package/test/test/assets/vtt-segment.mp4 +0 -0
  524. package/test/test/boot.js +0 -495
  525. package/test/test/externs/filters.js +0 -44
  526. package/test/test/externs/fontfaceonload.js +0 -29
  527. package/test/test/externs/jasmine.js +0 -670
  528. package/test/test/externs/karma.js +0 -26
  529. package/test/test/externs/require.js +0 -21
  530. package/test/test/externs/sprintf.js +0 -18
  531. package/test/test/namespace.js +0 -10
  532. package/test/test/util/canned_idb.js +0 -379
  533. package/test/test/util/cea_utils.js +0 -60
  534. package/test/test/util/dash_parser_util.js +0 -329
  535. package/test/test/util/fake_ad.js +0 -321
  536. package/test/test/util/fake_ad_manager.js +0 -122
  537. package/test/test/util/fake_demo_main.js +0 -144
  538. package/test/test/util/fake_drm_engine.js +0 -103
  539. package/test/test/util/fake_media_source_engine.js +0 -464
  540. package/test/test/util/fake_networking_engine.js +0 -381
  541. package/test/test/util/fake_segment_prefetch.js +0 -84
  542. package/test/test/util/fake_text_displayer.js +0 -60
  543. package/test/test/util/id3_generator.js +0 -100
  544. package/test/test/util/indexeddb_utils.js +0 -124
  545. package/test/test/util/jasmine_fetch.js +0 -382
  546. package/test/test/util/layout_tests.js +0 -434
  547. package/test/test/util/loader.js +0 -88
  548. package/test/test/util/manifest_generator.js +0 -705
  549. package/test/test/util/manifest_parser_util.js +0 -101
  550. package/test/test/util/mss_parser_util.js +0 -119
  551. package/test/test/util/offline_utils.js +0 -105
  552. package/test/test/util/simple_fakes.js +0 -535
  553. package/test/test/util/stream_generator.js +0 -676
  554. package/test/test/util/streaming_engine_util.js +0 -506
  555. package/test/test/util/test_scheme.js +0 -778
  556. package/test/test/util/ttml_utils.js +0 -77
  557. package/test/test/util/ui_utils.js +0 -183
  558. package/test/test/util/util.js +0 -374
  559. package/test/test/util/waiter.js +0 -406
  560. package/test/text/cue_integration.js +0 -51
  561. package/test/text/lrc_text_parser_unit.js +0 -98
  562. package/test/text/mp4_ttml_parser_unit.js +0 -171
  563. package/test/text/mp4_vtt_parser_unit.js +0 -195
  564. package/test/text/sbv_text_parser_unit.js +0 -81
  565. package/test/text/simple_text_displayer_unit.js +0 -468
  566. package/test/text/srt_text_parser_unit.js +0 -163
  567. package/test/text/ssa_text_parser_unit.js +0 -382
  568. package/test/text/text_displayer_layout_unit.js +0 -323
  569. package/test/text/text_engine_unit.js +0 -500
  570. package/test/text/text_track_integration.js +0 -186
  571. package/test/text/ttml_text_parser_unit.js +0 -2176
  572. package/test/text/ui_text_displayer_unit.js +0 -608
  573. package/test/text/vtt_text_parser_unit.js +0 -1363
  574. package/test/text/web_vtt_generator_unit.js +0 -144
  575. package/test/text/web_vtt_layout_integration.js +0 -524
  576. package/test/transmuxer/transmuxer_engine_integration.js +0 -69
  577. package/test/transmuxer/transmuxer_integration.js +0 -443
  578. package/test/ui/ad_ui_unit.js +0 -369
  579. package/test/ui/localization_unit.js +0 -508
  580. package/test/ui/ui_customization_unit.js +0 -208
  581. package/test/ui/ui_integration.js +0 -669
  582. package/test/ui/ui_unit.js +0 -902
  583. package/test/util/abortable_operation_unit.js +0 -624
  584. package/test/util/array_utils_unit.js +0 -58
  585. package/test/util/buffer_utils_unit.js +0 -185
  586. package/test/util/cmcd_manager_unit.js +0 -440
  587. package/test/util/content_steering_manager_unit.js +0 -427
  588. package/test/util/data_view_reader_unit.js +0 -254
  589. package/test/util/ebml_parser_unit.js +0 -297
  590. package/test/util/event_manager_unit.js +0 -185
  591. package/test/util/fake_event_target_unit.js +0 -123
  592. package/test/util/id3_utils_unit.js +0 -168
  593. package/test/util/iterables_unit.js +0 -68
  594. package/test/util/language_utils_unit.js +0 -240
  595. package/test/util/manifest_parser_utils_unit.js +0 -55
  596. package/test/util/mime_utils_unit.js +0 -64
  597. package/test/util/mp4_box_parsers_unit.js +0 -246
  598. package/test/util/mp4_parser_unit.js +0 -373
  599. package/test/util/multi_map_unit.js +0 -94
  600. package/test/util/object_utils_unit.js +0 -79
  601. package/test/util/periods_unit.js +0 -1623
  602. package/test/util/pssh_unit.js +0 -226
  603. package/test/util/state_history_unit.js +0 -101
  604. package/test/util/stream_utils_unit.js +0 -1068
  605. package/test/util/string_utils_unit.js +0 -166
  606. package/test/util/text_parser_unit.js +0 -165
  607. package/test/util/ts_parser_unit.js +0 -77
  608. package/test/util/xml_utils_unit.js +0 -444
@@ -1,288 +0,0 @@
1
- # Customizing the UI
2
-
3
-
4
- #### Configuring the layout
5
-
6
- Once the UI is created, you can pass in configuration options that change
7
- the look and functioning of the UI bar. For example, if you wanted to not have
8
- a seek bar, you could add the following line to the `init()` function from the
9
- UI basic usage tutorial, after creating the UI overlay:
10
-
11
- ```js
12
- const video = document.getElementById('video');
13
- const ui = video['ui'];
14
- const config = {
15
- addSeekBar: false
16
- };
17
- ui.configure(config);
18
- ```
19
-
20
- Controls will fire a {@link shaka.ui.Controls#event:UIUpdatedEvent} event once the
21
- config takes effect.
22
- See the docs for {@link shaka.extern.UIConfiguration} for more information.
23
-
24
- #### Customizing the number and order of controls
25
-
26
- For example, let's say that all you care about for your app is rewinding and
27
- fast-forwarding. You could add the following line to `init()`, right before
28
- creating the UI overlay. This will configure UI to ONLY provide these two buttons:
29
-
30
- ```js
31
- const config = {
32
- 'controlPanelElements': ['rewind', 'fast_forward']
33
- }
34
- ui.configure(config);
35
- ```
36
- This call will result in the controls panel having only two elements: rewind
37
- button and fast forward button, in that order. If the reversed order is desired,
38
- the call should be:
39
-
40
- ```js
41
- const config = {
42
- 'controlPanelElements': ['fast_forward', 'rewind']
43
- }
44
- ui.configure(config);
45
- ```
46
-
47
- The following elements can be added to the UI bar using this configuration value:
48
- * time_and_duration: adds an element tracking and displaying current progress of
49
- the presentation and the full presentation duration in the "0:10 / 1:00"
50
- form where "0:10" (ten seconds) is the number of seconds passed from the start of the presentation
51
- and "1:00" (one minute) is the presentation duration.
52
- * play_pause: adds a button that plays/pauses the video on click.
53
- * mute: adds a button that mutes/unmutes the video on click.
54
- * volume: adds a volume slider.
55
- * fullscreen: adds a button that toggles full screen mode on click.
56
- * overflow_menu: adds a button that opens an overflow menu with additional settings
57
- buttons. It's content is also configurable.
58
- * rewind: adds a button that rewinds the presentation on click; that is, it starts playing
59
- the presentation backwards.
60
- * fast_forward: adds a button that fast forwards the presentation on click; that is, it
61
- starts playing the presentation at an increased speed
62
- * spacer: adds a chunk of empty space between the adjacent elements.
63
- * picture_in_picture: adds a button that enables/disables picture-in-picture mode on browsers
64
- that support it. Button is invisible on other browsers. Note that it will use the
65
- [Document Picture-in-Picture API]() if supported.
66
- * loop: adds a button that controls if the currently selected video is played in a loop.
67
- * airplay: adds a button that opens a AirPlay dialog. The button is visible only if the browser
68
- supports AirPlay.
69
- * cast: adds a button that opens a Chromecast dialog. The button is visible only if there is
70
- at least one Chromecast device on the same network available for casting.
71
- * remote: adds a button that opens a Remote Playback dialog. The button is visible only if the
72
- browser supports Remote Playback API.
73
- * quality: adds a button that controls enabling/disabling of abr and video resolution selection.
74
- * language: adds a button that controls audio language selection.
75
- * playback_rate: adds a button that controls the playback rate selection.
76
- * captions: adds a button that controls the current text track selection (including turning it off).
77
- <!-- TODO: If we add more buttons that can be put in the order this way, list them here. -->
78
- [Document Picture-in-Picture API]: https://developer.chrome.com/docs/web-platform/document-picture-in-picture/
79
-
80
- Similarly, the 'overflowMenuButtons' configuration option can be used to control
81
- the contents of the overflow menu.
82
- The following buttons can be added to the overflow menu:
83
- * captions: adds a button that controls the current text track selection (including turning it off).
84
- The button is visible only if the content has at least one text track.
85
- * cast: adds a button that opens a Chromecast dialog. The button is visible only if there is
86
- at least one Chromecast device on the same network available for casting.
87
- * quality: adds a button that controls enabling/disabling of abr and video resolution selection.
88
- * language: adds a button that controls audio language selection.
89
- * picture_in_picture: adds a button that enables/disables picture-in-picture mode on browsers
90
- that support it. Button is invisible on other browsers. Note that it will use the
91
- [Document Picture-in-Picture API]() if supported.
92
- * loop: adds a button that controls if the currently selected video is played in a loop.
93
- * playback_rate: adds a button that controls the playback rate selection.
94
- * airplay: adds a button that opens a AirPlay dialog. The button is visible only if the browser
95
- supports AirPlay.
96
- * remote: adds a button that opens a Remote Playback dialog. The button is visible only if the
97
- browser supports Remote Playback API.
98
- * Statistics: adds a button that displays statistics of the video.
99
- <!-- TODO: If we add more buttons that can be put in the order this way, list them here. -->
100
-
101
- Example:
102
- ```js
103
- // Add only the cast button to the overflow menu, nothing else
104
- const config = {
105
- 'overflowMenuButtons' : ['cast']
106
- }
107
- ui.configure(config);
108
- ```
109
-
110
- An important note: the 'overflow_menu' button needs to be part of the 'controlPanelElements'
111
- layout for the overflow menu to be available to the user.
112
-
113
- #### Adding tooltips to control panel buttons
114
-
115
- Tooltips can be enabled to display the function of every button in the control panel. Where applicable, they will also contain the current selection in parenthesis.
116
-
117
- Example:
118
- ```js
119
- const config = {
120
- 'enableTooltips' : true
121
- }
122
- ui.configure(config);
123
- ```
124
-
125
- #### Replacing the default context menu
126
-
127
- A custom context menu can be added through the `customContextMenu` boolean. Additionally, the `contextMenuElements` option can be used to add elements to it.
128
- The following buttons can be added to the context menu:
129
- * Statistics: adds a button that displays statistics of the video.
130
- * loop: adds a button that controls if the currently selected video is played in a loop.
131
- * picture_in_picture: adds a button that enables/disables picture-in-picture mode on browsers
132
- that support it. Button is invisible on other browsers. Note that it will use the
133
- [Document Picture-in-Picture API]() if supported.
134
-
135
- Example:
136
- ```js
137
- const config = {
138
- 'customContextMenu' : true,
139
- 'contextMenuElements' : ['statistics'],
140
- }
141
- ui.configure(config);
142
- ```
143
-
144
- #### Configuring Statistics
145
- The list of statistics that are displayed when toggling the statistics button can be customized by specifying a `statisticsList` on the configuration. With the exception of `switchHistory` and `stateHistory`, all of the statistics from the {@link shaka.extern.Stats `Stats`} extern can be displayed.
146
-
147
- Example:
148
- ```js
149
- // Add a context menu with the 'statistics' button that displays a container with
150
- // the current 'width', 'height', 'playTime', and 'bufferingTime' values.
151
- const config = {
152
- 'customContextMenu' : true,
153
- 'contextMenuElements' : ['statistics'],
154
- 'statisticsList' : ['width', 'height', 'playTime', 'bufferingTime'],
155
- }
156
- ui.configure(config);
157
- ```
158
-
159
- The presence of the seek bar and the big play button in the center of the video element can be
160
- customized with `addSeekBar` and `addBigPlayButton` booleans in the config.
161
-
162
- UI layout can be reconfigured at any point after it's been created.
163
- Please note that custom layouts might need CSS adjustments to look good.
164
-
165
- #### Changing seek bar progress colors
166
- The seek bar consists of three segments: past (already played part of the presentation),
167
- future-buffered and future-unbuffered.
168
- To customize the colors, add your values to the config object under `seekBarColors`:
169
- ```js
170
- const config = {
171
- 'seekBarColors': {
172
- base: 'rgba(255, 255, 255, 0.3)',
173
- buffered: 'rgba(255, 255, 255, 0.54)',
174
- played: 'rgb(255, 255, 255)',
175
- }
176
- }
177
- ui.configure(config);
178
- ```
179
-
180
- If you're using our ad API, you can also specify the color for the ad break markers on
181
- the timeline:
182
- ```js
183
- const config = {
184
- 'seekBarColors': {
185
- adBreaks: 'rgb(255, 204, 0)',
186
- }
187
- }
188
- ui.configure(config);
189
- ```
190
-
191
- If you've chosen to display chapters, you can specify the color for the chapter markers on
192
- the timeline and the text color of the chapter titles that popup on hover:
193
- ```js
194
- const config = {
195
- displayChapters: true,
196
- seekBarColors: {
197
- chapterMarks: 'rgb(27, 27, 27)',
198
- chapterLabels: 'rgb(255, 255, 255)'
199
- }
200
- }
201
- ui.configure(config);
202
- ```
203
-
204
- #### Configuring playback, fast forward and rewind rates
205
- The rate in which the player can play, fast forward and rewind content can be configured using the `playbackRates`, `fastForwardRates` and `rewindRates` options.
206
-
207
- * `playbackRates`: List of rates available in the `playback_rate` menu.
208
- * `fastForwardRates`: List of rates available to cycle through every time the `fast_forward` button is clicked.
209
- * `rewindRates`: List of rates available to cycle through every time the `rewind` button is clicked.
210
-
211
- ```js
212
- const config = {
213
- 'controlPanelElements': ['playback_rate', 'fast_forward', 'rewind'],
214
- 'playbackRates': [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],
215
- 'fastForwardRates': [2, 4, 8, 1],
216
- 'rewindRates': [-1, -2, -4, -8],
217
- }
218
- ui.configure(config);
219
- ```
220
-
221
- #### Creating custom elements and adding them to the UI
222
- It's possible to add custom application-specific buttons to the UI.
223
- Each element has to have it's own class that implements the {@linksource shaka.extern.IUIElement}
224
- interface and register with {@linksource shaka.ui.Controls}.
225
- All our elements use {@linksource shaka.ui.Element} as a base class. Take a look to see if it's
226
- right for your custom buttons.
227
-
228
- Let's say, we want to create a button that allows user to skip the currently playing video and go to
229
- the next one.
230
-
231
- ```js
232
- // skipButton.js
233
-
234
- // Use shaka.ui.Element as a base class
235
- myapp.SkipButton = class extends shaka.ui.Element {
236
- constructor(parent, controls) {
237
- super(parent, controls);
238
-
239
- // The actual button that will be displayed
240
- this.button_ = document.createElement('button');
241
- this.button_.textContent = 'Skip current video';
242
- this.parent.appendChild(this.button_);
243
-
244
- // Listen for clicks on the button to start the next playback
245
- this.eventManager.listen(this.button_, 'click', () => {
246
- const nextManifest = /* Your logic to pick the next video to be played */
247
- myapp.getNextManifest();
248
-
249
- // shaka.ui.Element gives us access to the player object as member of the class
250
- this.player.load(nextManifest);
251
- });
252
- }
253
- };
254
-
255
-
256
- // Factory that will create a button at run time.
257
- myapp.SkipButton.Factory = class {
258
- create(rootElement, controls) {
259
- return new myapp.SkipButton(rootElement, controls);
260
- }
261
- };
262
-
263
- // Register our factory with the controls, so controls can create button instances.
264
- shaka.ui.Controls.registerElement(
265
- /* This name will serve as a reference to the button in the UI configuration object */ 'skip',
266
- new myapp.SkipButton.Factory());
267
-
268
- ```
269
-
270
- We have our button. Let's see how we can add it to the layout.
271
- Similar to specifying the order of shaka-provided controls, we'll need to
272
- add a line to the `init()` function in myapp.js
273
-
274
- ```js
275
- // This will add three buttons to the controls panel (in that order): shaka-provided
276
- // rewind and fast forward button and out custom skip button, referenced by the name
277
- // we used when registering the factory with the controls.
278
- uiConfig['controlPanelElements'] = ['rewind', 'fast_forward', 'skip'];
279
- ```
280
- <!-- TODO: Create a doc on best a11y practices for custom buttons and link to the
281
- localization docs explaining how to take advantage of our localization system. -->
282
-
283
- #### Shaka Theme Gallery
284
- Check out the set of [pre-packaged Shaka UI themes][], created by [@lucksy][]!
285
- PR contributions to [the gallery repo][] are welcome.
286
- [@lucksy]: https://github.com/lucksy
287
- [pre-packaged Shaka UI themes]: https://lucksy.github.io/shaka-player-themes/
288
- [the gallery repo]: https://github.com/lucksy/shaka-player-themes
@@ -1,230 +0,0 @@
1
- # UI Library: basic usage
2
-
3
- Shaka Player has an optional UI library that provides a high-quality accessible
4
- localized UI. It is an alternate bundle from the base
5
- Shaka Player library, that adds additional UI-specific classes and a streamlined
6
- declarative style of setup.
7
-
8
-
9
- #### Setting up the UI library
10
-
11
- Setting up a project with the UI library is even easier than setting one up without.
12
-
13
- Set up controls with HTML data attributes:
14
-
15
- ```html
16
- <!DOCTYPE html>
17
- <html>
18
- <head>
19
- <!-- Shaka Player ui compiled library: -->
20
- <script src="dist/shaka-player.ui.js"></script>
21
- <!-- Shaka Player ui compiled library default CSS: -->
22
- <link rel="stylesheet" type="text/css" href="dist/controls.css">
23
- <!-- Chromecast SDK (if you want Chromecast support for your app): -->
24
- <script defer src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script>
25
- <!-- Your application source: -->
26
- <script src="myapp.js"></script>
27
- </head>
28
- <body>
29
- <!-- The data-shaka-player-container tag will make the UI library place the controls in this div.
30
- The data-shaka-player-cast-receiver-id tag allows you to provide a Cast Application ID that
31
- the cast button will cast to; the value provided here is the sample cast receiver. -->
32
- <div data-shaka-player-container style="max-width:40em"
33
- data-shaka-player-cast-receiver-id="07AEE832">
34
- <!-- The data-shaka-player tag will make the UI library use this video element.
35
- If no video is provided, the UI will automatically make one inside the container div. -->
36
- <video autoplay data-shaka-player id="video" style="width:100%;height:100%"></video>
37
- </div>
38
- </body>
39
- </html>
40
- ```
41
-
42
- ```js
43
- // myapp.js
44
-
45
- const manifestUri =
46
- 'https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd';
47
-
48
- async function init() {
49
- // When using the UI, the player is made automatically by the UI object.
50
- const video = document.getElementById('video');
51
- const ui = video['ui'];
52
- const controls = ui.getControls();
53
- const player = controls.getPlayer();
54
-
55
- // Attach player and ui to the window to make it easy to access in the JS console.
56
- window.player = player;
57
- window.ui = ui;
58
-
59
- // Listen for error events.
60
- player.addEventListener('error', onPlayerErrorEvent);
61
- controls.addEventListener('error', onUIErrorEvent);
62
-
63
- // Try to load a manifest.
64
- // This is an asynchronous process.
65
- try {
66
- await player.load(manifestUri);
67
- // This runs if the asynchronous load is successful.
68
- console.log('The video has now been loaded!');
69
- } catch (error) {
70
- onPlayerError(error);
71
- }
72
- }
73
-
74
- function onPlayerErrorEvent(errorEvent) {
75
- // Extract the shaka.util.Error object from the event.
76
- onPlayerError(event.detail);
77
- }
78
-
79
- function onPlayerError(error) {
80
- // Handle player error
81
- console.error('Error code', error.code, 'object', error);
82
- }
83
-
84
- function onUIErrorEvent(errorEvent) {
85
- // Extract the shaka.util.Error object from the event.
86
- onPlayerError(event.detail);
87
- }
88
-
89
- function initFailed(errorEvent) {
90
- // Handle the failure to load; errorEvent.detail.reasonCode has a
91
- // shaka.ui.FailReasonCode describing why.
92
- console.error('Unable to load the UI library!');
93
- }
94
-
95
- // Listen to the custom shaka-ui-loaded event, to wait until the UI is loaded.
96
- document.addEventListener('shaka-ui-loaded', init);
97
- // Listen to the custom shaka-ui-load-failed event, in case Shaka Player fails
98
- // to load (e.g. due to lack of browser support).
99
- document.addEventListener('shaka-ui-load-failed', initFailed);
100
- ```
101
-
102
-
103
- #### Enabling Chromecast support
104
-
105
- If you'd like to take advantage of Shaka's built-in Chromecast support,
106
- you will need to provide us with your cast receiver application id.
107
- If you want to track cast status changes, you should also
108
- set up a listener for the 'caststatuschanged' events.
109
-
110
- ```html
111
- <!-- Add a data-shaka-player-cast-receiver-id tag to provide a Cast Application ID that
112
- the cast button will cast to; the value provided here is the sample cast receiver. -->
113
- <div data-shaka-player-container style="max-width:40em"
114
- data-shaka-player-cast-receiver-id="07AEE832">
115
- </div>
116
- ```
117
-
118
- With the UI library set up this way, it will provide a button for casting to a
119
- ChromeCast when appropriate, without any extra code.
120
- Next, let's add a listener to the 'caststatuschanged' event in myapp.js:
121
-
122
-
123
- ```js
124
- controls.addEventListener('caststatuschanged', onCastStatusChanged);
125
-
126
- function onCastStatusChanged(event) {
127
- const newCastStatus = event['newStatus'];
128
- // Handle cast status change
129
- console.log('The new cast status is: ' + newCastStatus);
130
- }
131
- ```
132
-
133
-
134
- #### Enabling Android Receiver Apps
135
-
136
- If you'd like to take advantage of Android Receiver App support,
137
- you will need to provide a boolean flag to enable support for
138
- casting to an Android receiver app.
139
-
140
- ```html
141
- <div data-shaka-player-container style="max-width:40em"
142
- data-shaka-player-cast-receiver-id="07AEE832"
143
- data-shaka-player-cast-android-receiver-compatible="true">
144
- <!-- The manifest url in the src attribute will be automatically loaded -->
145
- <video autoplay data-shaka-player id="video" style="width:100%;height:100%"
146
- src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"></video>
147
- </div
148
-
149
-
150
- #### Providing source(s) for auto load.
151
-
152
- It's also possible to provide the `src` attribute on the `<video>` element
153
- or a `<source>` tag inside it to enable auto loading of the specified content.
154
-
155
- ```html
156
- <div data-shaka-player-container style="max-width:40em"
157
- data-shaka-player-cast-receiver-id="07AEE832">
158
- <!-- The manifest url in the src attribute will be automatically loaded -->
159
- <video autoplay data-shaka-player id="video" style="width:100%;height:100%"
160
- src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"></video>
161
- </div>
162
- ```
163
-
164
- or
165
-
166
- ```html
167
- <div data-shaka-player-container style="max-width:40em"
168
- data-shaka-player-cast-receiver-id="07AEE832">
169
- <video autoplay data-shaka-player id="video" style="width:100%;height:100%">
170
- <!-- The manifest url in the src attribute will be auto loaded -->
171
- <source src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"/>
172
- </video>
173
- </div>
174
- ```
175
-
176
- Use several `<source>` tags to provide backup manifest urls in case the `load()`
177
- call to the first one fails.
178
-
179
- ```html
180
- <div data-shaka-player-container style="max-width:40em"
181
- data-shaka-player-cast-receiver-id="07AEE832">
182
- <video autoplay data-shaka-player id="video" style="width:100%;height:100%">
183
- <!-- Try this first -->
184
- <source src="https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mpd"/>
185
- <!-- Try this if the first one has failed -->
186
- <source src="https://storage.googleapis.com/shaka-demo-assets/angel-one-hls-apple/master.m3u8"/>
187
- </video>
188
- </div>
189
- ```
190
-
191
- NOTE: Please DO NOT specify both the `src` attribute on the `<video>` tag AND
192
- a `<source>` tag inside it.
193
-
194
-
195
- #### Programmatic UI setup.
196
- It is possible to set up the UI programmatically after the page loads.
197
- (One of the big use cases for this is building Shaka Player into UI frameworks
198
- that modify the DOM after the page load.)
199
-
200
- To create UI without the DOM-based setup, use the `shaka.ui.Overlay`
201
- constructor.
202
-
203
- ```js
204
- // "local" because it is for local playback only, as opposed to the player proxy
205
- // object, which will route your calls to the ChromeCast receiver as necessary.
206
- const localPlayer = new shaka.Player();
207
- await localPlayer.attach(videoElement);
208
- // "Overlay" because the UI will add DOM elements inside the container,
209
- // to visually overlay the video element
210
- const ui = new shaka.ui.Overlay(localPlayer, videoContainerElement,
211
- videoElement);
212
-
213
- // As with DOM-based setup, get access to the UI controls and player from the
214
- // UI.
215
- const controls = ui.getControls();
216
-
217
- // These are cast-enabled proxy objects, so that when you are casting,
218
- // your API calls will be routed to the remote playback session.
219
- const player = controls.getPlayer();
220
- const video = controls.getVideo();
221
-
222
- // Programatically configure the Chromecast Receiver App Id and Android
223
- // Receiver Compatability.
224
- ui.configure({
225
- // Set the castReceiverAppId
226
- 'castReceiverAppId': '07AEE832',
227
- // Enable casting to native Android Apps (e.g. Android TV Apps)
228
- 'castAndroidReceiverCompatible': true,
229
- });
230
- ```