shaka-player 4.6.5 → 4.7.1

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 (598) 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 +9 -5
  5. package/dist/locales.js +30 -30
  6. package/dist/shaka-player.compiled.d.ts +46 -3
  7. package/dist/shaka-player.compiled.debug.d.ts +46 -3
  8. package/dist/shaka-player.compiled.debug.externs.js +45 -0
  9. package/dist/shaka-player.compiled.debug.js +382 -351
  10. package/dist/shaka-player.compiled.debug.map +4 -4
  11. package/dist/shaka-player.compiled.externs.js +45 -0
  12. package/dist/shaka-player.compiled.js +1127 -1113
  13. package/dist/shaka-player.compiled.map +4 -4
  14. package/dist/shaka-player.ui.d.ts +68 -4
  15. package/dist/shaka-player.ui.debug.d.ts +68 -4
  16. package/dist/shaka-player.ui.debug.externs.js +77 -0
  17. package/dist/shaka-player.ui.debug.js +428 -392
  18. package/dist/shaka-player.ui.debug.map +4 -4
  19. package/dist/shaka-player.ui.externs.js +77 -0
  20. package/dist/shaka-player.ui.js +1304 -1290
  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/cea/cea708_service.js +1 -1
  28. package/lib/cea/cea708_window.js +95 -7
  29. package/lib/dash/dash_parser.js +55 -11
  30. package/lib/media/adaptation_set_criteria.js +76 -10
  31. package/lib/media/media_source_engine.js +42 -18
  32. package/lib/media/segment_reference.js +12 -0
  33. package/lib/media/streaming_engine.js +55 -3
  34. package/lib/player.js +92 -6
  35. package/lib/util/cmsd_manager.js +269 -0
  36. package/lib/util/content_steering_manager.js +5 -1
  37. package/lib/util/mime_utils.js +6 -2
  38. package/lib/util/periods.js +108 -39
  39. package/lib/util/player_configuration.js +19 -5
  40. package/lib/util/stream_utils.js +82 -13
  41. package/package.json +1 -1
  42. package/ui/audio_language_selection.js +3 -0
  43. package/ui/controls.js +60 -0
  44. package/ui/externs/ui.js +12 -1
  45. package/ui/hidden_fast_forward_button.js +32 -0
  46. package/ui/hidden_rewind_button.js +32 -0
  47. package/ui/hidden_seek_button.js +121 -0
  48. package/ui/less/buttons.less +50 -0
  49. package/ui/less/containers.less +18 -0
  50. package/ui/resolution_selection.js +2 -0
  51. package/ui/ui.js +2 -0
  52. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -75
  53. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
  54. package/.github/ISSUE_TEMPLATE/question.md +0 -26
  55. package/.github/config.yml +0 -1
  56. package/.github/workflows/appspot.yaml +0 -39
  57. package/.github/workflows/build-and-test.yaml +0 -222
  58. package/.github/workflows/compute-incremental-coverage.py +0 -265
  59. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +0 -56
  60. package/.github/workflows/custom-actions/set-commit-status/action.yaml +0 -37
  61. package/.github/workflows/deflake.yaml +0 -31
  62. package/.github/workflows/demo-version-index.yaml +0 -43
  63. package/.github/workflows/nightly-demo.yaml +0 -42
  64. package/.github/workflows/release-please.yaml +0 -193
  65. package/.github/workflows/report-incremental-coverage.yaml +0 -39
  66. package/.github/workflows/safari-homedir-launcher.sh +0 -18
  67. package/.github/workflows/selenium-lab-tests.yaml +0 -370
  68. package/.github/workflows/shaka-bot-commands/command-help.sh +0 -27
  69. package/.github/workflows/shaka-bot-commands/command-test.sh +0 -56
  70. package/.github/workflows/shaka-bot-commands/lib.sh +0 -83
  71. package/.github/workflows/shaka-bot-commands/main.sh +0 -51
  72. package/.github/workflows/sync-labels.yaml +0 -33
  73. package/.github/workflows/talk-to-shaka-bot.yaml +0 -29
  74. package/.github/workflows/update-issues.yaml +0 -31
  75. package/.github/workflows/update-screenshots.yaml +0 -142
  76. package/.github/workflows/validate-pr-title.yaml +0 -27
  77. package/CHANGELOG.md +0 -5785
  78. package/CODE_OF_CONDUCT.md +0 -93
  79. package/CONTRIBUTING.md +0 -76
  80. package/demo/TengwarTelcontar.woff2 +0 -0
  81. package/demo/app_logo_144.png +0 -0
  82. package/demo/app_logo_192.png +0 -0
  83. package/demo/app_logo_256.png +0 -0
  84. package/demo/app_logo_384.png +0 -0
  85. package/demo/app_logo_512.png +0 -0
  86. package/demo/app_manifest.json +0 -29
  87. package/demo/asset_card.js +0 -410
  88. package/demo/autoTemplate.txt +0 -61
  89. package/demo/cast_receiver/idle1.jpg +0 -0
  90. package/demo/cast_receiver/idle2.jpg +0 -0
  91. package/demo/cast_receiver/idle3.jpg +0 -0
  92. package/demo/cast_receiver/index.html +0 -75
  93. package/demo/cast_receiver/receiver_app.css +0 -111
  94. package/demo/cast_receiver/receiver_app.js +0 -158
  95. package/demo/close_button.js +0 -60
  96. package/demo/common/asset.js +0 -510
  97. package/demo/common/assets.js +0 -1634
  98. package/demo/config.js +0 -859
  99. package/demo/custom.js +0 -907
  100. package/demo/customWarning.txt +0 -8
  101. package/demo/demo.less +0 -591
  102. package/demo/demo_uncompiled.js +0 -11
  103. package/demo/demo_utils.js +0 -113
  104. package/demo/favicon.ico +0 -0
  105. package/demo/front.js +0 -156
  106. package/demo/icons/README.md +0 -4
  107. package/demo/icons/baseline-audiotrack-24px.svg +0 -1
  108. package/demo/icons/baseline-closed_caption-24px.svg +0 -1
  109. package/demo/icons/baseline-fast_forward-24px.svg +0 -1
  110. package/demo/icons/baseline-language-24px.svg +0 -1
  111. package/demo/icons/baseline-live_tv-24px.svg +0 -1
  112. package/demo/icons/baseline-subtitles-24px.svg +0 -1
  113. package/demo/icons/baseline-surround_sound-24px.svg +0 -1
  114. package/demo/icons/custom_ad.svg +0 -1
  115. package/demo/icons/custom_box_with_text.svg +0 -1
  116. package/demo/icons/custom_clear_key.svg +0 -1
  117. package/demo/icons/custom_high_definition.svg +0 -1
  118. package/demo/icons/custom_playready.svg +0 -1
  119. package/demo/icons/custom_ultra_high_definition.svg +0 -1
  120. package/demo/icons/custom_widevine.svg +0 -1
  121. package/demo/index.html +0 -173
  122. package/demo/input.js +0 -270
  123. package/demo/input_container.js +0 -218
  124. package/demo/load.js +0 -156
  125. package/demo/main.js +0 -1854
  126. package/demo/search.js +0 -452
  127. package/demo/service_worker.js +0 -355
  128. package/demo/shaka_logo_trans.png +0 -0
  129. package/demo/tooltip.js +0 -29
  130. package/demo/visualizer.js +0 -335
  131. package/demo/visualizer_button.js +0 -84
  132. package/dist/demo.compiled.debug.js +0 -340
  133. package/dist/demo.compiled.debug.map +0 -8
  134. package/dist/demo.compiled.js +0 -340
  135. package/dist/demo.compiled.map +0 -8
  136. package/dist/demo.css +0 -6
  137. package/dist/demo.css.map +0 -1
  138. package/dist/receiver.compiled.debug.js +0 -187
  139. package/dist/receiver.compiled.debug.map +0 -8
  140. package/dist/receiver.compiled.js +0 -187
  141. package/dist/receiver.compiled.map +0 -8
  142. package/docs/announcement-list-join-group.png +0 -0
  143. package/docs/api-mainpage.md +0 -28
  144. package/docs/design/REDESIGN.md +0 -283
  145. package/docs/design/architecture.md +0 -13
  146. package/docs/design/bg-fetch-after.gv +0 -29
  147. package/docs/design/bg-fetch-after.gv.png +0 -0
  148. package/docs/design/bg-fetch-before.gv +0 -18
  149. package/docs/design/bg-fetch-before.gv.png +0 -0
  150. package/docs/design/bg-fetch.md +0 -134
  151. package/docs/design/cast.gv +0 -35
  152. package/docs/design/cast.gv.png +0 -0
  153. package/docs/design/chromecast.md +0 -151
  154. package/docs/design/codec_preferences.md +0 -158
  155. package/docs/design/dash-audio-channels.md +0 -123
  156. package/docs/design/dash-manifests.md +0 -248
  157. package/docs/design/dash-timeline.svg +0 -4
  158. package/docs/design/dataflow.gv +0 -66
  159. package/docs/design/dataflow.gv.png +0 -0
  160. package/docs/design/export.md +0 -70
  161. package/docs/design/fuzzy-locale-matching.md +0 -40
  162. package/docs/design/gap-jumping.md +0 -151
  163. package/docs/design/lcevc-architecture.png +0 -0
  164. package/docs/design/lcevc-demo.png +0 -0
  165. package/docs/design/lcevc-integration.md +0 -72
  166. package/docs/design/locale_compatibility.svg +0 -1
  167. package/docs/design/locales_tree.svg +0 -1
  168. package/docs/design/localization-design-principles.md +0 -158
  169. package/docs/design/newdemo.gv +0 -83
  170. package/docs/design/newdemo.gv.png +0 -0
  171. package/docs/design/offline.gv +0 -43
  172. package/docs/design/offline.gv.png +0 -0
  173. package/docs/design/offline.md +0 -153
  174. package/docs/design/ownership.gv +0 -76
  175. package/docs/design/ownership.gv.png +0 -0
  176. package/docs/design/preload.md +0 -299
  177. package/docs/design/preload.png +0 -0
  178. package/docs/design/talking-about-languages.md +0 -46
  179. package/docs/design/timeline.svg +0 -152
  180. package/docs/design/ui.md +0 -31
  181. package/docs/design/ui_player_relationships.svg +0 -1
  182. package/docs/jsdoc-plugin.js +0 -74
  183. package/docs/jsdoc-template/README.md +0 -1
  184. package/docs/jsdoc-template/publish.js +0 -879
  185. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
  186. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
  187. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
  188. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  189. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  190. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  191. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
  192. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
  193. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
  194. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.eot +0 -0
  195. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
  196. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.woff +0 -0
  197. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  198. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  199. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  200. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
  201. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
  202. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
  203. package/docs/jsdoc-template/static/scripts/linenumber.js +0 -44
  204. package/docs/jsdoc-template/static/scripts/show-widget.js +0 -55
  205. package/docs/jsdoc-template/static/styles/jsdoc-default.css +0 -438
  206. package/docs/jsdoc-template/tmpl/augments.tmpl +0 -10
  207. package/docs/jsdoc-template/tmpl/container.tmpl +0 -205
  208. package/docs/jsdoc-template/tmpl/details.tmpl +0 -152
  209. package/docs/jsdoc-template/tmpl/example.tmpl +0 -2
  210. package/docs/jsdoc-template/tmpl/examples.tmpl +0 -13
  211. package/docs/jsdoc-template/tmpl/exceptions.tmpl +0 -32
  212. package/docs/jsdoc-template/tmpl/layout.tmpl +0 -50
  213. package/docs/jsdoc-template/tmpl/mainpage.tmpl +0 -14
  214. package/docs/jsdoc-template/tmpl/members.tmpl +0 -47
  215. package/docs/jsdoc-template/tmpl/method.tmpl +0 -140
  216. package/docs/jsdoc-template/tmpl/modifies.tmpl +0 -14
  217. package/docs/jsdoc-template/tmpl/params.tmpl +0 -131
  218. package/docs/jsdoc-template/tmpl/properties.tmpl +0 -125
  219. package/docs/jsdoc-template/tmpl/returns.tmpl +0 -19
  220. package/docs/jsdoc-template/tmpl/source.tmpl +0 -8
  221. package/docs/jsdoc-template/tmpl/tutorial.tmpl +0 -21
  222. package/docs/jsdoc-template/tmpl/type.tmpl +0 -7
  223. package/docs/jsdoc.conf.json +0 -38
  224. package/docs/shaka-player-logo.png +0 -0
  225. package/docs/style.md +0 -174
  226. package/docs/tutorials/a11y.md +0 -64
  227. package/docs/tutorials/ad_monetization.md +0 -292
  228. package/docs/tutorials/application-level-redirects.md +0 -94
  229. package/docs/tutorials/architecture.md +0 -32
  230. package/docs/tutorials/basic-usage.md +0 -89
  231. package/docs/tutorials/blob-url.md +0 -15
  232. package/docs/tutorials/config.md +0 -148
  233. package/docs/tutorials/debugging.md +0 -189
  234. package/docs/tutorials/drm-config.md +0 -274
  235. package/docs/tutorials/errors.md +0 -95
  236. package/docs/tutorials/fairplay.md +0 -242
  237. package/docs/tutorials/faq.md +0 -252
  238. package/docs/tutorials/index.json +0 -29
  239. package/docs/tutorials/lcevc.md +0 -118
  240. package/docs/tutorials/license-server-auth.md +0 -248
  241. package/docs/tutorials/license-wrapping.md +0 -168
  242. package/docs/tutorials/manifest-parser.md +0 -365
  243. package/docs/tutorials/network-and-buffering-config.md +0 -119
  244. package/docs/tutorials/offline.md +0 -683
  245. package/docs/tutorials/plugins.md +0 -184
  246. package/docs/tutorials/selenium-grid-config.md +0 -174
  247. package/docs/tutorials/service-worker.md +0 -106
  248. package/docs/tutorials/ui-customization.md +0 -288
  249. package/docs/tutorials/ui.md +0 -232
  250. package/docs/tutorials/upgrade-manifest.md +0 -281
  251. package/docs/tutorials/upgrade.md +0 -104
  252. package/docs/tutorials/welcome.md +0 -108
  253. package/docs/tutorials/widevine-service-certs.md +0 -45
  254. package/karma.conf.js +0 -879
  255. package/maintained-branches.md +0 -15
  256. package/roadmap.md +0 -186
  257. package/test/abr/simple_abr_manager_unit.js +0 -398
  258. package/test/ads/ad_manager_unit.js +0 -260
  259. package/test/assumptions/uint8_array_unit.js +0 -22
  260. package/test/cast/cast_proxy_unit.js +0 -736
  261. package/test/cast/cast_receiver_integration.js +0 -488
  262. package/test/cast/cast_receiver_unit.js +0 -1183
  263. package/test/cast/cast_sender_unit.js +0 -973
  264. package/test/cast/cast_utils_unit.js +0 -311
  265. package/test/cea/cea608_memory_unit.js +0 -411
  266. package/test/cea/cea708_service_unit.js +0 -674
  267. package/test/cea/cea708_window_unit.js +0 -373
  268. package/test/cea/cea_decoder_unit.js +0 -615
  269. package/test/cea/dtvcc_packet_builder_unit.js +0 -158
  270. package/test/cea/dtvcc_packet_unit.js +0 -60
  271. package/test/cea/mp4_cea_parser_unit.js +0 -127
  272. package/test/codec_switching/codec_switching_integration.js +0 -182
  273. package/test/dash/dash_parser_content_protection_unit.js +0 -998
  274. package/test/dash/dash_parser_integration.js +0 -74
  275. package/test/dash/dash_parser_live_unit.js +0 -1542
  276. package/test/dash/dash_parser_manifest_unit.js +0 -3121
  277. package/test/dash/dash_parser_segment_base_unit.js +0 -421
  278. package/test/dash/dash_parser_segment_list_unit.js +0 -380
  279. package/test/dash/dash_parser_segment_template_unit.js +0 -910
  280. package/test/dash/mpd_utils_unit.js +0 -794
  281. package/test/demo/demo_unit.js +0 -108
  282. package/test/deprecate/enforcer_unit.js +0 -74
  283. package/test/deprecate/version_unit.js +0 -57
  284. package/test/hls/hls_live_unit.js +0 -1330
  285. package/test/hls/hls_parser_unit.js +0 -5276
  286. package/test/hls/manifest_text_parser_unit.js +0 -545
  287. package/test/media/adaptation_set_criteria_unit.js +0 -806
  288. package/test/media/adaptation_set_unit.js +0 -229
  289. package/test/media/buffering_observer_unit.js +0 -143
  290. package/test/media/closed_caption_parser_unit.js +0 -18
  291. package/test/media/content_workarounds_unit.js +0 -43
  292. package/test/media/drm_engine_integration.js +0 -356
  293. package/test/media/drm_engine_unit.js +0 -2805
  294. package/test/media/media_source_engine_integration.js +0 -691
  295. package/test/media/media_source_engine_unit.js +0 -1512
  296. package/test/media/mp4_segment_index_parser_unit.js +0 -80
  297. package/test/media/play_rate_controller_unit.js +0 -69
  298. package/test/media/playhead_unit.js +0 -1394
  299. package/test/media/presentation_timeline_unit.js +0 -477
  300. package/test/media/quality_observer_unit.js +0 -138
  301. package/test/media/region_observer_unit.js +0 -374
  302. package/test/media/region_timeline_unit.js +0 -139
  303. package/test/media/segment_index_unit.js +0 -1080
  304. package/test/media/segment_prefetch_unit.js +0 -243
  305. package/test/media/segment_reference_unit.js +0 -63
  306. package/test/media/stall_detector_unit.js +0 -184
  307. package/test/media/streaming_engine_integration.js +0 -632
  308. package/test/media/streaming_engine_unit.js +0 -4211
  309. package/test/media/time_ranges_utils_unit.js +0 -123
  310. package/test/media/webm_segment_index_parser_unit.js +0 -90
  311. package/test/mss/mss_parser_content_protection_unit.js +0 -49
  312. package/test/mss/mss_parser_unit.js +0 -474
  313. package/test/mss/mss_player_integration.js +0 -124
  314. package/test/net/data_uri_plugin_unit.js +0 -105
  315. package/test/net/http_plugin_unit.js +0 -439
  316. package/test/net/networking_engine_unit.js +0 -1236
  317. package/test/net/networking_utils_unit.js +0 -37
  318. package/test/offline/download_progress_estimator_unit.js +0 -90
  319. package/test/offline/indexeddb_storage_unit.js +0 -192
  320. package/test/offline/manifest_convert_unit.js +0 -622
  321. package/test/offline/offline_integration.js +0 -168
  322. package/test/offline/offline_manifest_parser_unit.js +0 -231
  323. package/test/offline/offline_scheme_unit.js +0 -154
  324. package/test/offline/offline_uri_unit.js +0 -59
  325. package/test/offline/storage_compatibility_unit.js +0 -344
  326. package/test/offline/storage_integration.js +0 -1858
  327. package/test/player_external.js +0 -237
  328. package/test/player_integration.js +0 -1371
  329. package/test/player_load_graph_integration.js +0 -865
  330. package/test/player_src_equals_external.js +0 -154
  331. package/test/player_src_equals_integration.js +0 -527
  332. package/test/player_unit.js +0 -4465
  333. package/test/polyfill/media_capabilities_unit.js +0 -277
  334. package/test/polyfill/patchedmediakeys_apple_unit.js +0 -130
  335. package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
  336. package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
  337. package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
  338. package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
  339. package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
  340. package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
  341. package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
  342. package/test/test/assets/3675/dash_0.mpd +0 -30
  343. package/test/test/assets/3675/dash_1.mpd +0 -30
  344. package/test/test/assets/3675/dash_2.mpd +0 -30
  345. package/test/test/assets/3675/dash_3.mpd +0 -30
  346. package/test/test/assets/3675/dash_4.mpd +0 -30
  347. package/test/test/assets/3675/dash_5.mpd +0 -26
  348. package/test/test/assets/3675/init-stream0.m4s +0 -0
  349. package/test/test/assets/audio-xhe-aac.mp4 +0 -0
  350. package/test/test/assets/audio.ts +0 -0
  351. package/test/test/assets/captions-test.ts +0 -0
  352. package/test/test/assets/cea-init.mp4 +0 -0
  353. package/test/test/assets/cea-segment.mp4 +0 -0
  354. package/test/test/assets/chapters.srt +0 -11
  355. package/test/test/assets/chapters.vtt +0 -10
  356. package/test/test/assets/chapters2.vtt +0 -10
  357. package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
  358. package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
  359. package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
  360. package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
  361. package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
  362. package/test/test/assets/dash-aes-128/dash.mpd +0 -18
  363. package/test/test/assets/dash-aes-128/license +0 -1
  364. package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
  365. package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
  366. package/test/test/assets/dash-multi-codec/dash.mpd +0 -32
  367. package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
  368. package/test/test/assets/db-dump-v1.json +0 -1
  369. package/test/test/assets/db-dump-v2-broken.json +0 -1
  370. package/test/test/assets/db-dump-v2-clean.json +0 -1
  371. package/test/test/assets/db-dump-v3.json +0 -1
  372. package/test/test/assets/db-dump-v4-broken.json +0 -1
  373. package/test/test/assets/db-dump-v5.json +0 -1
  374. package/test/test/assets/empty_caption_video_init.mp4 +0 -0
  375. package/test/test/assets/empty_caption_video_segment.mp4 +0 -0
  376. package/test/test/assets/encrypted-sintel-audio-init.mp4 +0 -0
  377. package/test/test/assets/encrypted-sintel-audio-segment.mp4 +0 -0
  378. package/test/test/assets/encrypted-sintel-video-init.mp4 +0 -0
  379. package/test/test/assets/encrypted-sintel-video-segment.mp4 +0 -0
  380. package/test/test/assets/green-pixel.mp4 +0 -0
  381. package/test/test/assets/green-pixel.txt +0 -15
  382. package/test/test/assets/h265-cea-init.mp4 +0 -0
  383. package/test/test/assets/h265-cea-segment.mp4 +0 -0
  384. package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
  385. package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
  386. package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
  387. package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
  388. package/test/test/assets/hls-raw-aac/manifest.m3u8 +0 -4
  389. package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +0 -14
  390. package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
  391. package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
  392. package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
  393. package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
  394. package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
  395. package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
  396. package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
  397. package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
  398. package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +0 -31
  399. package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
  400. package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
  401. package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
  402. package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
  403. package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
  404. package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
  405. package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
  406. package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
  407. package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +0 -31
  408. package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +0 -13
  409. package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
  410. package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
  411. package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
  412. package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
  413. package/test/test/assets/hls-raw-mp3/playlist.m3u8 +0 -4
  414. package/test/test/assets/hls-ts-aac/playlist.m3u8 +0 -23
  415. package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
  416. package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
  417. package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
  418. package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
  419. package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
  420. package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
  421. package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
  422. package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
  423. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
  424. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
  425. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
  426. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
  427. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
  428. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
  429. package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +0 -19
  430. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
  431. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
  432. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
  433. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
  434. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
  435. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
  436. package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +0 -19
  437. package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
  438. package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
  439. package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
  440. package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
  441. package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
  442. package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
  443. package/test/test/assets/hls-ts-h264/prog_index.m3u8 +0 -25
  444. package/test/test/assets/hls-ts-h265/0.ts +0 -0
  445. package/test/test/assets/hls-ts-h265/hevc.m3u8 +0 -6
  446. package/test/test/assets/hls-ts-h265/index.m3u8 +0 -7
  447. package/test/test/assets/hls-ts-mp3/manifest.m3u8 +0 -13
  448. package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
  449. package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
  450. package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
  451. package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
  452. package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +0 -17
  453. package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
  454. package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
  455. package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
  456. package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
  457. package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
  458. package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
  459. package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +0 -4
  460. package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
  461. package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
  462. package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +0 -9
  463. package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +0 -24
  464. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
  465. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
  466. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
  467. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
  468. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
  469. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
  470. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
  471. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
  472. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
  473. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
  474. package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +0 -14
  475. package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +0 -23
  476. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
  477. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
  478. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
  479. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
  480. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
  481. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
  482. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
  483. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
  484. package/test/test/assets/id3-metadata.aac +0 -0
  485. package/test/test/assets/id3-metadata.ts +0 -0
  486. package/test/test/assets/index-segment.mp4 +0 -0
  487. package/test/test/assets/index-segment.webm +0 -0
  488. package/test/test/assets/init-segment.webm +0 -0
  489. package/test/test/assets/large_file.mpd +0 -4930
  490. package/test/test/assets/multidrm-audio-init.mp4 +0 -0
  491. package/test/test/assets/multidrm-audio-segment.mp4 +0 -0
  492. package/test/test/assets/multidrm-video-init.mp4 +0 -0
  493. package/test/test/assets/multidrm-video-segment.mp4 +0 -0
  494. package/test/test/assets/multiple-trun-init.mp4 +0 -0
  495. package/test/test/assets/multiple-trun-segment.mp4 +0 -0
  496. package/test/test/assets/sintel-audio-init.mp4 +0 -0
  497. package/test/test/assets/sintel-audio-segment.mp4 +0 -0
  498. package/test/test/assets/sintel-video-init.mp4 +0 -0
  499. package/test/test/assets/sintel-video-segment.mp4 +0 -0
  500. package/test/test/assets/small.mp4 +0 -0
  501. package/test/test/assets/text-clip-alt.vtt +0 -63
  502. package/test/test/assets/text-clip.vtt +0 -63
  503. package/test/test/assets/thumbnails-sprites.vtt +0 -10
  504. package/test/test/assets/thumbnails.vtt +0 -10
  505. package/test/test/assets/ttml-init.mp4 +0 -0
  506. package/test/test/assets/ttml-segment-multiplemdat.mp4 +0 -0
  507. package/test/test/assets/ttml-segment.mp4 +0 -0
  508. package/test/test/assets/video.ts +0 -0
  509. package/test/test/assets/vtt-init.mp4 +0 -0
  510. package/test/test/assets/vtt-segment-multi-payload.mp4 +0 -0
  511. package/test/test/assets/vtt-segment-no-duration.mp4 +0 -0
  512. package/test/test/assets/vtt-segment-settings.mp4 +0 -0
  513. package/test/test/assets/vtt-segment.mp4 +0 -0
  514. package/test/test/boot.js +0 -495
  515. package/test/test/externs/filters.js +0 -44
  516. package/test/test/externs/fontfaceonload.js +0 -29
  517. package/test/test/externs/jasmine.js +0 -670
  518. package/test/test/externs/karma.js +0 -26
  519. package/test/test/externs/require.js +0 -21
  520. package/test/test/externs/sprintf.js +0 -18
  521. package/test/test/namespace.js +0 -10
  522. package/test/test/util/canned_idb.js +0 -379
  523. package/test/test/util/cea_utils.js +0 -60
  524. package/test/test/util/dash_parser_util.js +0 -329
  525. package/test/test/util/fake_ad.js +0 -321
  526. package/test/test/util/fake_ad_manager.js +0 -122
  527. package/test/test/util/fake_demo_main.js +0 -144
  528. package/test/test/util/fake_drm_engine.js +0 -103
  529. package/test/test/util/fake_media_source_engine.js +0 -464
  530. package/test/test/util/fake_networking_engine.js +0 -381
  531. package/test/test/util/fake_segment_prefetch.js +0 -84
  532. package/test/test/util/fake_text_displayer.js +0 -60
  533. package/test/test/util/id3_generator.js +0 -100
  534. package/test/test/util/indexeddb_utils.js +0 -124
  535. package/test/test/util/jasmine_fetch.js +0 -382
  536. package/test/test/util/layout_tests.js +0 -435
  537. package/test/test/util/loader.js +0 -88
  538. package/test/test/util/manifest_generator.js +0 -705
  539. package/test/test/util/manifest_parser_util.js +0 -101
  540. package/test/test/util/mss_parser_util.js +0 -119
  541. package/test/test/util/offline_utils.js +0 -105
  542. package/test/test/util/simple_fakes.js +0 -535
  543. package/test/test/util/stream_generator.js +0 -676
  544. package/test/test/util/streaming_engine_util.js +0 -506
  545. package/test/test/util/test_scheme.js +0 -778
  546. package/test/test/util/ttml_utils.js +0 -77
  547. package/test/test/util/ui_utils.js +0 -183
  548. package/test/test/util/util.js +0 -374
  549. package/test/test/util/waiter.js +0 -406
  550. package/test/text/cue_integration.js +0 -51
  551. package/test/text/lrc_text_parser_unit.js +0 -98
  552. package/test/text/mp4_ttml_parser_unit.js +0 -171
  553. package/test/text/mp4_vtt_parser_unit.js +0 -195
  554. package/test/text/sbv_text_parser_unit.js +0 -81
  555. package/test/text/simple_text_displayer_unit.js +0 -468
  556. package/test/text/srt_text_parser_unit.js +0 -163
  557. package/test/text/ssa_text_parser_unit.js +0 -382
  558. package/test/text/text_displayer_layout_unit.js +0 -323
  559. package/test/text/text_engine_unit.js +0 -500
  560. package/test/text/text_track_integration.js +0 -186
  561. package/test/text/ttml_text_parser_unit.js +0 -2176
  562. package/test/text/ui_text_displayer_unit.js +0 -608
  563. package/test/text/vtt_text_parser_unit.js +0 -1363
  564. package/test/text/web_vtt_generator_unit.js +0 -144
  565. package/test/text/web_vtt_layout_integration.js +0 -524
  566. package/test/transmuxer/transmuxer_engine_integration.js +0 -69
  567. package/test/transmuxer/transmuxer_integration.js +0 -443
  568. package/test/ui/ad_ui_unit.js +0 -369
  569. package/test/ui/localization_unit.js +0 -508
  570. package/test/ui/ui_customization_unit.js +0 -208
  571. package/test/ui/ui_integration.js +0 -669
  572. package/test/ui/ui_unit.js +0 -902
  573. package/test/util/abortable_operation_unit.js +0 -624
  574. package/test/util/array_utils_unit.js +0 -58
  575. package/test/util/buffer_utils_unit.js +0 -185
  576. package/test/util/cmcd_manager_unit.js +0 -440
  577. package/test/util/content_steering_manager_unit.js +0 -427
  578. package/test/util/data_view_reader_unit.js +0 -254
  579. package/test/util/ebml_parser_unit.js +0 -297
  580. package/test/util/event_manager_unit.js +0 -185
  581. package/test/util/fake_event_target_unit.js +0 -123
  582. package/test/util/id3_utils_unit.js +0 -168
  583. package/test/util/iterables_unit.js +0 -68
  584. package/test/util/language_utils_unit.js +0 -240
  585. package/test/util/manifest_parser_utils_unit.js +0 -55
  586. package/test/util/mime_utils_unit.js +0 -64
  587. package/test/util/mp4_box_parsers_unit.js +0 -246
  588. package/test/util/mp4_parser_unit.js +0 -373
  589. package/test/util/multi_map_unit.js +0 -94
  590. package/test/util/object_utils_unit.js +0 -79
  591. package/test/util/periods_unit.js +0 -1623
  592. package/test/util/pssh_unit.js +0 -226
  593. package/test/util/state_history_unit.js +0 -101
  594. package/test/util/stream_utils_unit.js +0 -1068
  595. package/test/util/string_utils_unit.js +0 -166
  596. package/test/util/text_parser_unit.js +0 -165
  597. package/test/util/ts_parser_unit.js +0 -77
  598. 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,232 +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
- // "Overlay" because the UI will add DOM elements inside the container,
208
- // to visually overlay the video element
209
- const ui = new shaka.ui.Overlay(localPlayer, videoContainerElement,
210
- videoElement);
211
- // Now that the player has been configured to be part of a UI, attach it to the
212
- // video.
213
- await localPlayer.attach(videoElement);
214
-
215
- // As with DOM-based setup, get access to the UI controls and player from the
216
- // UI.
217
- const controls = ui.getControls();
218
-
219
- // These are cast-enabled proxy objects, so that when you are casting,
220
- // your API calls will be routed to the remote playback session.
221
- const player = controls.getPlayer();
222
- const video = controls.getVideo();
223
-
224
- // Programatically configure the Chromecast Receiver App Id and Android
225
- // Receiver Compatability.
226
- ui.configure({
227
- // Set the castReceiverAppId
228
- 'castReceiverAppId': '07AEE832',
229
- // Enable casting to native Android Apps (e.g. Android TV Apps)
230
- 'castAndroidReceiverCompatible': true,
231
- });
232
- ```