shaka-player 4.6.4 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +29 -29
  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 +1135 -1121
  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 -5774
  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 -4434
  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
@@ -32,6 +32,13 @@ const MediaSession = class {
32
32
  /** @type {?MediaMetadata} */
33
33
  this.metadata;
34
34
  }
35
+
36
+ setActionHandler(type, callback) {
37
+ /** @type {string} */
38
+ this.type = type;
39
+ /** @type {!function(!{action: string, seekOffset: ?number})} */
40
+ this.callback = callback;
41
+ }
35
42
  };
36
43
 
37
44
 
@@ -121,6 +121,14 @@ shaka.extern.AbrManager = class {
121
121
  */
122
122
  setMediaElement(mediaElement) {}
123
123
 
124
+ /**
125
+ * Set CMSD manager.
126
+ *
127
+ * @param {shaka.util.CmsdManager} cmsdManager
128
+ * @exportDoc
129
+ */
130
+ setCmsdManager(cmsdManager) {}
131
+
124
132
  /**
125
133
  * Sets the ABR configuration.
126
134
  *
@@ -158,7 +158,7 @@ shaka.extern.InitDataOverride;
158
158
  * }}
159
159
  *
160
160
  * @description
161
- * Maximum and minimun latency and playback rate for a manifest. When max
161
+ * Maximum and minimum latency and playback rate for a manifest. When max
162
162
  * latency is reached playbackrate is updated to maxPlaybackRate to decrease
163
163
  * latency. When min latency is reached playbackrate is updated to
164
164
  * minPlaybackRate to increase latency.
@@ -169,9 +169,9 @@ shaka.extern.InitDataOverride;
169
169
  * @property {?number} maxPlaybackRate
170
170
  * Maximum playback rate.
171
171
  * @property {?number} minLatency
172
- * Minimun latency in seconds.
172
+ * Minimum latency in seconds.
173
173
  * @property {?number} minPlaybackRate
174
- * Minimun playback rate.
174
+ * Minimum playback rate.
175
175
  *
176
176
  * @exportDoc
177
177
  */
@@ -855,7 +855,8 @@ shaka.extern.InitDataTransform;
855
855
  * keySystemsByURI: !Object.<string, string>,
856
856
  * manifestPreprocessor: function(!Element),
857
857
  * sequenceMode: boolean,
858
- * enableAudioGroups: boolean
858
+ * enableAudioGroups: boolean,
859
+ * multiTypeVariantsAllowed: boolean
859
860
  * }}
860
861
  *
861
862
  * @property {string} clockSyncUri
@@ -917,6 +918,16 @@ shaka.extern.InitDataTransform;
917
918
  * If set, audio streams will be grouped and filtered by their parent
918
919
  * adaptation set ID.
919
920
  * <i>Defaults to <code>false</code>.</i>
921
+ * @property {boolean} multiTypeVariantsAllowed
922
+ * If true, the manifest parser will create variants that have multiple
923
+ * mimeTypes or codecs for video or for audio if there is no other choice.
924
+ * Meant for content where some periods are only available in one mimeType or
925
+ * codec, and other periods are only available in a different mimeType or
926
+ * codec. For example, a stream with baked-in ads where the audio codec does
927
+ * not match the main content.
928
+ * Might result in undesirable behavior if mediaSource.codecSwitchingStrategy
929
+ * is not set to SMOOTH.
930
+ * Defaults to true if SMOOTH codec switching is supported, RELOAD overwise.
920
931
  * @exportDoc
921
932
  */
922
933
  shaka.extern.DashManifestConfiguration;
@@ -1123,7 +1134,9 @@ shaka.extern.ManifestConfiguration;
1123
1134
  * liveSyncMaxLatency: number,
1124
1135
  * liveSyncPlaybackRate: number,
1125
1136
  * liveSyncMinLatency: number,
1126
- * liveSyncMinPlaybackRate: number
1137
+ * liveSyncMinPlaybackRate: number,
1138
+ * allowMediaSourceRecoveries: boolean,
1139
+ * minTimeBetweenRecoveries: number
1127
1140
  * }}
1128
1141
  *
1129
1142
  * @description
@@ -1253,12 +1266,19 @@ shaka.extern.ManifestConfiguration;
1253
1266
  * between 1 and 2. Effective only if liveSync is true. Defaults to
1254
1267
  * <code>1.1</code>.
1255
1268
  * @property {number} liveSyncMinLatency
1256
- * Minimun acceptable latency, in seconds. Effective only if liveSync is
1269
+ * Minimum acceptable latency, in seconds. Effective only if liveSync is
1257
1270
  * true. Defaults to <code>0</code>.
1258
1271
  * @property {number} liveSyncMinPlaybackRate
1259
- * Minimun playback rate used for latency chasing. It is recommended to use a
1272
+ * Minimum playback rate used for latency chasing. It is recommended to use a
1260
1273
  * value between 0 and 1. Effective only if liveSync is true. Defaults to
1261
1274
  * <code>1</code>.
1275
+ * @property {boolean} allowMediaSourceRecoveries
1276
+ * Indicate if we should recover from VIDEO_ERROR resetting Media Source.
1277
+ * Defaults to <code>true</code>.
1278
+ * @property {number} minTimeBetweenRecoveries
1279
+ * The minimum time between recoveries when VIDEO_ERROR is reached, in
1280
+ * seconds.
1281
+ * Defaults to <code>5</code>.
1262
1282
  * @exportDoc
1263
1283
  */
1264
1284
  shaka.extern.StreamingConfiguration;
@@ -1459,6 +1479,32 @@ shaka.extern.AdvancedAbrConfiguration;
1459
1479
  */
1460
1480
  shaka.extern.CmcdConfiguration;
1461
1481
 
1482
+
1483
+ /**
1484
+ * @typedef {{
1485
+ * enabled: boolean,
1486
+ * applyMaximumSuggestedBitrate: boolean,
1487
+ * estimatedThroughputWeightRatio: number
1488
+ * }}
1489
+ *
1490
+ * @description
1491
+ * Common Media Server Data (CMSD) configuration.
1492
+ *
1493
+ * @property {boolean} enabled
1494
+ * If <code>true</code>, enables reading CMSD data in media requests.
1495
+ * Defaults to <code>true</code>.
1496
+ * @property {boolean} applyMaximumSuggestedBitrate
1497
+ * If true, we must apply the maximum suggested bitrate. If false, we ignore
1498
+ * this.
1499
+ * Defaults to <code>true</code>.
1500
+ * @property {number} estimatedThroughputWeightRatio
1501
+ * How much the estimatedThroughput of the CMSD data should be weighted
1502
+ * against the default estimate, between 0 and 1.
1503
+ * Defaults to <code>0.5</code>.
1504
+ * @exportDoc
1505
+ */
1506
+ shaka.extern.CmsdConfiguration;
1507
+
1462
1508
  /**
1463
1509
  * @typedef {{
1464
1510
  * enabled: boolean,
@@ -1554,6 +1600,7 @@ shaka.extern.OfflineConfiguration;
1554
1600
  * abrFactory: shaka.extern.AbrManager.Factory,
1555
1601
  * abr: shaka.extern.AbrConfiguration,
1556
1602
  * cmcd: shaka.extern.CmcdConfiguration,
1603
+ * cmsd: shaka.extern.CmsdConfiguration,
1557
1604
  * lcevc: shaka.extern.LcevcConfiguration,
1558
1605
  * offline: shaka.extern.OfflineConfiguration,
1559
1606
  * preferredAudioLanguage: string,
@@ -1566,8 +1613,10 @@ shaka.extern.OfflineConfiguration;
1566
1613
  * preferredAudioChannelCount: number,
1567
1614
  * preferredVideoHdrLevel: string,
1568
1615
  * preferredVideoLayout: string,
1616
+ * preferredVideoLabel: string,
1569
1617
  * preferredDecodingAttributes: !Array.<string>,
1570
1618
  * preferForcedSubs: boolean,
1619
+ * preferSpatialAudio: boolean,
1571
1620
  * restrictions: shaka.extern.Restrictions,
1572
1621
  * playRangeStart: number,
1573
1622
  * playRangeEnd: number,
@@ -1592,6 +1641,8 @@ shaka.extern.OfflineConfiguration;
1592
1641
  * ABR configuration and settings.
1593
1642
  * @property {shaka.extern.CmcdConfiguration} cmcd
1594
1643
  * CMCD configuration and settings. (Common Media Client Data)
1644
+ * @property {shaka.extern.CmsdConfiguration} cmsd
1645
+ * CMSD configuration and settings. (Common Media Server Data)
1595
1646
  * @property {shaka.extern.LcevcConfiguration} lcevc
1596
1647
  * MPEG-5 LCEVC configuration and settings.
1597
1648
  * (Low Complexity Enhancement Video Codec)
@@ -1603,6 +1654,8 @@ shaka.extern.OfflineConfiguration;
1603
1654
  * Changing this during playback will not affect the current playback.
1604
1655
  * @property {string} preferredAudioLabel
1605
1656
  * The preferred label to use for audio tracks
1657
+ * @property {string} preferredVideoLabel
1658
+ * The preferred label to use for video tracks
1606
1659
  * @property {string} preferredTextLanguage
1607
1660
  * The preferred language to use for text tracks. If a matching text track
1608
1661
  * is found, and the selected audio and text tracks have different languages,
@@ -1640,6 +1693,8 @@ shaka.extern.OfflineConfiguration;
1640
1693
  * If the content has no forced captions and the value is true,
1641
1694
  * no text track is chosen.
1642
1695
  * Changing this during playback will not affect the current playback.
1696
+ * @property {boolean} preferSpatialAudio
1697
+ * If true, a spatial audio track is preferred. Defaults to false.
1643
1698
  * @property {shaka.extern.Restrictions} restrictions
1644
1699
  * The application restrictions to apply to the tracks. These are "hard"
1645
1700
  * restrictions. Any track that fails to meet these restrictions will not
@@ -13,6 +13,8 @@ goog.require('shaka.log');
13
13
  goog.require('shaka.util.StreamUtils');
14
14
  goog.require('shaka.util.Timer');
15
15
 
16
+ goog.requireType('shaka.util.CmsdManager');
17
+
16
18
 
17
19
  /**
18
20
  * @summary
@@ -112,6 +114,9 @@ shaka.abr.SimpleAbrManager = class {
112
114
  }
113
115
  }
114
116
  });
117
+
118
+ /** @private {?shaka.util.CmsdManager} */
119
+ this.cmsdManager_ = null;
115
120
  }
116
121
 
117
122
 
@@ -134,6 +139,8 @@ shaka.abr.SimpleAbrManager = class {
134
139
 
135
140
  this.resizeObserverTimer_.stop();
136
141
 
142
+ this.cmsdManager_ = null;
143
+
137
144
  // Don't reset |startupComplete_|: if we've left the startup interval, we
138
145
  // can start using bandwidth estimates right away after init() is called.
139
146
  }
@@ -171,8 +178,6 @@ shaka.abr.SimpleAbrManager = class {
171
178
  * @export
172
179
  */
173
180
  chooseVariant(preferFastSwitching = false) {
174
- const SimpleAbrManager = shaka.abr.SimpleAbrManager;
175
-
176
181
  let maxHeight = Infinity;
177
182
  let maxWidth = Infinity;
178
183
 
@@ -208,12 +213,12 @@ shaka.abr.SimpleAbrManager = class {
208
213
  }
209
214
 
210
215
  // Get sorted Variants.
211
- let sortedVariants = SimpleAbrManager.filterAndSortVariants_(
216
+ let sortedVariants = this.filterAndSortVariants_(
212
217
  this.config_.restrictions, variants,
213
218
  /* maxHeight= */ Infinity, /* maxWidth= */ Infinity);
214
219
 
215
220
  if (maxHeight != Infinity || maxWidth != Infinity) {
216
- const resolutions = SimpleAbrManager.getResolutionList_(sortedVariants);
221
+ const resolutions = this.getResolutionList_(sortedVariants);
217
222
  for (const resolution of resolutions) {
218
223
  if (resolution.height >= maxHeight && resolution.width >= maxWidth) {
219
224
  maxHeight = resolution.height;
@@ -222,13 +227,11 @@ shaka.abr.SimpleAbrManager = class {
222
227
  }
223
228
  }
224
229
 
225
- sortedVariants = SimpleAbrManager.filterAndSortVariants_(
230
+ sortedVariants = this.filterAndSortVariants_(
226
231
  this.config_.restrictions, variants, maxHeight, maxWidth);
227
232
  }
228
233
 
229
- const defaultBandwidthEstimate = this.getDefaultBandwidth_();
230
- const currentBandwidth = this.bandwidthEstimator_.getBandwidthEstimate(
231
- defaultBandwidthEstimate);
234
+ const currentBandwidth = this.getBandwidthEstimate();
232
235
 
233
236
  if (variants.length && !sortedVariants.length) {
234
237
  // If we couldn't meet the ABR restrictions, we should still play
@@ -238,7 +241,7 @@ shaka.abr.SimpleAbrManager = class {
238
241
  // restrictions and keep just the first (lowest-bandwidth) one.
239
242
  shaka.log.warning('No variants met the ABR restrictions. ' +
240
243
  'Choosing a variant by lowest bandwidth.');
241
- sortedVariants = SimpleAbrManager.filterAndSortVariants_(
244
+ sortedVariants = this.filterAndSortVariants_(
242
245
  /* restrictions= */ null, variants,
243
246
  /* maxHeight= */ Infinity, /* maxWidth= */ Infinity);
244
247
  sortedVariants = [sortedVariants[0]];
@@ -323,8 +326,12 @@ shaka.abr.SimpleAbrManager = class {
323
326
  */
324
327
  getBandwidthEstimate() {
325
328
  const defaultBandwidthEstimate = this.getDefaultBandwidth_();
326
- return this.bandwidthEstimator_.getBandwidthEstimate(
329
+ const bandwidthEstimate = this.bandwidthEstimator_.getBandwidthEstimate(
327
330
  defaultBandwidthEstimate);
331
+ if (this.cmsdManager_) {
332
+ return this.cmsdManager_.getBandwidthEstimate(bandwidthEstimate);
333
+ }
334
+ return bandwidthEstimate;
328
335
  }
329
336
 
330
337
 
@@ -368,6 +375,15 @@ shaka.abr.SimpleAbrManager = class {
368
375
  }
369
376
 
370
377
 
378
+ /**
379
+ * @override
380
+ * @export
381
+ */
382
+ setCmsdManager(cmsdManager) {
383
+ this.cmsdManager_ = cmsdManager;
384
+ }
385
+
386
+
371
387
  /**
372
388
  * @override
373
389
  * @export
@@ -408,9 +424,7 @@ shaka.abr.SimpleAbrManager = class {
408
424
  }
409
425
 
410
426
  const chosenVariant = this.chooseVariant();
411
- const defaultBandwidthEstimate = this.getDefaultBandwidth_();
412
- const bandwidthEstimate = this.bandwidthEstimator_.getBandwidthEstimate(
413
- defaultBandwidthEstimate);
427
+ const bandwidthEstimate = this.getBandwidthEstimate();
414
428
  const currentBandwidthKbps = Math.round(bandwidthEstimate / 1000.0);
415
429
 
416
430
  if (chosenVariant) {
@@ -452,7 +466,19 @@ shaka.abr.SimpleAbrManager = class {
452
466
  * |restrictions| and sorted in ascending order of bandwidth.
453
467
  * @private
454
468
  */
455
- static filterAndSortVariants_(restrictions, variants, maxHeight, maxWidth) {
469
+ filterAndSortVariants_(restrictions, variants, maxHeight, maxWidth) {
470
+ if (this.cmsdManager_) {
471
+ const maxBitrate = this.cmsdManager_.getMaxBitrate();
472
+ if (maxBitrate) {
473
+ variants = variants.filter((variant) => {
474
+ if (!variant.bandwidth || !maxBitrate) {
475
+ return true;
476
+ }
477
+ return variant.bandwidth <= maxBitrate;
478
+ });
479
+ }
480
+ }
481
+
456
482
  if (restrictions) {
457
483
  variants = variants.filter((variant) => {
458
484
  // This was already checked in another scope, but the compiler doesn't
@@ -475,7 +501,7 @@ shaka.abr.SimpleAbrManager = class {
475
501
  * @return {!Array.<{height: number, width: number}>}
476
502
  * @private
477
503
  */
478
- static getResolutionList_(variants) {
504
+ getResolutionList_(variants) {
479
505
  const resolutions = [];
480
506
  for (const variant of variants) {
481
507
  const video = variant.video;
@@ -568,7 +568,7 @@ shaka.cea.Cea708Service = class {
568
568
  // Create the window if it doesn't exist.
569
569
  const windowAlreadyExists = this.windows_[windowNum] !== null;
570
570
  if (!windowAlreadyExists) {
571
- const window = new shaka.cea.Cea708Window(windowNum);
571
+ const window = new shaka.cea.Cea708Window(windowNum, this.serviceNumber_);
572
572
  window.setStartTime(pts);
573
573
  this.windows_[windowNum] = window;
574
574
  }
@@ -9,7 +9,7 @@ goog.provide('shaka.cea.Cea708Window');
9
9
  goog.require('shaka.cea.CeaUtils');
10
10
  goog.require('shaka.cea.CeaUtils.StyledChar');
11
11
  goog.require('shaka.text.Cue');
12
- goog.require('shaka.util.Functional');
12
+ goog.require('shaka.text.CueRegion');
13
13
 
14
14
 
15
15
  /**
@@ -19,7 +19,13 @@ shaka.cea.Cea708Window = class {
19
19
  /**
20
20
  * @param {number} windowNum
21
21
  */
22
- constructor(windowNum) {
22
+ constructor(windowNum, parentService) {
23
+ /**
24
+ * Number for the parent service (1 - 63).
25
+ * @private {number}
26
+ */
27
+ this.parentService_ = parentService;
28
+
23
29
  /**
24
30
  * A number from 0 - 7 indicating the window number in the
25
31
  * service that owns this window.
@@ -132,11 +138,6 @@ shaka.cea.Cea708Window = class {
132
138
  this.backgroundColor_ = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;
133
139
 
134
140
  this.resetMemory();
135
-
136
- // TODO Support window positioning by mapping them to Regions.
137
- // https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-708
138
- shaka.util.Functional.ignored(this.verticalAnchor_, this.relativeToggle_,
139
- this.horizontalAnchor_, this.anchorId_, this.windowNum_);
140
141
  }
141
142
 
142
143
  /**
@@ -306,6 +307,8 @@ shaka.cea.Cea708Window = class {
306
307
  topLevelCue.textAlign = shaka.text.Cue.textAlign.CENTER;
307
308
  }
308
309
 
310
+ this.adjustRegion_(topLevelCue.region);
311
+
309
312
  const caption = shaka.cea.CeaUtils.getParsedCaption(
310
313
  topLevelCue, stream, this.memory_, this.startTime_, endTime);
311
314
  if (caption) {
@@ -398,6 +401,75 @@ shaka.cea.Cea708Window = class {
398
401
  setStartTime(pts) {
399
402
  this.startTime_ = pts;
400
403
  }
404
+
405
+ /**
406
+ * Support window positioning by mapping anchor related values to CueRegion.
407
+ * https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-708
408
+ * @param {shaka.text.CueRegion} region
409
+ * @private
410
+ */
411
+ adjustRegion_(region) {
412
+ if (this.parentService_) {
413
+ region.id += 'svc' + this.parentService_;
414
+ }
415
+ region.id += 'win' + this.windowNum_;
416
+
417
+ region.height = this.rowCount_;
418
+ region.width = this.colCount_;
419
+ region.heightUnits = shaka.text.CueRegion.units.LINES;
420
+ region.widthUnits = shaka.text.CueRegion.units.LINES;
421
+
422
+ region.viewportAnchorX = this.horizontalAnchor_;
423
+ region.viewportAnchorY = this.verticalAnchor_;
424
+ // WebVTT's region viewport anchors are technically always in percentages.
425
+ // However, we don't know the aspect ratio of the video at this point,
426
+ // which determines how we interpret the horizontal anchor.
427
+ // So, we expose the additonal flag to reflect whether these viewport anchor
428
+ // values can be used be used as is or should be converted to percentages.
429
+ region.viewportAnchorUnits = this.relativeToggle_ ?
430
+ shaka.text.CueRegion.units.PERCENTAGE : shaka.text.CueRegion.units.LINES;
431
+
432
+ const AnchorId = shaka.cea.Cea708Window.AnchorId;
433
+
434
+ switch (this.anchorId_) {
435
+ case AnchorId.UPPER_LEFT:
436
+ region.regionAnchorX = 0;
437
+ region.regionAnchorY = 0;
438
+ break;
439
+ case AnchorId.UPPER_CENTER:
440
+ region.regionAnchorX = 50;
441
+ region.regionAnchorY = 0;
442
+ break;
443
+ case AnchorId.UPPER_RIGHT:
444
+ region.regionAnchorX = 100;
445
+ region.regionAnchorY = 0;
446
+ break;
447
+ case AnchorId.MIDDLE_LEFT:
448
+ region.regionAnchorX = 0;
449
+ region.regionAnchorY = 50;
450
+ break;
451
+ case AnchorId.MIDDLE_CENTER:
452
+ region.regionAnchorX = 50;
453
+ region.regionAnchorY = 50;
454
+ break;
455
+ case AnchorId.MIDDLE_RIGHT:
456
+ region.regionAnchorX = 100;
457
+ region.regionAnchorY = 50;
458
+ break;
459
+ case AnchorId.LOWER_LEFT:
460
+ region.regionAnchorX = 0;
461
+ region.regionAnchorY = 100;
462
+ break;
463
+ case AnchorId.LOWER_CENTER:
464
+ region.regionAnchorX = 50;
465
+ region.regionAnchorY = 100;
466
+ break;
467
+ case AnchorId.LOWER_RIGHT:
468
+ region.regionAnchorX = 100;
469
+ region.regionAnchorY = 100;
470
+ break;
471
+ }
472
+ }
401
473
  };
402
474
 
403
475
  /**
@@ -411,6 +483,22 @@ shaka.cea.Cea708Window.TextJustification = {
411
483
  FULL: 3,
412
484
  };
413
485
 
486
+ /**
487
+ * Possible AnchorId values.
488
+ * @const @enum {number}
489
+ */
490
+ shaka.cea.Cea708Window.AnchorId = {
491
+ UPPER_LEFT: 0,
492
+ UPPER_CENTER: 1,
493
+ UPPER_RIGHT: 2,
494
+ MIDDLE_LEFT: 3,
495
+ MIDDLE_CENTER: 4,
496
+ MIDDLE_RIGHT: 5,
497
+ LOWER_LEFT: 6,
498
+ LOWER_CENTER: 7,
499
+ LOWER_RIGHT: 8,
500
+ };
501
+
414
502
  /**
415
503
  * Can be indexed 0-31 for 4:3 format, and 0-41 for 16:9 formats.
416
504
  * Thus the absolute maximum is 42 columns for the 16:9 format.
@@ -14,6 +14,7 @@ goog.require('shaka.dash.SegmentBase');
14
14
  goog.require('shaka.dash.SegmentList');
15
15
  goog.require('shaka.dash.SegmentTemplate');
16
16
  goog.require('shaka.log');
17
+ goog.require('shaka.media.Capabilities');
17
18
  goog.require('shaka.media.ManifestParser');
18
19
  goog.require('shaka.media.PresentationTimeline');
19
20
  goog.require('shaka.media.SegmentIndex');
@@ -134,6 +135,10 @@ shaka.dash.DashParser = class {
134
135
  if (this.contentSteeringManager_) {
135
136
  this.contentSteeringManager_.configure(this.config_);
136
137
  }
138
+
139
+ this.periodCombiner_.setAllowMultiTypeVariants(
140
+ this.config_.dash.multiTypeVariantsAllowed &&
141
+ shaka.media.Capabilities.isChangeTypeSupported());
137
142
  }
138
143
 
139
144
  /**
@@ -271,8 +276,16 @@ shaka.dash.DashParser = class {
271
276
  async requestManifest_() {
272
277
  const requestType = shaka.net.NetworkingEngine.RequestType.MANIFEST;
273
278
  const type = shaka.net.NetworkingEngine.AdvancedRequestType.MPD;
279
+ let manifestUris = this.manifestUris_;
280
+ if (this.manifestUris_.length > 1 && this.contentSteeringManager_) {
281
+ const locations = this.contentSteeringManager_.getLocations(
282
+ 'Location', /* ignoreBaseUrls= */ true);
283
+ if (locations.length) {
284
+ manifestUris = locations;
285
+ }
286
+ }
274
287
  const request = shaka.net.NetworkingEngine.makeRequest(
275
- this.manifestUris_, this.config_.retryParameters);
288
+ manifestUris, this.config_.retryParameters);
276
289
  const startTime = Date.now();
277
290
 
278
291
  const response = await this.makeNetworkRequest_(
@@ -347,7 +360,6 @@ shaka.dash.DashParser = class {
347
360
  * @private
348
361
  */
349
362
  async processManifest_(mpd, finalManifestUri) {
350
- const Functional = shaka.util.Functional;
351
363
  const XmlUtils = shaka.util.XmlUtils;
352
364
 
353
365
  const manifestPreprocessor = this.config_.dash.manifestPreprocessor;
@@ -355,19 +367,47 @@ shaka.dash.DashParser = class {
355
367
  manifestPreprocessor(mpd);
356
368
  }
357
369
 
370
+ if (this.contentSteeringManager_) {
371
+ this.contentSteeringManager_.clearPreviousLocations();
372
+ }
373
+
358
374
  // Get any Location elements. This will update the manifest location and
359
375
  // the base URI.
360
376
  /** @type {!Array.<string>} */
361
377
  let manifestBaseUris = [finalManifestUri];
362
378
  /** @type {!Array.<string>} */
363
- const locations = XmlUtils.findChildren(mpd, 'Location')
364
- .map(XmlUtils.getContents)
365
- .filter(Functional.isNotNull);
366
- if (locations.length > 0) {
367
- const absoluteLocations = shaka.util.ManifestParserUtils.resolveUris(
368
- manifestBaseUris, locations);
369
- this.manifestUris_ = absoluteLocations;
370
- manifestBaseUris = absoluteLocations;
379
+ const locations = [];
380
+ /** @type {!Map.<string, string>} */
381
+ const locationsMapping = new Map();
382
+ const locationsObjs = XmlUtils.findChildren(mpd, 'Location');
383
+ for (const locationsObj of locationsObjs) {
384
+ const serviceLocation = locationsObj.getAttribute('serviceLocation');
385
+ const uri = XmlUtils.getContents(locationsObj);
386
+ if (!uri) {
387
+ continue;
388
+ }
389
+ const finalUri = shaka.util.ManifestParserUtils.resolveUris(
390
+ manifestBaseUris, [uri])[0];
391
+ if (serviceLocation) {
392
+ if (this.contentSteeringManager_) {
393
+ this.contentSteeringManager_.addLocation(
394
+ 'Location', serviceLocation, finalUri);
395
+ } else {
396
+ locationsMapping.set(serviceLocation, finalUri);
397
+ }
398
+ }
399
+ locations.push(finalUri);
400
+ }
401
+ if (this.contentSteeringManager_) {
402
+ const steeringlocations = this.contentSteeringManager_.getLocations(
403
+ 'Location', /* ignoreBaseUrls= */ true);
404
+ if (steeringlocations.length > 0) {
405
+ this.manifestUris_ = steeringlocations;
406
+ manifestBaseUris = steeringlocations;
407
+ }
408
+ } else if (locations.length) {
409
+ this.manifestUris_ = locations;
410
+ manifestBaseUris = locations;
371
411
  }
372
412
 
373
413
  let contentSteeringPromise = Promise.resolve();
@@ -400,13 +440,17 @@ shaka.dash.DashParser = class {
400
440
  this.contentSteeringManager_.setBaseUris(manifestBaseUris);
401
441
  this.contentSteeringManager_.setDefaultPathwayId(defaultPathwayId);
402
442
  }
443
+ for (const serviceLocation of locationsMapping.keys()) {
444
+ const uri = locationsMapping.get(serviceLocation);
445
+ this.contentSteeringManager_.addLocation(
446
+ 'Location', serviceLocation, uri);
447
+ }
403
448
  }
404
449
 
405
450
  const uriObjs = XmlUtils.findChildren(mpd, 'BaseURL');
406
451
  let calculatedBaseUris;
407
452
  let someLocationValid = false;
408
453
  if (this.contentSteeringManager_) {
409
- this.contentSteeringManager_.clearPreviousLocations();
410
454
  for (const uriObj of uriObjs) {
411
455
  const serviceLocation = uriObj.getAttribute('serviceLocation');
412
456
  const uri = XmlUtils.getContents(uriObj);