shaka-player 4.6.3 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/README.md +1 -0
  2. package/dist/controls.css +1 -1
  3. package/dist/controls.css.map +1 -1
  4. package/dist/deps.js +13 -9
  5. package/dist/locales.js +33 -33
  6. package/dist/shaka-player.compiled.d.ts +47 -4
  7. package/dist/shaka-player.compiled.debug.d.ts +47 -4
  8. package/dist/shaka-player.compiled.debug.externs.js +50 -2
  9. package/dist/shaka-player.compiled.debug.js +408 -376
  10. package/dist/shaka-player.compiled.debug.map +4 -4
  11. package/dist/shaka-player.compiled.externs.js +50 -2
  12. package/dist/shaka-player.compiled.js +1134 -1118
  13. package/dist/shaka-player.compiled.map +4 -4
  14. package/dist/shaka-player.ui.d.ts +69 -5
  15. package/dist/shaka-player.ui.debug.d.ts +69 -5
  16. package/dist/shaka-player.ui.debug.externs.js +82 -2
  17. package/dist/shaka-player.ui.debug.js +457 -420
  18. package/dist/shaka-player.ui.debug.map +4 -4
  19. package/dist/shaka-player.ui.externs.js +82 -2
  20. package/dist/shaka-player.ui.js +1305 -1289
  21. package/dist/shaka-player.ui.map +4 -4
  22. package/externs/mediasession.js +7 -0
  23. package/externs/shaka/abr_manager.js +8 -0
  24. package/externs/shaka/manifest.js +3 -3
  25. package/externs/shaka/player.js +59 -4
  26. package/lib/abr/simple_abr_manager.js +41 -15
  27. package/lib/ads/client_side_ad_manager.js +4 -0
  28. package/lib/ads/media_tailor_ad_manager.js +5 -0
  29. package/lib/ads/server_side_ad_manager.js +4 -0
  30. package/lib/cea/cea708_service.js +1 -1
  31. package/lib/cea/cea708_window.js +95 -7
  32. package/lib/dash/dash_parser.js +55 -11
  33. package/lib/hls/hls_parser.js +17 -5
  34. package/lib/media/adaptation_set_criteria.js +76 -10
  35. package/lib/media/drm_engine.js +0 -3
  36. package/lib/media/media_source_engine.js +42 -18
  37. package/lib/media/segment_reference.js +12 -0
  38. package/lib/media/streaming_engine.js +58 -5
  39. package/lib/media/video_wrapper.js +4 -3
  40. package/lib/player.js +95 -11
  41. package/lib/text/simple_text_displayer.js +8 -7
  42. package/lib/text/text_utils.js +39 -13
  43. package/lib/text/ui_text_displayer.js +20 -11
  44. package/lib/text/web_vtt_generator.js +1 -1
  45. package/lib/util/cmsd_manager.js +269 -0
  46. package/lib/util/content_steering_manager.js +5 -1
  47. package/lib/util/mime_utils.js +6 -2
  48. package/lib/util/periods.js +108 -39
  49. package/lib/util/player_configuration.js +19 -5
  50. package/lib/util/stream_utils.js +82 -13
  51. package/package.json +1 -1
  52. package/ui/audio_language_selection.js +3 -0
  53. package/ui/controls.js +60 -0
  54. package/ui/externs/ui.js +12 -1
  55. package/ui/hidden_fast_forward_button.js +32 -0
  56. package/ui/hidden_rewind_button.js +32 -0
  57. package/ui/hidden_seek_button.js +121 -0
  58. package/ui/less/buttons.less +50 -0
  59. package/ui/less/containers.less +18 -0
  60. package/ui/resolution_selection.js +2 -0
  61. package/ui/ui.js +2 -0
  62. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -75
  63. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
  64. package/.github/ISSUE_TEMPLATE/question.md +0 -26
  65. package/.github/config.yml +0 -1
  66. package/.github/workflows/appspot.yaml +0 -39
  67. package/.github/workflows/build-and-test.yaml +0 -222
  68. package/.github/workflows/compute-incremental-coverage.py +0 -265
  69. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +0 -56
  70. package/.github/workflows/custom-actions/set-commit-status/action.yaml +0 -37
  71. package/.github/workflows/deflake.yaml +0 -31
  72. package/.github/workflows/demo-version-index.yaml +0 -43
  73. package/.github/workflows/nightly-demo.yaml +0 -42
  74. package/.github/workflows/release-please.yaml +0 -193
  75. package/.github/workflows/report-incremental-coverage.yaml +0 -39
  76. package/.github/workflows/safari-homedir-launcher.sh +0 -18
  77. package/.github/workflows/selenium-lab-tests.yaml +0 -370
  78. package/.github/workflows/shaka-bot-commands/command-help.sh +0 -27
  79. package/.github/workflows/shaka-bot-commands/command-test.sh +0 -56
  80. package/.github/workflows/shaka-bot-commands/lib.sh +0 -83
  81. package/.github/workflows/shaka-bot-commands/main.sh +0 -51
  82. package/.github/workflows/sync-labels.yaml +0 -33
  83. package/.github/workflows/talk-to-shaka-bot.yaml +0 -29
  84. package/.github/workflows/update-issues.yaml +0 -31
  85. package/.github/workflows/update-screenshots.yaml +0 -142
  86. package/.github/workflows/validate-pr-title.yaml +0 -27
  87. package/CHANGELOG.md +0 -5764
  88. package/CODE_OF_CONDUCT.md +0 -93
  89. package/CONTRIBUTING.md +0 -76
  90. package/demo/TengwarTelcontar.woff2 +0 -0
  91. package/demo/app_logo_144.png +0 -0
  92. package/demo/app_logo_192.png +0 -0
  93. package/demo/app_logo_256.png +0 -0
  94. package/demo/app_logo_384.png +0 -0
  95. package/demo/app_logo_512.png +0 -0
  96. package/demo/app_manifest.json +0 -29
  97. package/demo/asset_card.js +0 -410
  98. package/demo/autoTemplate.txt +0 -61
  99. package/demo/cast_receiver/idle1.jpg +0 -0
  100. package/demo/cast_receiver/idle2.jpg +0 -0
  101. package/demo/cast_receiver/idle3.jpg +0 -0
  102. package/demo/cast_receiver/index.html +0 -75
  103. package/demo/cast_receiver/receiver_app.css +0 -111
  104. package/demo/cast_receiver/receiver_app.js +0 -158
  105. package/demo/close_button.js +0 -60
  106. package/demo/common/asset.js +0 -511
  107. package/demo/common/assets.js +0 -1635
  108. package/demo/config.js +0 -859
  109. package/demo/custom.js +0 -907
  110. package/demo/customWarning.txt +0 -8
  111. package/demo/demo.less +0 -591
  112. package/demo/demo_uncompiled.js +0 -11
  113. package/demo/demo_utils.js +0 -113
  114. package/demo/favicon.ico +0 -0
  115. package/demo/front.js +0 -156
  116. package/demo/icons/README.md +0 -4
  117. package/demo/icons/baseline-audiotrack-24px.svg +0 -1
  118. package/demo/icons/baseline-closed_caption-24px.svg +0 -1
  119. package/demo/icons/baseline-fast_forward-24px.svg +0 -1
  120. package/demo/icons/baseline-language-24px.svg +0 -1
  121. package/demo/icons/baseline-live_tv-24px.svg +0 -1
  122. package/demo/icons/baseline-subtitles-24px.svg +0 -1
  123. package/demo/icons/baseline-surround_sound-24px.svg +0 -1
  124. package/demo/icons/custom_ad.svg +0 -1
  125. package/demo/icons/custom_box_with_text.svg +0 -1
  126. package/demo/icons/custom_clear_key.svg +0 -1
  127. package/demo/icons/custom_high_definition.svg +0 -1
  128. package/demo/icons/custom_playready.svg +0 -1
  129. package/demo/icons/custom_ultra_high_definition.svg +0 -1
  130. package/demo/icons/custom_widevine.svg +0 -1
  131. package/demo/index.html +0 -173
  132. package/demo/input.js +0 -270
  133. package/demo/input_container.js +0 -218
  134. package/demo/load.js +0 -156
  135. package/demo/main.js +0 -1854
  136. package/demo/search.js +0 -452
  137. package/demo/service_worker.js +0 -355
  138. package/demo/shaka_logo_trans.png +0 -0
  139. package/demo/tooltip.js +0 -29
  140. package/demo/visualizer.js +0 -335
  141. package/demo/visualizer_button.js +0 -84
  142. package/dist/demo.compiled.debug.js +0 -340
  143. package/dist/demo.compiled.debug.map +0 -8
  144. package/dist/demo.compiled.js +0 -340
  145. package/dist/demo.compiled.map +0 -8
  146. package/dist/demo.css +0 -6
  147. package/dist/demo.css.map +0 -1
  148. package/dist/receiver.compiled.debug.js +0 -187
  149. package/dist/receiver.compiled.debug.map +0 -8
  150. package/dist/receiver.compiled.js +0 -187
  151. package/dist/receiver.compiled.map +0 -8
  152. package/docs/announcement-list-join-group.png +0 -0
  153. package/docs/api-mainpage.md +0 -28
  154. package/docs/design/REDESIGN.md +0 -283
  155. package/docs/design/architecture.md +0 -13
  156. package/docs/design/bg-fetch-after.gv +0 -29
  157. package/docs/design/bg-fetch-after.gv.png +0 -0
  158. package/docs/design/bg-fetch-before.gv +0 -18
  159. package/docs/design/bg-fetch-before.gv.png +0 -0
  160. package/docs/design/bg-fetch.md +0 -134
  161. package/docs/design/cast.gv +0 -35
  162. package/docs/design/cast.gv.png +0 -0
  163. package/docs/design/chromecast.md +0 -151
  164. package/docs/design/codec_preferences.md +0 -158
  165. package/docs/design/dash-audio-channels.md +0 -123
  166. package/docs/design/dash-manifests.md +0 -248
  167. package/docs/design/dash-timeline.svg +0 -4
  168. package/docs/design/dataflow.gv +0 -66
  169. package/docs/design/dataflow.gv.png +0 -0
  170. package/docs/design/export.md +0 -70
  171. package/docs/design/fuzzy-locale-matching.md +0 -40
  172. package/docs/design/gap-jumping.md +0 -151
  173. package/docs/design/lcevc-architecture.png +0 -0
  174. package/docs/design/lcevc-demo.png +0 -0
  175. package/docs/design/lcevc-integration.md +0 -72
  176. package/docs/design/locale_compatibility.svg +0 -1
  177. package/docs/design/locales_tree.svg +0 -1
  178. package/docs/design/localization-design-principles.md +0 -158
  179. package/docs/design/newdemo.gv +0 -83
  180. package/docs/design/newdemo.gv.png +0 -0
  181. package/docs/design/offline.gv +0 -43
  182. package/docs/design/offline.gv.png +0 -0
  183. package/docs/design/offline.md +0 -153
  184. package/docs/design/ownership.gv +0 -76
  185. package/docs/design/ownership.gv.png +0 -0
  186. package/docs/design/preload.md +0 -299
  187. package/docs/design/preload.png +0 -0
  188. package/docs/design/talking-about-languages.md +0 -46
  189. package/docs/design/timeline.svg +0 -152
  190. package/docs/design/ui.md +0 -31
  191. package/docs/design/ui_player_relationships.svg +0 -1
  192. package/docs/jsdoc-plugin.js +0 -74
  193. package/docs/jsdoc-template/README.md +0 -1
  194. package/docs/jsdoc-template/publish.js +0 -879
  195. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
  196. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
  197. package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
  198. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  199. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  200. package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  201. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
  202. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
  203. package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
  204. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.eot +0 -0
  205. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
  206. package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.woff +0 -0
  207. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  208. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  209. package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  210. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
  211. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
  212. package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
  213. package/docs/jsdoc-template/static/scripts/linenumber.js +0 -44
  214. package/docs/jsdoc-template/static/scripts/show-widget.js +0 -55
  215. package/docs/jsdoc-template/static/styles/jsdoc-default.css +0 -438
  216. package/docs/jsdoc-template/tmpl/augments.tmpl +0 -10
  217. package/docs/jsdoc-template/tmpl/container.tmpl +0 -205
  218. package/docs/jsdoc-template/tmpl/details.tmpl +0 -152
  219. package/docs/jsdoc-template/tmpl/example.tmpl +0 -2
  220. package/docs/jsdoc-template/tmpl/examples.tmpl +0 -13
  221. package/docs/jsdoc-template/tmpl/exceptions.tmpl +0 -32
  222. package/docs/jsdoc-template/tmpl/layout.tmpl +0 -50
  223. package/docs/jsdoc-template/tmpl/mainpage.tmpl +0 -14
  224. package/docs/jsdoc-template/tmpl/members.tmpl +0 -47
  225. package/docs/jsdoc-template/tmpl/method.tmpl +0 -140
  226. package/docs/jsdoc-template/tmpl/modifies.tmpl +0 -14
  227. package/docs/jsdoc-template/tmpl/params.tmpl +0 -131
  228. package/docs/jsdoc-template/tmpl/properties.tmpl +0 -125
  229. package/docs/jsdoc-template/tmpl/returns.tmpl +0 -19
  230. package/docs/jsdoc-template/tmpl/source.tmpl +0 -8
  231. package/docs/jsdoc-template/tmpl/tutorial.tmpl +0 -21
  232. package/docs/jsdoc-template/tmpl/type.tmpl +0 -7
  233. package/docs/jsdoc.conf.json +0 -38
  234. package/docs/shaka-player-logo.png +0 -0
  235. package/docs/style.md +0 -174
  236. package/docs/tutorials/a11y.md +0 -64
  237. package/docs/tutorials/ad_monetization.md +0 -292
  238. package/docs/tutorials/application-level-redirects.md +0 -94
  239. package/docs/tutorials/architecture.md +0 -32
  240. package/docs/tutorials/basic-usage.md +0 -89
  241. package/docs/tutorials/blob-url.md +0 -15
  242. package/docs/tutorials/config.md +0 -148
  243. package/docs/tutorials/debugging.md +0 -189
  244. package/docs/tutorials/drm-config.md +0 -274
  245. package/docs/tutorials/errors.md +0 -95
  246. package/docs/tutorials/fairplay.md +0 -242
  247. package/docs/tutorials/faq.md +0 -252
  248. package/docs/tutorials/index.json +0 -29
  249. package/docs/tutorials/lcevc.md +0 -118
  250. package/docs/tutorials/license-server-auth.md +0 -248
  251. package/docs/tutorials/license-wrapping.md +0 -168
  252. package/docs/tutorials/manifest-parser.md +0 -365
  253. package/docs/tutorials/network-and-buffering-config.md +0 -119
  254. package/docs/tutorials/offline.md +0 -683
  255. package/docs/tutorials/plugins.md +0 -184
  256. package/docs/tutorials/selenium-grid-config.md +0 -174
  257. package/docs/tutorials/service-worker.md +0 -106
  258. package/docs/tutorials/ui-customization.md +0 -288
  259. package/docs/tutorials/ui.md +0 -230
  260. package/docs/tutorials/upgrade-manifest.md +0 -281
  261. package/docs/tutorials/upgrade.md +0 -104
  262. package/docs/tutorials/welcome.md +0 -108
  263. package/docs/tutorials/widevine-service-certs.md +0 -45
  264. package/karma.conf.js +0 -879
  265. package/maintained-branches.md +0 -15
  266. package/roadmap.md +0 -186
  267. package/test/abr/simple_abr_manager_unit.js +0 -398
  268. package/test/ads/ad_manager_unit.js +0 -260
  269. package/test/assumptions/uint8_array_unit.js +0 -22
  270. package/test/cast/cast_proxy_unit.js +0 -736
  271. package/test/cast/cast_receiver_integration.js +0 -488
  272. package/test/cast/cast_receiver_unit.js +0 -1183
  273. package/test/cast/cast_sender_unit.js +0 -973
  274. package/test/cast/cast_utils_unit.js +0 -311
  275. package/test/cea/cea608_memory_unit.js +0 -411
  276. package/test/cea/cea708_service_unit.js +0 -674
  277. package/test/cea/cea708_window_unit.js +0 -373
  278. package/test/cea/cea_decoder_unit.js +0 -615
  279. package/test/cea/dtvcc_packet_builder_unit.js +0 -158
  280. package/test/cea/dtvcc_packet_unit.js +0 -60
  281. package/test/cea/mp4_cea_parser_unit.js +0 -127
  282. package/test/codec_switching/codec_switching_integration.js +0 -182
  283. package/test/dash/dash_parser_content_protection_unit.js +0 -998
  284. package/test/dash/dash_parser_integration.js +0 -74
  285. package/test/dash/dash_parser_live_unit.js +0 -1542
  286. package/test/dash/dash_parser_manifest_unit.js +0 -3121
  287. package/test/dash/dash_parser_segment_base_unit.js +0 -421
  288. package/test/dash/dash_parser_segment_list_unit.js +0 -380
  289. package/test/dash/dash_parser_segment_template_unit.js +0 -910
  290. package/test/dash/mpd_utils_unit.js +0 -794
  291. package/test/demo/demo_unit.js +0 -108
  292. package/test/deprecate/enforcer_unit.js +0 -74
  293. package/test/deprecate/version_unit.js +0 -57
  294. package/test/hls/hls_live_unit.js +0 -1330
  295. package/test/hls/hls_parser_unit.js +0 -5276
  296. package/test/hls/manifest_text_parser_unit.js +0 -545
  297. package/test/media/adaptation_set_criteria_unit.js +0 -806
  298. package/test/media/adaptation_set_unit.js +0 -229
  299. package/test/media/buffering_observer_unit.js +0 -143
  300. package/test/media/closed_caption_parser_unit.js +0 -18
  301. package/test/media/content_workarounds_unit.js +0 -43
  302. package/test/media/drm_engine_integration.js +0 -356
  303. package/test/media/drm_engine_unit.js +0 -2778
  304. package/test/media/media_source_engine_integration.js +0 -691
  305. package/test/media/media_source_engine_unit.js +0 -1512
  306. package/test/media/mp4_segment_index_parser_unit.js +0 -80
  307. package/test/media/play_rate_controller_unit.js +0 -69
  308. package/test/media/playhead_unit.js +0 -1394
  309. package/test/media/presentation_timeline_unit.js +0 -477
  310. package/test/media/quality_observer_unit.js +0 -138
  311. package/test/media/region_observer_unit.js +0 -374
  312. package/test/media/region_timeline_unit.js +0 -139
  313. package/test/media/segment_index_unit.js +0 -1080
  314. package/test/media/segment_prefetch_unit.js +0 -243
  315. package/test/media/segment_reference_unit.js +0 -63
  316. package/test/media/stall_detector_unit.js +0 -184
  317. package/test/media/streaming_engine_integration.js +0 -632
  318. package/test/media/streaming_engine_unit.js +0 -4211
  319. package/test/media/time_ranges_utils_unit.js +0 -123
  320. package/test/media/webm_segment_index_parser_unit.js +0 -90
  321. package/test/mss/mss_parser_content_protection_unit.js +0 -49
  322. package/test/mss/mss_parser_unit.js +0 -474
  323. package/test/mss/mss_player_integration.js +0 -124
  324. package/test/net/data_uri_plugin_unit.js +0 -105
  325. package/test/net/http_plugin_unit.js +0 -439
  326. package/test/net/networking_engine_unit.js +0 -1236
  327. package/test/net/networking_utils_unit.js +0 -37
  328. package/test/offline/download_progress_estimator_unit.js +0 -90
  329. package/test/offline/indexeddb_storage_unit.js +0 -192
  330. package/test/offline/manifest_convert_unit.js +0 -622
  331. package/test/offline/offline_integration.js +0 -168
  332. package/test/offline/offline_manifest_parser_unit.js +0 -231
  333. package/test/offline/offline_scheme_unit.js +0 -154
  334. package/test/offline/offline_uri_unit.js +0 -59
  335. package/test/offline/storage_compatibility_unit.js +0 -344
  336. package/test/offline/storage_integration.js +0 -1858
  337. package/test/player_external.js +0 -237
  338. package/test/player_integration.js +0 -1371
  339. package/test/player_load_graph_integration.js +0 -865
  340. package/test/player_src_equals_external.js +0 -154
  341. package/test/player_src_equals_integration.js +0 -527
  342. package/test/player_unit.js +0 -4434
  343. package/test/polyfill/media_capabilities_unit.js +0 -277
  344. package/test/polyfill/patchedmediakeys_apple_unit.js +0 -130
  345. package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
  346. package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
  347. package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
  348. package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
  349. package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
  350. package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
  351. package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
  352. package/test/test/assets/3675/dash_0.mpd +0 -30
  353. package/test/test/assets/3675/dash_1.mpd +0 -30
  354. package/test/test/assets/3675/dash_2.mpd +0 -30
  355. package/test/test/assets/3675/dash_3.mpd +0 -30
  356. package/test/test/assets/3675/dash_4.mpd +0 -30
  357. package/test/test/assets/3675/dash_5.mpd +0 -26
  358. package/test/test/assets/3675/init-stream0.m4s +0 -0
  359. package/test/test/assets/audio-xhe-aac.mp4 +0 -0
  360. package/test/test/assets/audio.ts +0 -0
  361. package/test/test/assets/captions-test.ts +0 -0
  362. package/test/test/assets/cea-init.mp4 +0 -0
  363. package/test/test/assets/cea-segment.mp4 +0 -0
  364. package/test/test/assets/chapters.srt +0 -11
  365. package/test/test/assets/chapters.vtt +0 -10
  366. package/test/test/assets/chapters2.vtt +0 -10
  367. package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
  368. package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
  369. package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
  370. package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
  371. package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
  372. package/test/test/assets/dash-aes-128/dash.mpd +0 -18
  373. package/test/test/assets/dash-aes-128/license +0 -1
  374. package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
  375. package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
  376. package/test/test/assets/dash-multi-codec/dash.mpd +0 -32
  377. package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
  378. package/test/test/assets/db-dump-v1.json +0 -1
  379. package/test/test/assets/db-dump-v2-broken.json +0 -1
  380. package/test/test/assets/db-dump-v2-clean.json +0 -1
  381. package/test/test/assets/db-dump-v3.json +0 -1
  382. package/test/test/assets/db-dump-v4-broken.json +0 -1
  383. package/test/test/assets/db-dump-v5.json +0 -1
  384. package/test/test/assets/empty_caption_video_init.mp4 +0 -0
  385. package/test/test/assets/empty_caption_video_segment.mp4 +0 -0
  386. package/test/test/assets/encrypted-sintel-audio-init.mp4 +0 -0
  387. package/test/test/assets/encrypted-sintel-audio-segment.mp4 +0 -0
  388. package/test/test/assets/encrypted-sintel-video-init.mp4 +0 -0
  389. package/test/test/assets/encrypted-sintel-video-segment.mp4 +0 -0
  390. package/test/test/assets/green-pixel.mp4 +0 -0
  391. package/test/test/assets/green-pixel.txt +0 -15
  392. package/test/test/assets/h265-cea-init.mp4 +0 -0
  393. package/test/test/assets/h265-cea-segment.mp4 +0 -0
  394. package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
  395. package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
  396. package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
  397. package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
  398. package/test/test/assets/hls-raw-aac/manifest.m3u8 +0 -4
  399. package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +0 -14
  400. package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
  401. package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
  402. package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
  403. package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
  404. package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
  405. package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
  406. package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
  407. package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
  408. package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +0 -31
  409. package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
  410. package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
  411. package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
  412. package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
  413. package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
  414. package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
  415. package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
  416. package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
  417. package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +0 -31
  418. package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +0 -13
  419. package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
  420. package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
  421. package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
  422. package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
  423. package/test/test/assets/hls-raw-mp3/playlist.m3u8 +0 -4
  424. package/test/test/assets/hls-ts-aac/playlist.m3u8 +0 -23
  425. package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
  426. package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
  427. package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
  428. package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
  429. package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
  430. package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
  431. package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
  432. package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
  433. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
  434. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
  435. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
  436. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
  437. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
  438. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
  439. package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +0 -19
  440. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
  441. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
  442. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
  443. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
  444. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
  445. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
  446. package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +0 -19
  447. package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
  448. package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
  449. package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
  450. package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
  451. package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
  452. package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
  453. package/test/test/assets/hls-ts-h264/prog_index.m3u8 +0 -25
  454. package/test/test/assets/hls-ts-h265/0.ts +0 -0
  455. package/test/test/assets/hls-ts-h265/hevc.m3u8 +0 -6
  456. package/test/test/assets/hls-ts-h265/index.m3u8 +0 -7
  457. package/test/test/assets/hls-ts-mp3/manifest.m3u8 +0 -13
  458. package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
  459. package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
  460. package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
  461. package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
  462. package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +0 -17
  463. package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
  464. package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
  465. package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
  466. package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
  467. package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
  468. package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
  469. package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +0 -4
  470. package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
  471. package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
  472. package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +0 -9
  473. package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +0 -24
  474. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
  475. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
  476. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
  477. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
  478. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
  479. package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
  480. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
  481. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
  482. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
  483. package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
  484. package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +0 -14
  485. package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +0 -23
  486. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
  487. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
  488. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
  489. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
  490. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
  491. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
  492. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
  493. package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
  494. package/test/test/assets/id3-metadata.aac +0 -0
  495. package/test/test/assets/id3-metadata.ts +0 -0
  496. package/test/test/assets/index-segment.mp4 +0 -0
  497. package/test/test/assets/index-segment.webm +0 -0
  498. package/test/test/assets/init-segment.webm +0 -0
  499. package/test/test/assets/large_file.mpd +0 -4930
  500. package/test/test/assets/multidrm-audio-init.mp4 +0 -0
  501. package/test/test/assets/multidrm-audio-segment.mp4 +0 -0
  502. package/test/test/assets/multidrm-video-init.mp4 +0 -0
  503. package/test/test/assets/multidrm-video-segment.mp4 +0 -0
  504. package/test/test/assets/multiple-trun-init.mp4 +0 -0
  505. package/test/test/assets/multiple-trun-segment.mp4 +0 -0
  506. package/test/test/assets/sintel-audio-init.mp4 +0 -0
  507. package/test/test/assets/sintel-audio-segment.mp4 +0 -0
  508. package/test/test/assets/sintel-video-init.mp4 +0 -0
  509. package/test/test/assets/sintel-video-segment.mp4 +0 -0
  510. package/test/test/assets/small.mp4 +0 -0
  511. package/test/test/assets/text-clip-alt.vtt +0 -63
  512. package/test/test/assets/text-clip.vtt +0 -63
  513. package/test/test/assets/thumbnails-sprites.vtt +0 -10
  514. package/test/test/assets/thumbnails.vtt +0 -10
  515. package/test/test/assets/ttml-init.mp4 +0 -0
  516. package/test/test/assets/ttml-segment-multiplemdat.mp4 +0 -0
  517. package/test/test/assets/ttml-segment.mp4 +0 -0
  518. package/test/test/assets/video.ts +0 -0
  519. package/test/test/assets/vtt-init.mp4 +0 -0
  520. package/test/test/assets/vtt-segment-multi-payload.mp4 +0 -0
  521. package/test/test/assets/vtt-segment-no-duration.mp4 +0 -0
  522. package/test/test/assets/vtt-segment-settings.mp4 +0 -0
  523. package/test/test/assets/vtt-segment.mp4 +0 -0
  524. package/test/test/boot.js +0 -495
  525. package/test/test/externs/filters.js +0 -44
  526. package/test/test/externs/fontfaceonload.js +0 -29
  527. package/test/test/externs/jasmine.js +0 -670
  528. package/test/test/externs/karma.js +0 -26
  529. package/test/test/externs/require.js +0 -21
  530. package/test/test/externs/sprintf.js +0 -18
  531. package/test/test/namespace.js +0 -10
  532. package/test/test/util/canned_idb.js +0 -379
  533. package/test/test/util/cea_utils.js +0 -60
  534. package/test/test/util/dash_parser_util.js +0 -329
  535. package/test/test/util/fake_ad.js +0 -321
  536. package/test/test/util/fake_ad_manager.js +0 -122
  537. package/test/test/util/fake_demo_main.js +0 -144
  538. package/test/test/util/fake_drm_engine.js +0 -103
  539. package/test/test/util/fake_media_source_engine.js +0 -464
  540. package/test/test/util/fake_networking_engine.js +0 -381
  541. package/test/test/util/fake_segment_prefetch.js +0 -84
  542. package/test/test/util/fake_text_displayer.js +0 -60
  543. package/test/test/util/id3_generator.js +0 -100
  544. package/test/test/util/indexeddb_utils.js +0 -124
  545. package/test/test/util/jasmine_fetch.js +0 -382
  546. package/test/test/util/layout_tests.js +0 -434
  547. package/test/test/util/loader.js +0 -88
  548. package/test/test/util/manifest_generator.js +0 -705
  549. package/test/test/util/manifest_parser_util.js +0 -101
  550. package/test/test/util/mss_parser_util.js +0 -119
  551. package/test/test/util/offline_utils.js +0 -105
  552. package/test/test/util/simple_fakes.js +0 -535
  553. package/test/test/util/stream_generator.js +0 -676
  554. package/test/test/util/streaming_engine_util.js +0 -506
  555. package/test/test/util/test_scheme.js +0 -778
  556. package/test/test/util/ttml_utils.js +0 -77
  557. package/test/test/util/ui_utils.js +0 -183
  558. package/test/test/util/util.js +0 -374
  559. package/test/test/util/waiter.js +0 -406
  560. package/test/text/cue_integration.js +0 -51
  561. package/test/text/lrc_text_parser_unit.js +0 -98
  562. package/test/text/mp4_ttml_parser_unit.js +0 -171
  563. package/test/text/mp4_vtt_parser_unit.js +0 -195
  564. package/test/text/sbv_text_parser_unit.js +0 -81
  565. package/test/text/simple_text_displayer_unit.js +0 -468
  566. package/test/text/srt_text_parser_unit.js +0 -163
  567. package/test/text/ssa_text_parser_unit.js +0 -382
  568. package/test/text/text_displayer_layout_unit.js +0 -323
  569. package/test/text/text_engine_unit.js +0 -500
  570. package/test/text/text_track_integration.js +0 -186
  571. package/test/text/ttml_text_parser_unit.js +0 -2176
  572. package/test/text/ui_text_displayer_unit.js +0 -608
  573. package/test/text/vtt_text_parser_unit.js +0 -1363
  574. package/test/text/web_vtt_generator_unit.js +0 -144
  575. package/test/text/web_vtt_layout_integration.js +0 -524
  576. package/test/transmuxer/transmuxer_engine_integration.js +0 -69
  577. package/test/transmuxer/transmuxer_integration.js +0 -443
  578. package/test/ui/ad_ui_unit.js +0 -369
  579. package/test/ui/localization_unit.js +0 -508
  580. package/test/ui/ui_customization_unit.js +0 -208
  581. package/test/ui/ui_integration.js +0 -669
  582. package/test/ui/ui_unit.js +0 -902
  583. package/test/util/abortable_operation_unit.js +0 -624
  584. package/test/util/array_utils_unit.js +0 -58
  585. package/test/util/buffer_utils_unit.js +0 -185
  586. package/test/util/cmcd_manager_unit.js +0 -440
  587. package/test/util/content_steering_manager_unit.js +0 -427
  588. package/test/util/data_view_reader_unit.js +0 -254
  589. package/test/util/ebml_parser_unit.js +0 -297
  590. package/test/util/event_manager_unit.js +0 -185
  591. package/test/util/fake_event_target_unit.js +0 -123
  592. package/test/util/id3_utils_unit.js +0 -168
  593. package/test/util/iterables_unit.js +0 -68
  594. package/test/util/language_utils_unit.js +0 -240
  595. package/test/util/manifest_parser_utils_unit.js +0 -55
  596. package/test/util/mime_utils_unit.js +0 -64
  597. package/test/util/mp4_box_parsers_unit.js +0 -246
  598. package/test/util/mp4_parser_unit.js +0 -373
  599. package/test/util/multi_map_unit.js +0 -94
  600. package/test/util/object_utils_unit.js +0 -79
  601. package/test/util/periods_unit.js +0 -1623
  602. package/test/util/pssh_unit.js +0 -226
  603. package/test/util/state_history_unit.js +0 -101
  604. package/test/util/stream_utils_unit.js +0 -1068
  605. package/test/util/string_utils_unit.js +0 -166
  606. package/test/util/text_parser_unit.js +0 -165
  607. package/test/util/ts_parser_unit.js +0 -77
  608. package/test/util/xml_utils_unit.js +0 -444
@@ -58,8 +58,10 @@ shaka.media.ExampleBasedCriteria = class {
58
58
  // We can't know if role and label are really important, so we don't use
59
59
  // role and label for this.
60
60
  const role = '';
61
- const label = '';
61
+ const audioLabel = '';
62
+ const videoLabel = '';
62
63
  const hdrLevel = '';
64
+ const spatialAudio = false;
63
65
  const videoLayout = '';
64
66
  const channelCount = example.audio && example.audio.channelsCount ?
65
67
  example.audio.channelsCount :
@@ -67,7 +69,8 @@ shaka.media.ExampleBasedCriteria = class {
67
69
 
68
70
  /** @private {!shaka.media.AdaptationSetCriteria} */
69
71
  this.fallback_ = new shaka.media.PreferenceBasedCriteria(
70
- example.language, role, channelCount, hdrLevel, videoLayout, label,
72
+ example.language, role, channelCount, hdrLevel, spatialAudio,
73
+ videoLayout, audioLabel, videoLabel,
71
74
  codecSwitchingStrategy, enableAudioGroups);
72
75
  }
73
76
 
@@ -106,12 +109,15 @@ shaka.media.PreferenceBasedCriteria = class {
106
109
  * @param {string} role
107
110
  * @param {number} channelCount
108
111
  * @param {string} hdrLevel
112
+ * @param {boolean} spatialAudio
109
113
  * @param {string} videoLayout
110
- * @param {string=} label
114
+ * @param {string=} audioLabel
115
+ * @param {string=} videoLabel
111
116
  * @param {shaka.config.CodecSwitchingStrategy=} codecSwitchingStrategy
112
117
  * @param {boolean=} enableAudioGroups
113
118
  */
114
- constructor(language, role, channelCount, hdrLevel, videoLayout, label = '',
119
+ constructor(language, role, channelCount, hdrLevel, spatialAudio,
120
+ videoLayout, audioLabel = '', videoLabel = '',
115
121
  codecSwitchingStrategy = shaka.config.CodecSwitchingStrategy.RELOAD,
116
122
  enableAudioGroups = false) {
117
123
  /** @private {string} */
@@ -122,10 +128,14 @@ shaka.media.PreferenceBasedCriteria = class {
122
128
  this.channelCount_ = channelCount;
123
129
  /** @private {string} */
124
130
  this.hdrLevel_ = hdrLevel;
131
+ /** @private {boolean} */
132
+ this.spatialAudio_ = spatialAudio;
125
133
  /** @private {string} */
126
134
  this.videoLayout_ = videoLayout;
127
135
  /** @private {string} */
128
- this.label_ = label;
136
+ this.audioLabel_ = audioLabel;
137
+ /** @private {string} */
138
+ this.videoLabel_ = videoLabel;
129
139
  /** @private {shaka.config.CodecSwitchingStrategy} */
130
140
  this.codecSwitchingStrategy_ = codecSwitchingStrategy;
131
141
  /** @private {boolean} */
@@ -191,15 +201,34 @@ shaka.media.PreferenceBasedCriteria = class {
191
201
  }
192
202
  }
193
203
 
194
- if (this.label_) {
195
- const byLabel = Class.filterVariantsByLabel_(current, this.label_);
204
+ if (this.audioLabel_) {
205
+ const byLabel = Class.filterVariantsByAudioLabel_(
206
+ current, this.audioLabel_);
207
+ if (byLabel.length) {
208
+ current = byLabel;
209
+ } else {
210
+ shaka.log.warning('No exact match for audio label could be found.');
211
+ }
212
+ }
213
+
214
+ if (this.videoLabel_) {
215
+ const byLabel = Class.filterVariantsByVideoLabel_(
216
+ current, this.videoLabel_);
196
217
  if (byLabel.length) {
197
218
  current = byLabel;
198
219
  } else {
199
- shaka.log.warning('No exact match for variant label could be found.');
220
+ shaka.log.warning('No exact match for video label could be found.');
200
221
  }
201
222
  }
202
223
 
224
+ const bySpatialAudio = Class.filterVariantsBySpatialAudio_(
225
+ current, this.spatialAudio_);
226
+ if (bySpatialAudio.length) {
227
+ current = bySpatialAudio;
228
+ } else {
229
+ shaka.log.warning('No exact match for spatial audio could be found.');
230
+ }
231
+
203
232
  const supportsSmoothCodecTransitions = this.codecSwitchingStrategy_ ==
204
233
  shaka.config.CodecSwitchingStrategy.SMOOTH &&
205
234
  shaka.media.Capabilities.isChangeTypeSupported();
@@ -259,14 +288,14 @@ shaka.media.PreferenceBasedCriteria = class {
259
288
  }
260
289
 
261
290
  /**
262
- * Filter Variants by label.
291
+ * Filter Variants by audio label.
263
292
  *
264
293
  * @param {!Array.<shaka.extern.Variant>} variants
265
294
  * @param {string} preferredLabel
266
295
  * @return {!Array.<shaka.extern.Variant>}
267
296
  * @private
268
297
  */
269
- static filterVariantsByLabel_(variants, preferredLabel) {
298
+ static filterVariantsByAudioLabel_(variants, preferredLabel) {
270
299
  return variants.filter((variant) => {
271
300
  if (!variant.audio || !variant.audio.label) {
272
301
  return false;
@@ -278,6 +307,26 @@ shaka.media.PreferenceBasedCriteria = class {
278
307
  });
279
308
  }
280
309
 
310
+ /**
311
+ * Filter Variants by video label.
312
+ *
313
+ * @param {!Array.<shaka.extern.Variant>} variants
314
+ * @param {string} preferredLabel
315
+ * @return {!Array.<shaka.extern.Variant>}
316
+ * @private
317
+ */
318
+ static filterVariantsByVideoLabel_(variants, preferredLabel) {
319
+ return variants.filter((variant) => {
320
+ if (!variant.video || !variant.video.label) {
321
+ return false;
322
+ }
323
+
324
+ const label1 = variant.video.label.toLowerCase();
325
+ const label2 = preferredLabel.toLowerCase();
326
+ return label1 == label2;
327
+ });
328
+ }
329
+
281
330
  /**
282
331
  * Filter Variants by channelCount.
283
332
  *
@@ -337,4 +386,21 @@ shaka.media.PreferenceBasedCriteria = class {
337
386
  return true;
338
387
  });
339
388
  }
389
+
390
+
391
+ /**
392
+ * Filters variants according to the given spatial audio config.
393
+ *
394
+ * @param {!Array.<shaka.extern.Variant>} variants
395
+ * @param {boolean} spatialAudio
396
+ * @private
397
+ */
398
+ static filterVariantsBySpatialAudio_(variants, spatialAudio) {
399
+ return variants.filter((variant) => {
400
+ if (variant.audio && variant.audio.spatialAudio != spatialAudio) {
401
+ return false;
402
+ }
403
+ return true;
404
+ });
405
+ }
340
406
  };
@@ -2038,9 +2038,6 @@ shaka.media.DrmEngine = class {
2038
2038
 
2039
2039
  for (const drm1 of drms1) {
2040
2040
  for (const drm2 of drms2) {
2041
- // This method is only called to compare drmInfos of a video and an
2042
- // audio adaptations, so we shouldn't have to worry about checking
2043
- // robustness.
2044
2041
  if (drm1.keySystem == drm2.keySystem) {
2045
2042
  const initDataMap = new Map();
2046
2043
  const bothInitDatas = (drm1.initData || [])
@@ -148,6 +148,9 @@ shaka.media.MediaSourceEngine = class {
148
148
 
149
149
  /** @private {boolean} */
150
150
  this.streamingAllowed_ = true;
151
+
152
+ /** @private {?number} */
153
+ this.lastDuration_ = null;
151
154
  }
152
155
 
153
156
  /**
@@ -1088,7 +1091,8 @@ shaka.media.MediaSourceEngine = class {
1088
1091
  * value will be dropped.
1089
1092
  * @param {boolean} ignoreTimestampOffset If true, the timestampOffset will
1090
1093
  * not be applied in this step.
1091
- * @param {shaka.extern.Stream} stream The current stream.
1094
+ * @param {string} mimeType
1095
+ * @param {string} codecs
1092
1096
  * @param {!Map.<shaka.util.ManifestParserUtils.ContentType,
1093
1097
  * shaka.extern.Stream>} streamsByType
1094
1098
  * A map of content types to streams. All streams must be supported
@@ -1098,7 +1102,7 @@ shaka.media.MediaSourceEngine = class {
1098
1102
  */
1099
1103
  async setStreamProperties(
1100
1104
  contentType, timestampOffset, appendWindowStart, appendWindowEnd,
1101
- ignoreTimestampOffset, stream, streamsByType) {
1105
+ ignoreTimestampOffset, mimeType, codecs, streamsByType) {
1102
1106
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
1103
1107
  if (contentType == ContentType.TEXT) {
1104
1108
  if (!ignoreTimestampOffset) {
@@ -1109,8 +1113,8 @@ shaka.media.MediaSourceEngine = class {
1109
1113
  }
1110
1114
  const operations = [];
1111
1115
 
1112
- const hasChangedCodecs =
1113
- await this.codecSwitchIfNecessary_(contentType, stream, streamsByType);
1116
+ const hasChangedCodecs = await this.codecSwitchIfNecessary_(
1117
+ contentType, mimeType, codecs, streamsByType);
1114
1118
 
1115
1119
  if (!hasChangedCodecs) {
1116
1120
  // Queue an abort() to help MSE splice together overlapping segments.
@@ -1241,6 +1245,7 @@ shaka.media.MediaSourceEngine = class {
1241
1245
  }
1242
1246
 
1243
1247
  this.mediaSource_.duration = duration;
1248
+ this.lastDuration_ = duration;
1244
1249
  });
1245
1250
  }
1246
1251
 
@@ -1758,7 +1763,11 @@ shaka.media.MediaSourceEngine = class {
1758
1763
  this.mediaSourceOpen_ = new shaka.util.PublicPromise();
1759
1764
  this.mediaSource_ = this.createMediaSource(this.mediaSourceOpen_);
1760
1765
  await this.mediaSourceOpen_;
1761
- this.mediaSource_.duration = previousDuration;
1766
+ if (!isNaN(previousDuration) && previousDuration) {
1767
+ this.mediaSource_.duration = previousDuration;
1768
+ } else if (!isNaN(this.lastDuration_) && this.lastDuration_) {
1769
+ this.mediaSource_.duration = this.lastDuration_;
1770
+ }
1762
1771
 
1763
1772
  const sourceBufferAdded = new shaka.util.PublicPromise();
1764
1773
  const sourceBuffers =
@@ -1819,15 +1828,17 @@ shaka.media.MediaSourceEngine = class {
1819
1828
  * Codec switch if necessary, this will not resolve until the codec
1820
1829
  * switch is over.
1821
1830
  * @param {shaka.util.ManifestParserUtils.ContentType} contentType
1822
- * @param {shaka.extern.Stream} stream
1831
+ * @param {string} mimeType
1832
+ * @param {string} codecs
1823
1833
  * @param {!Map.<shaka.util.ManifestParserUtils.ContentType,
1824
1834
  * shaka.extern.Stream>} streamsByType
1825
1835
  * @return {!Promise.<boolean>} true if there was a codec switch,
1826
1836
  * false otherwise.
1827
1837
  * @private
1828
1838
  */
1829
- async codecSwitchIfNecessary_(contentType, stream, streamsByType) {
1830
- if (contentType == shaka.util.ManifestParserUtils.ContentType.TEXT) {
1839
+ async codecSwitchIfNecessary_(contentType, mimeType, codecs, streamsByType) {
1840
+ const ContentType = shaka.util.ManifestParserUtils.ContentType;
1841
+ if (contentType == ContentType.TEXT) {
1831
1842
  return false;
1832
1843
  }
1833
1844
  const MimeUtils = shaka.util.MimeUtils;
@@ -1838,30 +1849,43 @@ shaka.media.MediaSourceEngine = class {
1838
1849
 
1839
1850
  /** @type {?shaka.extern.Transmuxer} */
1840
1851
  let transmuxer;
1841
- let newMimeType = shaka.util.MimeUtils.getFullType(
1842
- stream.mimeType, stream.codecs);
1852
+ let transmuxerMuxed = false;
1853
+ let newMimeType = shaka.util.MimeUtils.getFullType(mimeType, codecs);
1843
1854
  let needTransmux = this.config_.forceTransmux;
1844
1855
  if (!shaka.media.Capabilities.isTypeSupported(newMimeType) ||
1845
1856
  (!this.sequenceMode_ &&
1846
1857
  shaka.util.MimeUtils.RAW_FORMATS.includes(newMimeType))) {
1847
1858
  needTransmux = true;
1848
1859
  }
1849
- const newMimeTypeWithAllCodecs =
1850
- shaka.util.MimeUtils.getFullTypeWithAllCodecs(
1851
- stream.mimeType, stream.codecs);
1852
1860
  const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;
1853
1861
  if (needTransmux) {
1862
+ const newMimeTypeWithAllCodecs =
1863
+ shaka.util.MimeUtils.getFullTypeWithAllCodecs(mimeType, codecs);
1854
1864
  const transmuxerPlugin =
1855
1865
  TransmuxerEngine.findTransmuxer(newMimeTypeWithAllCodecs);
1856
1866
  if (transmuxerPlugin) {
1857
1867
  transmuxer = transmuxerPlugin();
1858
- newMimeType =
1859
- transmuxer.convertCodecs(contentType, newMimeTypeWithAllCodecs);
1868
+ const audioCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(
1869
+ ContentType.AUDIO, (codecs || '').split(','));
1870
+ const videoCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(
1871
+ ContentType.VIDEO, (codecs || '').split(','));
1872
+ if (audioCodec && videoCodec) {
1873
+ transmuxerMuxed = true;
1874
+ let codec = videoCodec;
1875
+ if (contentType == ContentType.AUDIO) {
1876
+ codec = audioCodec;
1877
+ }
1878
+ newMimeType = transmuxer.convertCodecs(contentType,
1879
+ shaka.util.MimeUtils.getFullTypeWithAllCodecs(mimeType, codec));
1880
+ } else {
1881
+ newMimeType =
1882
+ transmuxer.convertCodecs(contentType, newMimeTypeWithAllCodecs);
1883
+ }
1860
1884
  }
1861
1885
  }
1862
1886
 
1863
- const newAllCodecs = MimeUtils.getCodecs(newMimeType);
1864
- const newCodec = MimeUtils.getCodecBase(newAllCodecs);
1887
+ const newCodec = MimeUtils.getCodecBase(
1888
+ MimeUtils.getCodecs(newMimeType));
1865
1889
  const newBasicType = MimeUtils.getBasicType(newMimeType);
1866
1890
 
1867
1891
  // Current/new codecs base and basic type match then no need to switch
@@ -1870,7 +1894,7 @@ shaka.media.MediaSourceEngine = class {
1870
1894
  }
1871
1895
 
1872
1896
  let allowChangeType = true;
1873
- if (this.needSplitMuxedContent_ || (newAllCodecs.split(',').length &&
1897
+ if (this.needSplitMuxedContent_ || (transmuxerMuxed &&
1874
1898
  transmuxer && !this.transmuxers_[contentType])) {
1875
1899
  allowChangeType = false;
1876
1900
  }
@@ -57,6 +57,12 @@ shaka.media.InitSegmentReference = class {
57
57
 
58
58
  /** @type {?shaka.extern.aes128Key} */
59
59
  this.aes128Key = aes128Key;
60
+
61
+ /** @type {?string} */
62
+ this.codecs = null;
63
+
64
+ /** @type {?string} */
65
+ this.mimeType = null;
60
66
  }
61
67
 
62
68
  /**
@@ -305,6 +311,12 @@ shaka.media.SegmentReference = class {
305
311
  this.partialReferences[this.partialReferences.length - 1];
306
312
  lastPartial.markAsLastPartial();
307
313
  }
314
+
315
+ /** @type {?string} */
316
+ this.codecs = null;
317
+
318
+ /** @type {?string} */
319
+ this.mimeType = null;
308
320
  }
309
321
 
310
322
  /**
@@ -6,7 +6,6 @@
6
6
 
7
7
  /**
8
8
  * @fileoverview
9
- * @suppress {missingRequire} TODO(b/152540451): this shouldn't be needed
10
9
  */
11
10
 
12
11
  goog.provide('shaka.media.StreamingEngine');
@@ -14,12 +13,14 @@ goog.provide('shaka.media.StreamingEngine');
14
13
  goog.require('goog.asserts');
15
14
  goog.require('shaka.log');
16
15
  goog.require('shaka.media.InitSegmentReference');
16
+ goog.require('shaka.media.ManifestParser');
17
17
  goog.require('shaka.media.MediaSourceEngine');
18
18
  goog.require('shaka.media.SegmentIterator');
19
19
  goog.require('shaka.media.SegmentReference');
20
20
  goog.require('shaka.media.SegmentPrefetch');
21
21
  goog.require('shaka.net.Backoff');
22
22
  goog.require('shaka.net.NetworkingEngine');
23
+ goog.require('shaka.util.BufferUtils');
23
24
  goog.require('shaka.util.DelayedTick');
24
25
  goog.require('shaka.util.Destroyer');
25
26
  goog.require('shaka.util.Error');
@@ -28,6 +29,7 @@ goog.require('shaka.util.IDestroyable');
28
29
  goog.require('shaka.util.Id3Utils');
29
30
  goog.require('shaka.util.ManifestParserUtils');
30
31
  goog.require('shaka.util.MimeUtils');
32
+ goog.require('shaka.util.Mp4BoxParsers');
31
33
  goog.require('shaka.util.Mp4Parser');
32
34
  goog.require('shaka.util.Networking');
33
35
 
@@ -117,6 +119,9 @@ shaka.media.StreamingEngine = class {
117
119
 
118
120
  /** @private {!shaka.util.Destroyer} */
119
121
  this.destroyer_ = new shaka.util.Destroyer(() => this.doDestroy_());
122
+
123
+ /** @private {number} */
124
+ this.lastMediaSourceReset_ = 0;
120
125
  }
121
126
 
122
127
  /** @override */
@@ -1088,8 +1093,8 @@ shaka.media.StreamingEngine = class {
1088
1093
  this.config_.rebufferingGoal,
1089
1094
  this.config_.bufferingGoal);
1090
1095
 
1091
- const scaledBufferingGoal =
1092
- unscaledBufferingGoal * this.bufferingGoalScale_;
1096
+ const scaledBufferingGoal = Math.max(1,
1097
+ unscaledBufferingGoal * this.bufferingGoalScale_);
1093
1098
 
1094
1099
  // Check if we've buffered to the end of the presentation.
1095
1100
  const timeUntilEnd =
@@ -1634,6 +1639,13 @@ shaka.media.StreamingEngine = class {
1634
1639
  });
1635
1640
 
1636
1641
  if (!waitingForAnotherStreamToRecover) {
1642
+ if (this.config_.maxDisabledTime > 0) {
1643
+ const handled = this.playerInterface_.disableStream(
1644
+ mediaState.stream, this.config_.maxDisabledTime);
1645
+ if (handled) {
1646
+ return;
1647
+ }
1648
+ }
1637
1649
  // Reduction schedule: 80%, 60%, 40%, 20%, 16%, 12%, 8%, 4%, fail.
1638
1650
  // Note: percentages are used for comparisons to avoid rounding errors.
1639
1651
  const percentBefore = Math.round(100 * this.bufferingGoalScale_);
@@ -1759,7 +1771,8 @@ shaka.media.StreamingEngine = class {
1759
1771
  await this.playerInterface_.mediaSourceEngine.setStreamProperties(
1760
1772
  mediaState.type, timestampOffset, appendWindowStart,
1761
1773
  appendWindowEnd, ignoreTimestampOffset,
1762
- mediaState.stream, streamsByType);
1774
+ reference.mimeType || mediaState.stream.mimeType,
1775
+ reference.codecs || mediaState.stream.codecs, streamsByType);
1763
1776
  if (isResetMediaSourceNecessary) {
1764
1777
  let otherState = null;
1765
1778
  if (mediaState.type === ContentType.VIDEO) {
@@ -2203,7 +2216,6 @@ shaka.media.StreamingEngine = class {
2203
2216
  *
2204
2217
  * @return {!Promise.<BufferSource>}
2205
2218
  * @private
2206
- * @suppress {strictMissingProperties}
2207
2219
  */
2208
2220
  async fetch_(mediaState, reference, streamDataCallback) {
2209
2221
  if (reference instanceof shaka.media.InitSegmentReference) {
@@ -2452,6 +2464,47 @@ shaka.media.StreamingEngine = class {
2452
2464
  return this.config_.maxDisabledTime;
2453
2465
  }
2454
2466
 
2467
+ /**
2468
+ * Reset Media Source
2469
+ *
2470
+ * @return {!Promise.<boolean>}
2471
+ */
2472
+ async resetMediaSource() {
2473
+ const now = (Date.now() / 1000);
2474
+ const minTimeBetweenRecoveries = this.config_.minTimeBetweenRecoveries;
2475
+ if (!this.config_.allowMediaSourceRecoveries ||
2476
+ (now - this.lastMediaSourceReset_) < minTimeBetweenRecoveries) {
2477
+ return false;
2478
+ }
2479
+ this.lastMediaSourceReset_ = now;
2480
+ const ContentType = shaka.util.ManifestParserUtils.ContentType;
2481
+ const audioMediaState = this.mediaStates_.get(ContentType.AUDIO);
2482
+ if (audioMediaState) {
2483
+ audioMediaState.lastInitSegmentReference = null;
2484
+ this.forceClearBuffer_(audioMediaState);
2485
+ this.abortOperations_(audioMediaState).catch(() => {});
2486
+ }
2487
+ const videoMediaState = this.mediaStates_.get(ContentType.VIDEO);
2488
+ if (videoMediaState) {
2489
+ videoMediaState.lastInitSegmentReference = null;
2490
+ this.forceClearBuffer_(videoMediaState);
2491
+ this.abortOperations_(videoMediaState).catch(() => {});
2492
+ }
2493
+ /**
2494
+ * @type {!Map.<shaka.util.ManifestParserUtils.ContentType,
2495
+ * shaka.extern.Stream>}
2496
+ */
2497
+ const streamsByType = new Map();
2498
+ if (this.currentVariant_.audio) {
2499
+ streamsByType.set(ContentType.AUDIO, this.currentVariant_.audio);
2500
+ }
2501
+ if (this.currentVariant_.video) {
2502
+ streamsByType.set(ContentType.VIDEO, this.currentVariant_.video);
2503
+ }
2504
+ await this.playerInterface_.mediaSourceEngine.reset(streamsByType);
2505
+ return true;
2506
+ }
2507
+
2455
2508
  /**
2456
2509
  * @param {shaka.media.StreamingEngine.MediaState_} mediaState
2457
2510
  * @return {string} A log prefix of the form ($CONTENT_TYPE:$STREAM_ID), e.g.,
@@ -183,8 +183,8 @@ shaka.media.VideoWrapper = class {
183
183
 
184
184
  /**
185
185
  * A class used to move the playhead away from its current time. Sometimes,
186
- * Edge ignores re-seeks. After changing the current time, check every 100ms,
187
- * retrying if the change was not accepted.
186
+ * legacy Edge ignores re-seeks. After changing the current time, check every
187
+ * 100ms, retrying if the change was not accepted.
188
188
  *
189
189
  * Delay stats over 100 runs of a re-seeking integration test:
190
190
  * Edge - 0ms - 2%
@@ -194,7 +194,8 @@ shaka.media.VideoWrapper = class {
194
194
  * Edge - 400ms - 2%
195
195
  * Chrome - 0ms - 100%
196
196
  *
197
- * TODO: File a bug on Edge about this.
197
+ * Unfortunately, legacy Edge is not receiving updates anymore, but it still
198
+ * must be supported as it is used for web browsers on XBox.
198
199
  *
199
200
  * @implements {shaka.util.IReleasable}
200
201
  * @final