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
@@ -1,622 +0,0 @@
1
- /*! @license
2
- * Shaka Player
3
- * Copyright 2016 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- describe('ManifestConverter', () => {
8
- describe('createVariants', () => {
9
- const audioType = 'audio';
10
- const videoType = 'video';
11
-
12
- it('will create variants with variant ids', () => {
13
- /** @type {!Array.<shaka.extern.StreamDB>} */
14
- const audios = [
15
- createStreamDB(0, audioType, [0]),
16
- createStreamDB(1, audioType, [1]),
17
- ];
18
- /** @type {!Array.<shaka.extern.StreamDB>} */
19
- const videos = [
20
- createStreamDB(2, videoType, [0]),
21
- createStreamDB(3, videoType, [1]),
22
- ];
23
-
24
- const timeline = createTimeline();
25
-
26
- /** @type {!Map.<number, shaka.extern.Variant>} */
27
- const variants = createConverter().createVariants(
28
- audios, videos, timeline);
29
- expect(variants.size).toBe(2);
30
-
31
- expect(variants.has(0)).toBeTruthy();
32
- expect(variants.get(0).audio.id).toBe(0);
33
- expect(variants.get(0).video.id).toBe(2);
34
-
35
- expect(variants.has(1)).toBeTruthy();
36
- expect(variants.get(1).audio.id).toBe(1);
37
- expect(variants.get(1).video.id).toBe(3);
38
- });
39
-
40
- it('will create variants when there is only audio', () => {
41
- /** @type {!Array.<shaka.extern.StreamDB>} */
42
- const audios = [
43
- createStreamDB(0, audioType, [0]),
44
- createStreamDB(1, audioType, [1]),
45
- ];
46
- /** @type {!Array.<shaka.extern.StreamDB>} */
47
- const videos = [];
48
-
49
- const timeline = createTimeline();
50
-
51
- /** @type {!Map.<number, shaka.extern.Variant>} */
52
- const variants = createConverter().createVariants(
53
- audios, videos, timeline);
54
- expect(variants.size).toBe(2);
55
- });
56
-
57
- it('will create variants when there is only video', () => {
58
- /** @type {!Array.<shaka.extern.StreamDB>} */
59
- const audios = [];
60
- /** @type {!Array.<shaka.extern.StreamDB>} */
61
- const videos = [
62
- createStreamDB(2, videoType, [0]),
63
- createStreamDB(3, videoType, [1]),
64
- ];
65
-
66
- const timeline = createTimeline();
67
-
68
- /** @type {!Map.<number, shaka.extern.Variant>} */
69
- const variants = createConverter().createVariants(
70
- audios, videos, timeline);
71
- expect(variants.size).toBe(2);
72
- });
73
- }); // describe('createVariants')
74
-
75
- describe('fromManifestDB', () => {
76
- it('will reconstruct Manifest correctly', () => {
77
- /** @type {shaka.extern.ManifestDB} */
78
- const manifestDb = {
79
- originalManifestUri: 'http://example.com/foo',
80
- duration: 60,
81
- size: 1234,
82
- expiration: Infinity,
83
- streams: [
84
- createVideoStreamDB(1, [0]),
85
- createAudioStreamDB(2, [0]),
86
- ],
87
- sessionIds: [1, 2, 3, 4],
88
- drmInfo: {
89
- keySystem: 'com.foo.bar',
90
- licenseServerUri: 'http://example.com/drm',
91
- distinctiveIdentifierRequired: true,
92
- persistentStateRequired: true,
93
- audioRobustness: 'very',
94
- videoRobustness: 'kinda_sorta',
95
- serverCertificate: new Uint8Array([1, 2, 3]),
96
- serverCertificateUri: '',
97
- sessionType: '',
98
- initData: [{
99
- initData: new Uint8Array([4, 5, 6]),
100
- initDataType: 'cenc',
101
- keyId: 'abc',
102
- }],
103
- keyIds: new Set([
104
- 'abc',
105
- 'def',
106
- ]),
107
- },
108
- appMetadata: null,
109
- creationTime: 0,
110
- sequenceMode: false,
111
- };
112
-
113
- const manifest = createConverter().fromManifestDB(manifestDb);
114
- expect(manifest.presentationTimeline.getDuration())
115
- .toBe(manifestDb.duration);
116
- expect(manifest.textStreams).toEqual([]);
117
- expect(manifest.offlineSessionIds).toEqual(manifestDb.sessionIds);
118
- expect(manifest.variants.length).toBe(1);
119
-
120
- const variant = manifest.variants[0];
121
- expect(variant.id).toEqual(jasmine.any(Number));
122
- expect(variant.language).toBe(manifestDb.streams[1].language);
123
- expect(variant.primary).toBe(false);
124
- expect(variant.bandwidth).toEqual(jasmine.any(Number));
125
- expect(variant.allowedByApplication).toBe(true);
126
- expect(variant.allowedByKeySystem).toBe(true);
127
-
128
- verifyStream(variant.video, manifestDb.streams[0], manifestDb.drmInfo);
129
- verifyStream(variant.audio, manifestDb.streams[1], manifestDb.drmInfo);
130
- });
131
-
132
- it('supports video-only content', () => {
133
- /** @type {shaka.extern.ManifestDB} */
134
- const manifestDb = {
135
- originalManifestUri: 'http://example.com/foo',
136
- duration: 60,
137
- size: 1234,
138
- expiration: Infinity,
139
- sessionIds: [],
140
- drmInfo: null,
141
- appMetadata: null,
142
- creationTime: 0,
143
- streams: [
144
- createVideoStreamDB(1, [0]),
145
- createVideoStreamDB(2, [1]),
146
- ],
147
- sequenceMode: false,
148
- };
149
-
150
- const manifest = createConverter().fromManifestDB(manifestDb);
151
- expect(manifest.variants.length).toBe(2);
152
-
153
- expect(manifest.variants[0].audio).toBe(null);
154
- expect(manifest.variants[0].video).toBeTruthy();
155
-
156
- expect(manifest.variants[1].audio).toBe(null);
157
- expect(manifest.variants[1].video).toBeTruthy();
158
- });
159
-
160
- it('supports audio-only content', () => {
161
- /** @type {shaka.extern.ManifestDB} */
162
- const manifestDb = {
163
- originalManifestUri: 'http://example.com/foo',
164
- duration: 60,
165
- size: 1234,
166
- expiration: Infinity,
167
- sessionIds: [],
168
- drmInfo: null,
169
- appMetadata: null,
170
- creationTime: 0,
171
- streams: [
172
- createAudioStreamDB(1, [0]),
173
- createAudioStreamDB(2, [1]),
174
- ],
175
- sequenceMode: false,
176
- };
177
-
178
- const manifest = createConverter().fromManifestDB(manifestDb);
179
- expect(manifest.variants.length).toBe(2);
180
-
181
- expect(manifest.variants[0].audio).toBeTruthy();
182
- expect(manifest.variants[0].video).toBe(null);
183
-
184
- expect(manifest.variants[1].audio).toBeTruthy();
185
- expect(manifest.variants[1].video).toBe(null);
186
- });
187
-
188
- it('supports containerless content', () => {
189
- /** @type {shaka.extern.ManifestDB} */
190
- const manifestDb = {
191
- originalManifestUri: 'http://example.com/foo',
192
- duration: 60,
193
- size: 1234,
194
- expiration: Infinity,
195
- sessionIds: [],
196
- drmInfo: null,
197
- appMetadata: null,
198
- creationTime: 0,
199
- streams: [
200
- createVideoStreamDB(1, [0]),
201
- createAudioStreamDB(2, [0]),
202
- ],
203
- sequenceMode: true,
204
- };
205
-
206
- const manifest = createConverter().fromManifestDB(manifestDb);
207
- expect(manifest.sequenceMode).toBe(true);
208
- expect(manifest.variants.length).toBe(1);
209
- });
210
-
211
- it('supports text streams', () => {
212
- /** @type {shaka.extern.ManifestDB} */
213
- const manifestDb = {
214
- originalManifestUri: 'http://example.com/foo',
215
- duration: 60,
216
- size: 1234,
217
- expiration: Infinity,
218
- sessionIds: [],
219
- drmInfo: null,
220
- appMetadata: null,
221
- creationTime: 0,
222
- streams: [
223
- createVideoStreamDB(1, [0]),
224
- createTextStreamDB(2),
225
- ],
226
- sequenceMode: false,
227
- };
228
-
229
- const manifest = createConverter().fromManifestDB(manifestDb);
230
- expect(manifest.variants.length).toBe(1);
231
- expect(manifest.textStreams.length).toBe(1);
232
-
233
- verifyStream(manifest.textStreams[0], manifestDb.streams[1]);
234
- });
235
-
236
- it('combines Variants according to variantIds field', () => {
237
- const audio1 = 0;
238
- const audio2 = 1;
239
- const video1 = 2;
240
- const video2 = 3;
241
-
242
- const variant1 = 0;
243
- const variant2 = 1;
244
- const variant3 = 2;
245
-
246
- /** @type {shaka.extern.ManifestDB} */
247
- const manifestDb = {
248
- originalManifestUri: 'http://example.com/foo',
249
- duration: 60,
250
- size: 1234,
251
- expiration: Infinity,
252
- sessionIds: [],
253
- drmInfo: null,
254
- appMetadata: null,
255
- creationTime: 0,
256
- streams: [
257
- // Audio
258
- createAudioStreamDB(audio1, [variant2]),
259
- createAudioStreamDB(audio2, [variant1, variant3]),
260
-
261
- // Video
262
- createVideoStreamDB(video1, [variant1]),
263
- createVideoStreamDB(video2, [variant2, variant3]),
264
- ],
265
- sequenceMode: false,
266
- };
267
-
268
- const manifest = createConverter().fromManifestDB(manifestDb);
269
- expect(manifest.variants.length).toBe(3);
270
-
271
- // Variant 1
272
- expect(findVariant(manifest.variants, audio2, video1)).toBeTruthy();
273
- // Variant 2
274
- expect(findVariant(manifest.variants, audio1, video2)).toBeTruthy();
275
- // Variant 3
276
- expect(findVariant(manifest.variants, audio2, video2)).toBeTruthy();
277
- });
278
- }); // describe('fromManifestDB')
279
-
280
- /** @return {!shaka.offline.ManifestConverter} */
281
- function createConverter() {
282
- return new shaka.offline.ManifestConverter('mechanism', 'cell');
283
- }
284
-
285
- /** @return {!shaka.media.PresentationTimeline} */
286
- function createTimeline() {
287
- return new shaka.media.PresentationTimeline(null, 0);
288
- }
289
-
290
- /**
291
- * @param {number} id
292
- * @param {string} type
293
- * @param {!Array.<number>} variantIds
294
- * @return {shaka.extern.StreamDB}
295
- */
296
- function createStreamDB(id, type, variantIds) {
297
- /** @type {shaka.extern.StreamDB} */
298
- const streamDB = {
299
- id,
300
- originalId: id.toString(),
301
- groupId: null,
302
- primary: false,
303
- type,
304
- mimeType: '',
305
- codecs: '',
306
- language: '',
307
- originalLanguage: null,
308
- label: null,
309
- width: null,
310
- height: null,
311
- encrypted: false,
312
- keyIds: new Set(),
313
- segments: [],
314
- variantIds,
315
- roles: [],
316
- forced: false,
317
- channelsCount: null,
318
- audioSamplingRate: null,
319
- spatialAudio: false,
320
- closedCaptions: null,
321
- external: false,
322
- fastSwitching: false,
323
- };
324
-
325
- return streamDB;
326
- }
327
-
328
- /**
329
- * @param {number} startTime
330
- * @param {number} endTime
331
- * @param {number} dataKey
332
- * @return {shaka.extern.SegmentDB}
333
- */
334
- function createSegmentDB(startTime, endTime, dataKey) {
335
- /** @type {shaka.extern.SegmentDB} */
336
- const segment = {
337
- startTime,
338
- endTime,
339
- dataKey,
340
- initSegmentKey: null,
341
- appendWindowStart: 0,
342
- appendWindowEnd: Infinity,
343
- timestampOffset: 0,
344
- tilesLayout: '',
345
- };
346
-
347
- return segment;
348
- }
349
-
350
- /**
351
- * @param {number} id
352
- * @param {!Array.<number>} variantIds
353
- * @return {shaka.extern.StreamDB}
354
- */
355
- function createVideoStreamDB(id, variantIds) {
356
- const ContentType = shaka.util.ManifestParserUtils.ContentType;
357
- return {
358
- id,
359
- originalId: id.toString(),
360
- groupId: null,
361
- primary: false,
362
- type: ContentType.VIDEO,
363
- mimeType: 'video/mp4',
364
- codecs: 'avc1.42c01e',
365
- frameRate: 22,
366
- pixelAspectRatio: '59:54',
367
- hdr: undefined,
368
- videoLayout: undefined,
369
- kind: undefined,
370
- language: '',
371
- originalLanguage: null,
372
- label: null,
373
- width: 250,
374
- height: 100,
375
- encrypted: true,
376
- keyIds: new Set(['key1']),
377
- segments: [
378
- createSegmentDB(
379
- /* startTime= */ 0,
380
- /* endTime= */ 10,
381
- /* dataKey= */ 1),
382
- createSegmentDB(
383
- /* startTime= */ 10,
384
- /* endTime= */ 20,
385
- /* dataKey= */ 2),
386
- createSegmentDB(
387
- /* startTime= */ 20,
388
- /* endTime= */ 25,
389
- /* dataKey= */ 3),
390
- ],
391
- variantIds,
392
- roles: [],
393
- forced: false,
394
- channelsCount: null,
395
- audioSamplingRate: null,
396
- spatialAudio: false,
397
- closedCaptions: null,
398
- tilesLayout: undefined,
399
- accessibilityPurpose: null,
400
- external: false,
401
- fastSwitching: false,
402
- };
403
- }
404
-
405
- /**
406
- * @param {number} id
407
- * @param {!Array.<number>} variantIds
408
- * @return {shaka.extern.StreamDB}
409
- */
410
- function createAudioStreamDB(id, variantIds) {
411
- const ContentType = shaka.util.ManifestParserUtils.ContentType;
412
- return {
413
- id,
414
- originalId: id.toString(),
415
- groupId: null,
416
- primary: false,
417
- type: ContentType.AUDIO,
418
- mimeType: 'audio/mp4',
419
- codecs: 'mp4a.40.2',
420
- frameRate: undefined,
421
- pixelAspectRatio: undefined,
422
- hdr: undefined,
423
- videoLayout: undefined,
424
- kind: undefined,
425
- language: 'en',
426
- originalLanguage: 'en',
427
- label: null,
428
- width: null,
429
- height: null,
430
- encrypted: false,
431
- keyIds: new Set(),
432
- segments: [
433
- createSegmentDB(
434
- /* startTime= */ 0,
435
- /* endTime= */ 10,
436
- /* dataKey= */ 1),
437
- createSegmentDB(
438
- /* startTime= */ 10,
439
- /* endTime= */ 20,
440
- /* dataKey= */ 2),
441
- createSegmentDB(
442
- /* startTime= */ 20,
443
- /* endTime= */ 25,
444
- /* dataKey= */ 3),
445
- ],
446
- variantIds,
447
- roles: [],
448
- forced: false,
449
- channelsCount: null,
450
- audioSamplingRate: null,
451
- spatialAudio: false,
452
- closedCaptions: null,
453
- tilesLayout: undefined,
454
- accessibilityPurpose: null,
455
- external: false,
456
- fastSwitching: false,
457
- };
458
- }
459
-
460
- /**
461
- * @param {number} id
462
- * @return {shaka.extern.StreamDB}
463
- */
464
- function createTextStreamDB(id) {
465
- const ContentType = shaka.util.ManifestParserUtils.ContentType;
466
- return {
467
- id,
468
- originalId: id.toString(),
469
- groupId: null,
470
- primary: false,
471
- type: ContentType.TEXT,
472
- mimeType: 'text/vtt',
473
- codecs: '',
474
- frameRate: undefined,
475
- pixelAspectRatio: undefined,
476
- hdr: undefined,
477
- videoLayout: undefined,
478
- kind: undefined,
479
- language: 'en',
480
- originalLanguage: 'en',
481
- label: null,
482
- width: null,
483
- height: null,
484
- encrypted: false,
485
- keyIds: new Set(),
486
- segments: [
487
- createSegmentDB(
488
- /* startTime= */ 0,
489
- /* endTime= */ 10,
490
- /* dataKey= */ 1),
491
- createSegmentDB(
492
- /* startTime= */ 10,
493
- /* endTime= */ 20,
494
- /* dataKey= */ 2),
495
- createSegmentDB(
496
- /* startTime= */ 20,
497
- /* endTime= */ 25,
498
- /* dataKey= */ 3),
499
- ],
500
- variantIds: [],
501
- roles: [],
502
- forced: false,
503
- channelsCount: null,
504
- audioSamplingRate: null,
505
- spatialAudio: false,
506
- closedCaptions: null,
507
- tilesLayout: undefined,
508
- accessibilityPurpose: null,
509
- external: false,
510
- fastSwitching: false,
511
- };
512
- }
513
-
514
- /**
515
- * @param {?shaka.extern.Stream} stream
516
- * @param {?shaka.extern.StreamDB} streamDb
517
- * @param {(?shaka.extern.DrmInfo)=} drmInfo
518
- */
519
- function verifyStream(stream, streamDb, drmInfo = null) {
520
- if (!streamDb) {
521
- expect(stream).toBeFalsy();
522
- return;
523
- }
524
-
525
- const expectedDrmInfos = streamDb.encrypted ? [drmInfo] : [];
526
-
527
- const expectedStream = {
528
- id: jasmine.any(Number),
529
- originalId: jasmine.any(String),
530
- groupId: streamDb.groupId,
531
- createSegmentIndex: jasmine.any(Function),
532
- segmentIndex: jasmine.any(shaka.media.SegmentIndex),
533
- mimeType: streamDb.mimeType,
534
- codecs: streamDb.codecs,
535
- frameRate: streamDb.frameRate,
536
- pixelAspectRatio: streamDb.pixelAspectRatio,
537
- hdr: streamDb.hdr,
538
- videoLayout: streamDb.videoLayout,
539
- width: streamDb.width || undefined,
540
- height: streamDb.height || undefined,
541
- kind: streamDb.kind,
542
- drmInfos: expectedDrmInfos,
543
- encrypted: streamDb.encrypted,
544
- keyIds: streamDb.keyIds,
545
- language: streamDb.language,
546
- originalLanguage: streamDb.originalLanguage,
547
- label: streamDb.label,
548
- type: streamDb.type,
549
- primary: streamDb.primary,
550
- trickModeVideo: null,
551
- emsgSchemeIdUris: null,
552
- roles: streamDb.roles,
553
- forced: streamDb.forced,
554
- channelsCount: streamDb.channelsCount,
555
- audioSamplingRate: streamDb.audioSamplingRate,
556
- spatialAudio: streamDb.spatialAudio,
557
- closedCaptions: streamDb.closedCaptions,
558
- tilesLayout: streamDb.tilesLayout,
559
- accessibilityPurpose: null,
560
- external: streamDb.external,
561
- fastSwitching: streamDb.fastSwitching,
562
- };
563
-
564
- expect(stream).toEqual(expectedStream);
565
-
566
- // Assume that we don't have to call createSegmentIndex.
567
-
568
- streamDb.segments.forEach((segmentDb, i) => {
569
- const uri = shaka.offline.OfflineUri.segment(
570
- 'mechanism', 'cell', segmentDb.dataKey);
571
-
572
- const initSegmentReference = segmentDb.initSegmentKey != null ?
573
- jasmine.any(shaka.media.InitSegmentReference) :
574
- null;
575
-
576
- /** @type {shaka.media.SegmentReference} */
577
- const segment =
578
- stream.segmentIndex
579
- .getIteratorForTime(segmentDb.startTime).next().value;
580
-
581
- /** @type {shaka.media.SegmentReference} */
582
- const sameSegment =
583
- stream.segmentIndex
584
- .getIteratorForTime(segmentDb.endTime - 0.1).next().value;
585
-
586
- expect(segment).toBe(sameSegment);
587
- expect(segment.startTime).toBe(segmentDb.startTime);
588
- expect(segment.endTime).toBe(segmentDb.endTime);
589
- expect(segment.startByte).toBe(0);
590
- expect(segment.endByte).toBe(null);
591
- expect(segment.getUris()).toEqual([uri.toString()]);
592
- expect(segment.initSegmentReference).toEqual(initSegmentReference);
593
- expect(segment.timestampOffset).toBe(segmentDb.timestampOffset);
594
- });
595
- }
596
-
597
- /**
598
- * @param {!Array.<shaka.extern.Variant>} variants
599
- * @param {?number} audioId
600
- * @param {?number} videoId
601
- * @return {?shaka.extern.Variant}
602
- */
603
- function findVariant(variants, audioId, videoId) {
604
- for (const variant of variants) {
605
- /** @type {?shaka.extern.Stream} */
606
- const audio = variant.audio;
607
- /** @type {?shaka.extern.Stream} */
608
- const video = variant.video;
609
-
610
- /** @type {boolean } */
611
- const audioMatch = audio ? audioId == audio.id : audioId == null;
612
- /** @type {boolean } */
613
- const videoMatch = video ? videoId == video.id : videoId == null;
614
-
615
- if (audioMatch && videoMatch) {
616
- return variant;
617
- }
618
- }
619
-
620
- return null;
621
- }
622
- });