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,365 +0,0 @@
1
- # Manifest Parser Plugins
2
-
3
- ## Overview
4
-
5
- This tutorial shows how to make a basic manifest parser plugin. This allows an
6
- app to define a custom manifest format and still use Shaka Player to handle the
7
- streaming and track switching.
8
-
9
- The function of a manifest parser is to take a URL that was passed to `load()`
10
- and give us back a manifest object. The parser should fetch the URL, parse the
11
- manifest, and convert it to our format.
12
-
13
- ```js
14
- function MyManifestParser() {
15
- this.curId_ = 0;
16
- this.config_ = null;
17
- }
18
-
19
- MyManifestParser.prototype.configure = function(config) {
20
- this.config_ = config;
21
- };
22
-
23
- MyManifestParser.prototype.start = async function(uri, playerInterface) {
24
- const type = shaka.net.NetworkingEngine.RequestType.MANIFEST;
25
- const request = {
26
- uris: [uri],
27
- method: 'GET',
28
- retryParameters: this.config_.retryParameters
29
- };
30
- const response =
31
- await playerInterface.networkingEngine.request(type, request).promise;
32
- return this.loadManifest_(response.data);
33
- };
34
-
35
- MyManifestParser.prototype.stop = function() {
36
- return Promise.resolve();
37
- };
38
-
39
-
40
- shaka.media.ManifestParser.registerParserByExtension('json', MyManifestParser);
41
- shaka.media.ManifestParser.registerParserByMime(
42
- 'application/json', MyManifestParser);
43
- ```
44
-
45
- First, this defines a constructor called `MyManifestParser`. This is called by
46
- the `Player` to create new parser instances. A new instance is created for
47
- *each* load. This should setup any initial state that is needed.
48
-
49
- #### configure
50
-
51
- This method is called right after creating the object and when the configuration
52
- changes. This is passed a {@link shaka.extern.ManifestConfiguration} object
53
- from the Player.
54
-
55
- #### start
56
-
57
- This method is called to load the manifest. This is called with a string URI
58
- that is passed to `load()` and a
59
- {@link shaka.extern.ManifestParser.PlayerInterface} object. The interface
60
- object contains a number of fields that are used to interact with the Player.
61
- This includes the `NetworkingEngine` instance to make network requests. This
62
- also includes callback methods that allow the parser to raise Player events and
63
- filter the variants. This method should return a Promise that will resolve with
64
- the parsed manifest.
65
-
66
- #### stop
67
-
68
- This method is called as part of `player.unload()`. This method should stop any
69
- background timers and free any state. It is invalid to use the config object or
70
- anything from the Player interface given to `start` after this is called. We
71
- don't reuse parser instances, so we will *not* call `start()` again after this
72
- is called. This should return a Promise that resolves when this object is
73
- destroyed.
74
-
75
- #### registration
76
-
77
- At the end of the file, you should register the parser with the library. This
78
- will allow it to be used by the `Player`. There are two methods:
79
- `registerParserByExtension` and `registerParserByMime`. They both add parsers
80
- to a registry of manifest parsers. When the Player gets a URI, it will
81
- determine which parser to use. It will first try based on the file extension,
82
- then it will make a HEAD request to the URI to get back a MIME type.
83
-
84
- If you wish to unregister a parser, you can do so with
85
- {@link shaka.media.ManifestParser.unregisterParserByMime}. Parsers registered
86
- by extension cannot be unregistered at this time.
87
-
88
-
89
- ## Variants and Streams
90
-
91
- The audio and video content of our Manifest structure is stored, on the highest
92
- level, in an array of Variants. A Variant represents an audio+video pair.
93
- The array holds all possible pairs the Player can choose from.
94
- While playing, we will give these to the app (through `getVariantTracks`) and
95
- will switch between them (if ABR is enabled).
96
-
97
- A stream represents a collection of media data segments. The segments are all
98
- the same type (audio/video/text) and all from the same version of the media
99
- (e.g. English vs Spanish or 720p vs 1080p). A Stream object holds metadata that
100
- describes what the stream contains as well as how to get the segments. Only one
101
- stream of each type will be playing at once.
102
-
103
- Multiple Variants can hold the same streams. For example, both the 720p and the
104
- 1080p variant can refer to the same audio stream. In this case, both Variant
105
- objects must refer to the **same object**. It is not enough to use the same
106
- stream ID; it must be the same object.
107
-
108
-
109
- ## Periods
110
-
111
- While some manifest formats, such as MPEG-DASH, have the concept of a period,
112
- our internal manifest structure (as of Shaka Player v3.0) does not organize
113
- streams based on periods. If you are writing a manifest parser for such a
114
- format, you will need to generate Variants yourself, combining together periods
115
- and their component streams as needed. The resulting
116
- {@link shaka.extern.Stream} objects should each span the entire presentation.
117
-
118
- All media times in the manifest are relative to the presentation, *not* the
119
- Period. This means that you must account for period start times in your segment
120
- references. (This changed in Shaka Player v3.0.)
121
-
122
-
123
- ## PresentationTimeline
124
-
125
- {@link shaka.media.PresentationTimeline}
126
-
127
- The segment index doesn't need to handle segment availability for live
128
- content. All the segment index needs to do is return the segment references.
129
- The `presentationTimeline` in the manifest will be used to handle availability.
130
- All times in the timeline are in seconds; 0 represents when the live stream
131
- started.
132
-
133
- An availability window defines a moving time window in which a segment can be
134
- downloaded. This is defined by a segment availability duration that indicates
135
- the number of seconds that a segment will remain available. So if the
136
- availability duration is 60 seconds, then the last 60 seconds of content is
137
- available.
138
-
139
- The same timeline class handles on-demand content, too. The availability window
140
- starts at 0 and ends at the duration of the media.
141
-
142
-
143
- ## Media Segments
144
-
145
- A Stream contains a number of segment references contained in a segment index.
146
- A segment reference contains important metadata about the segment: the start
147
- and end times, the URL, and optionally a byte range into that URL. A segment
148
- reference is created using the {@link shaka.media.SegmentReference} constructor.
149
-
150
- Rather than storing the references in a raw array, the manifest parser stores
151
- them in a {@link shaka.media.SegmentIndex} object. This object is allowed to
152
- be null before createSegmentIndex() is called, and thus defer the translation of
153
- abstract segment descriptions (such as DASH's `SegmentTemplate`) into concrete
154
- ones until necessary.
155
-
156
- Media segment times are all in terms of the presentation timeline. So if the
157
- content was originally multi-period, the period start time must be accounted for
158
- in the reference's `timestampOffset` field.
159
-
160
- First we ask for the index that corresponds with a start time. Then on update,
161
- we increment the index and ask for segments in order. The value of the index
162
- doesn't matter, but indices must be sequential integers.
163
-
164
- #### createSegmentIndex():Promise
165
-
166
- This is called first before any other method. This allows an index to be
167
- fetched over the network, if needed. This method should return a Promise that
168
- will resolve when the segment index is ready. This is only ever called once.
169
-
170
- #### segmentIndex
171
-
172
- This is *not* a function, but a {@link shaka.media.SegmentIndex} tracking all
173
- available segments.
174
-
175
-
176
- ## shaka.media.SegmentIndex
177
-
178
- To help in handling segment references, there is a
179
- {@link shaka.media.SegmentIndex} type. This is given an array of references.
180
- It handles merging new segments, and expanding the list of segments for live
181
- streams.
182
-
183
- ```js
184
- const references = refs.map(function(r) {
185
- // Should return an array of possible URI choices; this is used for failover
186
- // in the event of network error. This is a function to defer calculations.
187
- const getUris = function() { return [r.uri]; };
188
-
189
- return new shaka.media.SegmentReference(
190
- r.start, r.end, getUris,
191
- /* startByte */ 0,
192
- /* endByte */ null,
193
- initSegmentReference,
194
- /* timestampOffset */ 0,
195
- /* appendWindowStart */ 0,
196
- /* appendWindowEnd */ Infinity);
197
- });
198
-
199
- const index = new shaka.media.SegmentIndex(references);
200
- ```
201
-
202
- To merge updates and remove old references to reduce the memory footprint,
203
- simply create a new array of segments and call `mergeAndEvict`. Any
204
- existing segments will be updated, new segments will be added, and old
205
- unavailable references will be removed.
206
-
207
- To expand the list of references on a timer, as is done for DASH's
208
- SegmentTemplate, call `index.updateEvery` with a callback that evicts old
209
- references and returns an array of new references.
210
-
211
- ```js
212
- index.updateEvery(updateIntervalSeconds, () => {
213
- // Evict old references
214
- index.evict(windowStartTime);
215
-
216
- // Generate new references to append to the end of the index
217
- const references = [];
218
- // ...
219
- return references;
220
- });
221
- ```
222
-
223
- If the callback returns null, the update timer for this index will be stopped.
224
- (NOTE: This method was introduced in v3.0.0, but the interpretation of the
225
- callback's return changed in v3.0.8 to fix a bug in our DASH SegmentTemplate
226
- support. We apologize for any inconvenience.)
227
-
228
-
229
- ## Manifest Updates
230
-
231
- In order to support Live content, the manifest may need to be updated. In the
232
- `start()` method, the manifest parser should start its own timers (e.g.
233
- `setInterval`) to update the manifest. Then it should re-parse the manifest
234
- periodically. To add new segments to the streams, simply add them to the
235
- segment index. Because the original manifest object is modified in-place,
236
- adding them to the index will allow the Player to use them.
237
-
238
- After adding new content, you should call the `filter` method on the player
239
- interface. This removes any streams that were added that are incompatible with
240
- the platform. Keep in mind that this is an asynchronous method, and thus you
241
- will need to use it in conjunction with `.then()` or `await`.
242
- You should also call the `makeTextStreamsForClosedCaptions` method on the
243
- player interface, which is required for embedded captions (for example, CEA
244
- 608) to work; it makes dummy text streams to represent these tracks.
245
-
246
-
247
- ## Full Manifest Parser Example
248
-
249
- ```js
250
- MyManifestParser.prototype.loadManifest_ = function(data) {
251
- // |data| is the response data from load(); but in this example, we ignore it.
252
-
253
- // The arguments are only used for live.
254
- const timeline = new shaka.media.PresentationTimeline(null, 0);
255
- timeline.setDuration(3600); // seconds
256
-
257
- return {
258
- presentationTimeline: timeline,
259
- minBufferTime: 5, // seconds
260
- offlineSessionIds: [],
261
- variants: [
262
- this.loadVariant_(true, true),
263
- this.loadVariant_(true, false)
264
- ],
265
- textStreams: [
266
- this.loadStream_('text'),
267
- this.loadStream_('text')
268
- ]
269
- };
270
- };
271
-
272
- MyManifestParser.prototype.loadVariant_ = function(hasVideo, hasAudio) {
273
- console.assert(hasVideo || hasAudio);
274
-
275
- return {
276
- id: this.curId_++, // globally unique ID
277
- language: 'en',
278
- primary: false,
279
- audio: hasAudio ? this.loadStream_('audio') : null,
280
- video: hasVideo ? this.loadStream_('video') : null,
281
- bandwidth: 8000, // bits/sec, audio+video combined
282
- allowedByApplication: true, // always initially true
283
- allowedByKeySystem: true // always initially true
284
- };
285
- };
286
-
287
- MyManifestParser.prototype.loadStream_ = function(type) {
288
- const getUris = function() { return ['https://example.com/init']; };
289
- const initSegmentReference = new shaka.media.InitSegmentReference(getUris,
290
- /* startByte= */ 0, /* endByte= */ null);
291
-
292
- const index = new shaka.media.SegmentIndex([
293
- // Times are in seconds, relative to the presentation
294
- this.loadReference_(0, 0, 10, initSegmentReference),
295
- this.loadReference_(1, 10, 20, initSegmentReference),
296
- this.loadReference_(2, 20, 30, initSegmentReference),
297
- ]);
298
-
299
- const id = this.curId_++;
300
- return {
301
- id: id, // globally unique ID
302
- originalId: id, // original ID from manifest, if any
303
- createSegmentIndex: function() { return Promise.resolve(); },
304
- segmentIndex: index,
305
- mimeType: type == 'video' ?
306
- 'video/webm' : (type == 'audio' ? 'audio/webm' : 'text/vtt'),
307
- codecs: type == 'video' ? 'vp9' : (type == 'audio' ? 'vorbis' : ''),
308
- frameRate: type == 'video' ? 24 : undefined,
309
- pixelAspectRatio: type == 'video' ? 4 / 3 : undefined,
310
- bandwidth: 4000, // bits/sec
311
- width: type == 'video' ? 640 : undefined,
312
- height: type == 'video' ? 480 : undefined,
313
- kind: type == 'text' ? 'subtitles' : undefined,
314
- channelsCount: type == 'audio' ? 2 : undefined,
315
- encrypted: false,
316
- drmInfos: [],
317
- keyIds: new Set(),
318
- language: 'en',
319
- label: 'my_stream',
320
- type: type,
321
- primary: false,
322
- trickModeVideo: null,
323
- emsgSchemeIdUris: null,
324
- roles: []
325
- channelsCount: type == 'audio' ? 6 : null,
326
- audioSamplingRate: type == 'audio' ? 44100 : null,
327
- closedCaptions: new Map(),
328
- };
329
- };
330
-
331
- MyManifestParser.prototype.loadReference_ =
332
- function(position, start, end, initSegmentReference) {
333
- const getUris = function() { return ['https://example.com/ref_' + position]; };
334
- return new shaka.media.SegmentReference(
335
- start, end, getUris,
336
- /* startByte */ 0,
337
- /* endByte */ null,
338
- initSegmentReference,
339
- /* timestampOffset */ 0,
340
- /* appendWindowStart */ 0,
341
- /* appendWindowEnd */ Infinity);
342
- };
343
- ```
344
-
345
-
346
- ## Encrypted Content
347
-
348
- If your content is encrypted, there are a few changes to the manifest you need
349
- to do. First, for each Stream that contains encrypted content, you need to set
350
- `stream.encrypted` to true and put the key IDs that the stream is encrypted with
351
- in the `stream.keyIds` set. Filling out the `keyIds` is technically optional,
352
- but it allows the player to choose streams more intelligently based on which
353
- keys are available. If `keyIds` is not filled out, missing keys may cause
354
- playback to stall.
355
-
356
- You must also set `stream.drmInfos` to an array of {@link shaka.extern.DrmInfo}
357
- objects. All the fields (except the key-system name) can be set to the default
358
- and will be replaced by settings from the Player configuration. If the
359
- `drmInfos` array is empty, the content is expected to be clear.
360
-
361
- If you set `drmInfo.initData` to a non-empty array, we will use that to
362
- initialize EME. We will override any encryption info in the media (e.g.
363
- `pssh` boxes in MP4). If you don't set this field (and it isn't set in the
364
- app config), then we will initialize EME based on the encryption info in the
365
- media.
@@ -1,119 +0,0 @@
1
- # Network and Buffering Configuration
2
-
3
- #### Networking Configuration
4
-
5
- Shaka Player has separate network retry settings for each of the different
6
- types of requests: manifest, license, and segment requests. For example, you
7
- may want a failed license request to be retried differently from a failed
8
- segment request.
9
-
10
- The three separate retry settings are found under `drm.retryParameters` (for
11
- license requests), `manifest.retryParameters` (for manifest requests), and
12
- `streaming.retryParameters` (for segment requests). All three structures are
13
- identical:
14
-
15
- ```js
16
- retryParameters: {
17
- timeout: 30000, // timeout in ms, after which we abort
18
- stallTimeout: 5000, // stall timeout in ms, after which we abort
19
- connectionTimeout: 10000, // connection timeout in ms, after which we abort
20
- maxAttempts: 2, // the maximum number of requests before we fail
21
- baseDelay: 1000, // the base delay in ms between retries
22
- backoffFactor: 2, // the multiplicative backoff factor between retries
23
- fuzzFactor: 0.5, // the fuzz factor to apply to each retry delay
24
- }
25
- ```
26
-
27
- Each time we retry, the backoff factor is applied to the delay between retries.
28
- So, for example, if the base delay is 1s, and the backoff factor is 2:
29
-
30
- 1. initial request at time t = 0 seconds
31
- 2. delay of 1, retry at t = (0 + 1) = 1
32
- 3. delay of 2, retry at t = (1 + 2) = 3
33
- 4. delay of 4, retry at t = (3 + 4) = 7
34
- 5. delay of 8, retry at t = (7 + 8) = 15
35
-
36
- and so on. To avoid many clients hammering a server at the same exact time,
37
- we also apply a fuzz factor. A fuzz factor of 0.5 means we fuzz the delay
38
- 50% in either direction. So if the ideal delay is 8, the actual delay will be
39
- randomly chosen between 4 and 12. To extend our earlier example:
40
-
41
- 1. initial request
42
- 2. delay of 1±50% (0.5 to 1.5), retry
43
- 3. delay of 2±50% (1 to 3), retry
44
- 4. delay of 4±50% (2 to 6), retry
45
- 5. delay of 8±50% (4 to 12), retry
46
-
47
- You should consider the default backoff and fuzz factors as a recommendation of
48
- best practice. The base delay, timeout, and maximum number of attempts should
49
- be customized for your application's requirements.
50
-
51
-
52
- #### Buffering Configuration
53
-
54
- Shaka Player's buffering system has three parameters, all of which are nested
55
- under `streaming` in the config object: `bufferingGoal`, `rebufferingGoal`, and
56
- `bufferBehind`. All are expressed in seconds.
57
-
58
- `bufferingGoal` is the amount of content we try to buffer. For example, if
59
- this is set to 30, we fetch segments until we have at least 30 seconds buffered.
60
-
61
- `rebufferingGoal` is the amount of content we have to have buffered before we
62
- can play. For example, if this is 15, we stay in a buffering state until we
63
- have at least 15 seconds buffered. This affects both buffering at startup
64
- and rebuffering later during playback.
65
-
66
- `bufferBehind` is the amount of content we keep in buffer behind the playhead.
67
- For example, if this is 30, we keep 30 seconds of content buffered behind the
68
- video's `currentTime`. When we have more than 30 seconds buffered behind,
69
- content will be removed from the start of the buffer to save memory.
70
- This is a minimum; if the stream's max segment size is longer than the
71
- 'bufferBehind', then that will be used instead.
72
-
73
-
74
- *NOTES:*
75
- - *`rebufferingGoal` should always be less than `bufferingGoal`.*
76
- - *A DASH manifest's `minBufferTime`, if greater, overrides `rebufferingGoal`.*
77
- - *You can ignore `minBufferTime` by setting the
78
- `manifest.dash.ignoreMinBufferTime` configuration to true.*
79
-
80
- All of these settings should be customized for your application. The default
81
- values are very conservative.
82
-
83
- #### Buffering and Adaptation
84
-
85
- While we are playing, we will only buffer the currently chosen stream. We do
86
- not download other bitrates until AbrManager tells us to switch. We also (by
87
- default) do not clear the buffer when we adapt. This means that when we adapt
88
- to a different bitrate, it may not be visible for a while because the old
89
- buffer will still be used. There will be at most `bufferingGoal` seconds left
90
- of the old bitrate in the buffer.
91
-
92
- #### Try it out
93
-
94
- Use the code from {@tutorial basic-usage} and try configuring some of these
95
- parameters in `initPlayer()` to see how they affect playback.
96
-
97
- #### Server Considerations
98
-
99
- Shaka Player makes a number of requests to various servers while streaming. You
100
- need to make sure that Shaka has correct access to those resources. Browsers
101
- impose several restrictions on the content that a webpage has access to.
102
-
103
- One restriction is [CORS][] (Cross-Origin Resource Sharing). This requires
104
- network requests to be made to the same origin, or for the server to explicitly
105
- give access. An "origin" refers to the domain name (e.g., `api.example.com`),
106
- the scheme (e.g., `https:`), and the port (e.g., 80). If you host your assets on
107
- a different origin than your web app, then you'll need to set CORS headers on
108
- the asset server to ensure we have access. For some content, this will also
109
- require allowing the `Range` header by sending the CORS header
110
- `Access-Control-Allow-Headers`.
111
-
112
- Another restriction is called mixed-content. If your webpage is accessed using
113
- `https:`, then all resources that are loaded also need to be loaded using
114
- `https:`. This means that the manifest and all the media segments need to be
115
- loaded using `https:`. This can be most easily done by either having all the
116
- URLs in your manifests always use `https:`, or by having it not include the
117
- scheme (e.g., `//example.com/file.mp4`).
118
-
119
- [CORS]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS