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,1363 +0,0 @@
1
- /*! @license
2
- * Shaka Player
3
- * Copyright 2016 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- describe('VttTextParser', () => {
8
- const Cue = shaka.text.Cue;
9
- const CueRegion = shaka.text.CueRegion;
10
- const originalLogWarning = shaka.log.warning;
11
-
12
- /** @type {!jasmine.Spy} */
13
- let logWarningSpy;
14
-
15
- beforeEach(() => {
16
- logWarningSpy = jasmine.createSpy('shaka.log.warning');
17
- shaka.log.warning = shaka.test.Util.spyFunc(logWarningSpy);
18
- });
19
-
20
- afterEach(() => {
21
- shaka.log.warning = originalLogWarning;
22
- });
23
-
24
- it('supports no cues', () => {
25
- verifyHelper([],
26
- 'WEBVTT',
27
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
28
- });
29
-
30
- it('supports initial comments', () => {
31
- verifyHelper([],
32
- 'WEBVTT - Comments',
33
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
34
- });
35
-
36
- it('supports comment blocks', () => {
37
- verifyHelper([],
38
- 'WEBVTT\n\n' +
39
- 'NOTE\n' +
40
- 'This is a comment block',
41
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
42
- });
43
-
44
- it('supports comment blocks with inital comment', () => {
45
- verifyHelper([],
46
- 'WEBVTT\n\n' +
47
- 'NOTE - A header comment\n' +
48
- 'This is a comment block',
49
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
50
- });
51
-
52
- it('handles a blank line at the end of the file', () => {
53
- verifyHelper(
54
- [
55
- {startTime: 20, endTime: 40, payload: 'Test'},
56
- ],
57
- 'WEBVTT\n\n' +
58
- '00:00:20.000 --> 00:00:40.000\n' +
59
- 'Test\n\n',
60
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
61
- });
62
-
63
- it('handles no blank line at the end of the file', () => {
64
- verifyHelper(
65
- [
66
- {startTime: 20, endTime: 40, payload: 'Test'},
67
- ],
68
- 'WEBVTT\n\n' +
69
- '00:00:20.000 --> 00:00:40.000\n' +
70
- 'Test\n',
71
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
72
- });
73
-
74
- it('handles no newline after the final text payload', () => {
75
- verifyHelper(
76
- [
77
- {startTime: 20, endTime: 40, payload: 'Test'},
78
- ],
79
- 'WEBVTT\n\n' +
80
- '00:00:20.000 --> 00:00:40.000\n' +
81
- 'Test',
82
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
83
- });
84
-
85
- it('supports cues with no settings', () => {
86
- verifyHelper(
87
- [
88
- {startTime: 20, endTime: 40, payload: 'Test', id: '1'},
89
- {startTime: 40, endTime: 50, payload: 'Test2', id: '2'},
90
- ],
91
- 'WEBVTT\n\n' +
92
- '1\n' +
93
- '00:00:20.000 --> 00:00:40.000\n' +
94
- 'Test\n\n' +
95
- '2\n' +
96
- '00:00:40.000 --> 00:00:50.000\n' +
97
- 'Test2',
98
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
99
- });
100
-
101
- it('supports cues with no ID', () => {
102
- verifyHelper(
103
- [
104
- {startTime: 20, endTime: 40, payload: 'Test'},
105
- {startTime: 40, endTime: 50, payload: 'Test2'},
106
- ],
107
- 'WEBVTT\n\n' +
108
- '00:00:20.000 --> 00:00:40.000\n' +
109
- 'Test\n\n' +
110
- '00:00:40.000 --> 00:00:50.000\n' +
111
- 'Test2',
112
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
113
- });
114
-
115
- it('supports comments within cues', () => {
116
- verifyHelper(
117
- [
118
- {startTime: 20, endTime: 40, payload: 'Test'},
119
- {startTime: 40, endTime: 50, payload: 'Test2'},
120
- ],
121
- 'WEBVTT\n\n' +
122
- '00:00:20.000 --> 00:00:40.000\n' +
123
- 'Test\n\n' +
124
- 'NOTE\n' +
125
- 'This is a note\n\n' +
126
- '00:00:40.000 --> 00:00:50.000\n' +
127
- 'Test2',
128
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
129
- });
130
-
131
- it('supports non-integer timecodes', () => {
132
- verifyHelper(
133
- [
134
- {startTime: 20.1, endTime: 40.505, payload: 'Test'},
135
- ],
136
- 'WEBVTT\n\n' +
137
- '00:00:20.100 --> 00:00:40.505\n' +
138
- 'Test',
139
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
140
- });
141
-
142
- it('supports large timecodes', () => {
143
- verifyHelper(
144
- [
145
- {startTime: 20, endTime: 108000, payload: 'Test'},
146
- ],
147
- 'WEBVTT\n\n' +
148
- '00:00:20.000 --> 30:00:00.000\n' +
149
- 'Test',
150
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
151
- });
152
-
153
- it('requires header', () => {
154
- errorHelper(shaka.util.Error.Code.INVALID_TEXT_HEADER,
155
- '',
156
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
157
- errorHelper(shaka.util.Error.Code.INVALID_TEXT_HEADER,
158
- '00:00:00.000 --> 00:00:00.020\nTest',
159
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
160
- });
161
-
162
- it('rejects invalid time values', () => {
163
- verifyHelper([],
164
- 'WEBVTT\n\n00.020 --> 0:00.040\nTest',
165
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
166
- verifyHelper([],
167
- 'WEBVTT\n\n0:00.020 --> 0:00.040\nTest',
168
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
169
- verifyHelper([],
170
- 'WEBVTT\n\n00:00.20 --> 0:00.040\nTest',
171
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
172
- verifyHelper([],
173
- 'WEBVTT\n\n00:100.20 --> 0:00.040\nTest',
174
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
175
- verifyHelper([],
176
- 'WEBVTT\n\n00:00.020 --> 0:00.040\nTest',
177
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
178
- verifyHelper([],
179
- 'WEBVTT\n\n00:00:00:00.020 --> 0:00.040\nTest',
180
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
181
- verifyHelper([],
182
- 'WEBVTT\n\n00:61.020 --> 0:00.040\nTest',
183
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
184
- verifyHelper([],
185
- 'WEBVTT\n\n61:00.020 --> 0:00.040\nTest',
186
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
187
- });
188
-
189
- it('supports vertical setting', () => {
190
- verifyHelper(
191
- [
192
- {
193
- startTime: 20,
194
- endTime: 40,
195
- payload: 'Test',
196
- writingMode: Cue.writingMode.VERTICAL_RIGHT_TO_LEFT,
197
- },
198
- {
199
- startTime: 40,
200
- endTime: 50,
201
- payload: 'Test2',
202
- writingMode: Cue.writingMode.VERTICAL_LEFT_TO_RIGHT,
203
- },
204
- ],
205
- 'WEBVTT\n\n' +
206
- '00:00:20.000 --> 00:00:40.000 vertical:rl\n' +
207
- 'Test\n\n' +
208
- '00:00:40.000 --> 00:00:50.000 vertical:lr\n' +
209
- 'Test2',
210
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
211
- });
212
-
213
- it('supports line setting', () => {
214
- verifyHelper(
215
- [
216
- {
217
- startTime: 20, endTime: 40, payload: 'Test', line: 0,
218
- lineInterpretation: Cue.lineInterpretation.LINE_NUMBER,
219
- },
220
- {
221
- startTime: 40, endTime: 50, payload: 'Test2', line: -1,
222
- lineInterpretation: Cue.lineInterpretation.LINE_NUMBER,
223
- },
224
- {
225
- startTime: 50, endTime: 60, payload: 'Test3', line: 45,
226
- lineInterpretation: Cue.lineInterpretation.PERCENTAGE,
227
- },
228
- {
229
- startTime: 55, endTime: 65, payload: 'Test4', line: 12.3,
230
- lineInterpretation: Cue.lineInterpretation.PERCENTAGE,
231
- },
232
- ],
233
- 'WEBVTT\n\n' +
234
- '00:00:20.000 --> 00:00:40.000 line:0\n' +
235
- 'Test\n\n' +
236
- '00:00:40.000 --> 00:00:50.000 line:-1\n' +
237
- 'Test2\n\n' +
238
- '00:00:50.000 --> 00:01:00.000 line:45%\n' +
239
- 'Test3\n\n' +
240
- '00:00:55.000 --> 00:01:05.000 line:12.3%\n' +
241
- 'Test4\n\n',
242
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
243
- });
244
-
245
- it('supports line setting with optional part', () => {
246
- verifyHelper(
247
- [
248
- {
249
- startTime: 20, endTime: 40, payload: 'Test', line: 10,
250
- lineInterpretation: Cue.lineInterpretation.PERCENTAGE,
251
- lineAlign: Cue.lineAlign.START,
252
- },
253
- {
254
- startTime: 40, endTime: 50, payload: 'Test2', line: -1,
255
- lineInterpretation: Cue.lineInterpretation.LINE_NUMBER,
256
- lineAlign: Cue.lineAlign.CENTER,
257
- },
258
- ],
259
- 'WEBVTT\n\n' +
260
- '00:00:20.000 --> 00:00:40.000 line:10%,start\n' +
261
- 'Test\n\n' +
262
- '00:00:40.000 --> 00:00:50.000 line:-1,center\n' +
263
- 'Test2',
264
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
265
- });
266
-
267
- it('supports position setting', () => {
268
- verifyHelper(
269
- [
270
- {startTime: 20, endTime: 40, payload: 'Test', position: 45},
271
- {startTime: 25, endTime: 45, payload: 'Test2', position: 12.3},
272
- ],
273
- 'WEBVTT\n\n' +
274
- '00:00:20.000 --> 00:00:40.000 position:45%\n' +
275
- 'Test\n\n' +
276
- '00:00:25.000 --> 00:00:45.000 position:12.3%\n' +
277
- 'Test2\n\n',
278
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
279
- });
280
-
281
- it('supports position setting with optional part', () => {
282
- verifyHelper(
283
- [
284
- {
285
- startTime: 20, endTime: 40, payload: 'Test', position: 45,
286
- positionAlign: Cue.positionAlign.LEFT,
287
- },
288
- {
289
- startTime: 20, endTime: 40, payload: 'Test2', position: 45,
290
- positionAlign: Cue.positionAlign.LEFT,
291
- },
292
- ],
293
- 'WEBVTT\n\n' +
294
- '00:00:20.000 --> 00:00:40.000 position:45%,line-left\n' +
295
- 'Test\n\n' +
296
- '00:00:20.000 --> 00:00:40.000 position:45%,start\n' +
297
- 'Test2',
298
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
299
- });
300
-
301
- it('supports size setting', () => {
302
- verifyHelper(
303
- [
304
- {startTime: 20, endTime: 40, payload: 'Test', size: 56},
305
- {startTime: 25, endTime: 45, payload: 'Test2', size: 12.3},
306
- ],
307
- 'WEBVTT\n\n' +
308
- '00:00:20.000 --> 00:00:40.000 size:56%\n' +
309
- 'Test\n\n' +
310
- '00:00:25.000 --> 00:00:45.000 size:12.3%\n' +
311
- 'Test2\n\n',
312
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
313
- });
314
-
315
- it('supports align setting', () => {
316
- verifyHelper(
317
- [
318
- {startTime: 20, endTime: 40, payload: 'Test', textAlign: 'center'},
319
- ],
320
- 'WEBVTT\n\n' +
321
- '00:00:20.000 --> 00:00:40.000 align:center\n' +
322
- 'Test',
323
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
324
- });
325
-
326
- it('supports multiple settings', () => {
327
- verifyHelper(
328
- [
329
- {
330
- startTime: 20,
331
- endTime: 40,
332
- payload: 'Test',
333
- textAlign: Cue.textAlign.CENTER,
334
- size: 56,
335
- writingMode: Cue.writingMode.VERTICAL_LEFT_TO_RIGHT,
336
- },
337
- ],
338
- 'WEBVTT\n\n' +
339
- '00:00:20.000 --> 00:00:40.000 align:center size:56% vertical:lr\n' +
340
- 'Test',
341
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
342
- });
343
-
344
- it('supports timestamps with one-digit hour at start time', () => {
345
- verifyHelper(
346
- [
347
- {
348
- startTime: 20,
349
- endTime: 40,
350
- payload: 'Test',
351
- textAlign: Cue.textAlign.CENTER,
352
- size: 56,
353
- writingMode: Cue.writingMode.VERTICAL_LEFT_TO_RIGHT,
354
- },
355
- ],
356
- 'WEBVTT\n\n' +
357
- '0:00:20.000 --> 00:00:40.000 align:center size:56% vertical:lr\n' +
358
- 'Test',
359
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
360
- });
361
-
362
- it('supports timestamps with one-digit hour at end time', () => {
363
- verifyHelper(
364
- [
365
- {
366
- startTime: 20,
367
- endTime: 40,
368
- payload: 'Test',
369
- textAlign: Cue.textAlign.CENTER,
370
- size: 56,
371
- writingMode: Cue.writingMode.VERTICAL_LEFT_TO_RIGHT,
372
- },
373
- ],
374
- 'WEBVTT\n\n' +
375
- '00:00:20.000 --> 0:00:40.000 align:center size:56% vertical:lr\n' +
376
- 'Test',
377
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
378
- });
379
-
380
- it('supports stamps with one-digit hours at start & end time', () => {
381
- verifyHelper(
382
- [
383
- {
384
- startTime: 20,
385
- endTime: 40,
386
- payload: 'Test',
387
- textAlign: 'center',
388
- size: 56,
389
- writingMode: Cue.writingMode.VERTICAL_LEFT_TO_RIGHT,
390
- },
391
- ],
392
- 'WEBVTT\n\n' +
393
- '0:00:20.000 --> 0:00:40.000 align:center size:56% vertical:lr\n' +
394
- 'Test',
395
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
396
- });
397
-
398
- it('uses time offset from vttOffset, not periodStart or segmentStart', () => {
399
- verifyHelper(
400
- [
401
- {
402
- startTime: 50,
403
- endTime: 60,
404
- payload: 'Test',
405
- textAlign: 'center',
406
- size: 56,
407
- writingMode: Cue.writingMode.VERTICAL_LEFT_TO_RIGHT,
408
- },
409
- ],
410
- 'WEBVTT\n\n' +
411
- '0:00:10.000 --> 0:00:20.000 align:center size:56% vertical:lr\n' +
412
- 'Test',
413
- {periodStart: 60, segmentStart: 80, segmentEnd: 100, vttOffset: 40});
414
- });
415
-
416
- it('parses VTTRegions', () => {
417
- verifyHelper(
418
- [
419
- {
420
- startTime: 20,
421
- endTime: 40,
422
- payload: 'Test',
423
- region: jasmine.objectContaining({
424
- id: 'reg1',
425
- viewportAnchorX: 10,
426
- viewportAnchorY: 90,
427
- regionAnchorX: 0,
428
- regionAnchorY: 100,
429
- width: 50,
430
- height: 3,
431
- heightUnits: CueRegion.units.LINES,
432
- widthUnits: CueRegion.units.PERCENTAGE,
433
- viewportAnchorUnits: CueRegion.units.PERCENTAGE,
434
- scroll: CueRegion.scrollMode.UP,
435
- }),
436
- },
437
- ],
438
- 'WEBVTT\n' +
439
- 'Region: id=reg1 width=50% lines=3 regionanchor=0%,100% ' +
440
- 'viewportanchor=10%,90% scroll=up\n\n' +
441
- '0:00:20.000 --> 0:00:40.000 region:reg1\n' +
442
- 'Test',
443
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
444
- });
445
-
446
- it('ignores and logs invalid settings', () => {
447
- expect(logWarningSpy).not.toHaveBeenCalled();
448
-
449
- verifyHelper(
450
- [
451
- {startTime: 20, endTime: 40, payload: 'Test'},
452
- ],
453
- 'WEBVTT\n\n' +
454
- '00:00:20.000 --> 00:00:40.000 vertical:es\n' +
455
- 'Test\n\n',
456
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
457
-
458
- verifyHelper(
459
- [
460
- {startTime: 20, endTime: 40, payload: 'Test'},
461
- ],
462
- 'WEBVTT\n\n' +
463
- '00:00:20.000 --> 00:00:40.000 vertical:\n' +
464
- 'Test\n\n',
465
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
466
-
467
- verifyHelper(
468
- [
469
- {startTime: 20, endTime: 40, payload: 'Test'},
470
- ],
471
- 'WEBVTT\n\n' +
472
- '00:00:20.000 --> 00:00:40.000 vertical\n' +
473
- 'Test\n\n',
474
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
475
-
476
- verifyHelper(
477
- [
478
- {startTime: 20, endTime: 40, payload: 'Test'},
479
- ],
480
- 'WEBVTT\n\n' +
481
- '00:00:20.000 --> 00:00:40.000 line:-3%\n' +
482
- 'Test\n\n',
483
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
484
-
485
- verifyHelper(
486
- [
487
- {startTime: 20, endTime: 40, payload: 'Test'},
488
- ],
489
- 'WEBVTT\n\n' +
490
- '00:00:20.000 --> 00:00:40.000 line:45%%\n' +
491
- 'Test\n\n',
492
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
493
-
494
- verifyHelper(
495
- [
496
- {startTime: 20, endTime: 40, payload: 'Test'},
497
- ],
498
- 'WEBVTT\n\n' +
499
- '00:00:20.000 --> 00:00:40.000 align:10\n' +
500
- 'Test\n\n',
501
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
502
-
503
- verifyHelper(
504
- [
505
- {startTime: 20, endTime: 40, payload: 'Test'},
506
- ],
507
- 'WEBVTT\n\n' +
508
- '00:00:20.000 --> 00:00:40.000 align:foo\n' +
509
- 'Test\n\n',
510
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
511
-
512
- expect(logWarningSpy).toHaveBeenCalledTimes(7);
513
- });
514
-
515
- it('parses X-TIMESTAMP-MAP header', () => {
516
- verifyHelper(
517
- [
518
- {startTime: 30, endTime: 50, payload: 'Test'},
519
- {startTime: 50, endTime: 60, payload: 'Test2'},
520
- ],
521
- // 900000 = 10 sec, so expect every timestamp to be 10
522
- // seconds ahead of what is specified.
523
- 'WEBVTT\n' +
524
- 'X-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000\n\n' +
525
- '00:00:20.000 --> 00:00:40.000 line:0\n' +
526
- 'Test\n\n' +
527
- '00:00:40.000 --> 00:00:50.000 line:-1\n' +
528
- 'Test2',
529
- {periodStart: 0, segmentStart: 25, segmentEnd: 65, vttOffset: 0},
530
- /* sequenceMode= */ true);
531
- });
532
-
533
- it('ignores X-TIMESTAMP-MAP header if not in sequence mode', () => {
534
- verifyHelper(
535
- [
536
- {startTime: 20, endTime: 40, payload: 'Test'},
537
- {startTime: 40, endTime: 50, payload: 'Test2'},
538
- ],
539
- 'WEBVTT\n' +
540
- 'X-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:01:00:00.000\n\n' +
541
- '00:00:20.000 --> 00:00:40.000 line:0\n' +
542
- 'Test\n\n' +
543
- '00:00:40.000 --> 00:00:50.000 line:-1\n' +
544
- 'Test2',
545
- {periodStart: 0, segmentStart: 25, segmentEnd: 65, vttOffset: 0},
546
- /* sequenceMode= */ false);
547
- });
548
-
549
- it('parses X-TIMESTAMP-MAP header with non-zero local base', () => {
550
- verifyHelper(
551
- [
552
- {startTime: 1800, endTime: 1810, payload: 'Test'},
553
- {startTime: 1820, endTime: 1830, payload: 'Test2'},
554
- ],
555
- // 162000000 = 30 * 60 * 90k = 30 minutes for the TS part of the map.
556
- // The local (VTT) part of the map is 1 hour.
557
- // So text times of 1 hour map to media times of 30 minutes.
558
- 'WEBVTT\n' +
559
- 'X-TIMESTAMP-MAP=MPEGTS:162000000,LOCAL:01:00:00.000\n\n' +
560
- '01:00:00.000 --> 01:00:10.000 line:0\n' +
561
- 'Test\n\n' +
562
- '01:00:20.000 --> 01:00:30.000 line:-1\n' +
563
- 'Test2',
564
- {periodStart: 0, segmentStart: 25, segmentEnd: 65, vttOffset: 0},
565
- /* sequenceMode= */ true);
566
- });
567
-
568
- it('combines X-TIMESTAMP-MAP header with periodStart', () => {
569
- verifyHelper(
570
- [
571
- {startTime: 130, endTime: 150, payload: 'Test'},
572
- {startTime: 150, endTime: 160, payload: 'Test2'},
573
- ],
574
- // 900000 = 10 sec, so expect every timestamp to be 10
575
- // seconds ahead of what is specified.
576
- 'WEBVTT\n' +
577
- 'X-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000\n\n' +
578
- '00:00:20.000 --> 00:00:40.000 line:0\n' +
579
- 'Test\n\n' +
580
- '00:00:40.000 --> 00:00:50.000 line:-1\n' +
581
- 'Test2',
582
- {periodStart: 100, segmentStart: 25, segmentEnd: 65, vttOffset: 0},
583
- /* sequenceMode= */ true);
584
- });
585
-
586
- it('handles timestamp rollover with X-TIMESTAMP-MAP header', () => {
587
- verifyHelper(
588
- [
589
- {startTime: 95443, endTime: 95445, payload: 'Test'},
590
- ],
591
- // 8589870000/90000 = 95443 sec, so expect every timestamp to be 95443
592
- // seconds ahead of what is specified.
593
- 'WEBVTT\n' +
594
- 'X-TIMESTAMP-MAP=MPEGTS:8589870000,LOCAL:00:00:00.000\n\n' +
595
- '00:00:00.000 --> 00:00:02.000 line:0\n' +
596
- 'Test',
597
- // Non-null segmentStart takes precedence over X-TIMESTAMP-MAP.
598
- // This protects us from rollover in the MPEGTS field.
599
- {periodStart: 0, segmentStart: 95440, segmentEnd: 95550, vttOffset: 0},
600
- /* sequenceMode= */ true);
601
-
602
- verifyHelper(
603
- [
604
- {startTime: 95552, endTime: 95554, payload: 'Test2'},
605
- ],
606
- // 95550 is larger than the roll over timestamp, so the timestamp offset
607
- // gets rolled over.
608
- // (9745408 + 0x200000000) / 90000 = 95552 sec
609
- 'WEBVTT\n' +
610
- 'X-TIMESTAMP-MAP=MPEGTS:9745408,LOCAL:00:00:00.000\n\n' +
611
- '00:00:00.000 --> 00:00:02.000 line:0\n' +
612
- 'Test2',
613
- {periodStart: 0, segmentStart: 95550, segmentEnd: 95560, vttOffset: 0},
614
- /* sequenceMode= */ true);
615
- });
616
-
617
- // A mock-up of HLS live subs as seen in b/253104251.
618
- it('handles timestamp rollover and negative offset in HLS live', () => {
619
- // Similar to values seen in b/253104251, for a realistic regression test.
620
- // When using sequence mode on live HLS, we get negative offsets that
621
- // represent the timestamp of our first append in sequence mode.
622
- verifyHelper(
623
- [
624
- {startTime: 3600, endTime: 3602, payload: 'Test'},
625
- ],
626
- 'WEBVTT\n' +
627
- 'X-TIMESTAMP-MAP=MPEGTS:8355814896,LOCAL:00:00:00.000\n\n' +
628
- '00:00:00.000 --> 00:00:02.000 line:0\n' +
629
- 'Test',
630
- {
631
- periodStart: -1234567,
632
- segmentStart: 3600,
633
- segmentEnd: 3610,
634
- vttOffset: -1234567,
635
- },
636
- /* sequenceMode= */ true);
637
- });
638
-
639
- it('supports global style blocks', () => {
640
- const textShadow = '-1px 0 black, 0 1px black, 1px 0 black, 0 -1px black';
641
- verifyHelper(
642
- [
643
- {
644
- startTime: 20,
645
- endTime: 40,
646
- payload: 'Test',
647
- color: 'cyan',
648
- fontSize: '10px',
649
- textCombineUpright: 'all',
650
- textShadow: textShadow,
651
- },
652
- {
653
- startTime: 40,
654
- endTime: 50,
655
- payload: 'Test2',
656
- color: 'cyan',
657
- fontSize: '10px',
658
- textCombineUpright: 'all',
659
- textShadow: textShadow,
660
- },
661
- ],
662
- 'WEBVTT\n\n' +
663
- 'STYLE\n' +
664
- '::cue {\n' +
665
- 'color: cyan;\n'+
666
- 'font-size: 10px;\n'+
667
- `text-shadow: ${textShadow};\n`+
668
- 'text-combine-upright: all;\n'+
669
- '}\n\n' +
670
- '00:00:20.000 --> 00:00:40.000\n' +
671
- 'Test\n\n' +
672
- '00:00:40.000 --> 00:00:50.000\n' +
673
- 'Test2',
674
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
675
- });
676
-
677
- it('supports global style blocks without blank lines', () => {
678
- verifyHelper(
679
- [
680
- {
681
- startTime: 20,
682
- endTime: 40,
683
- payload: 'Test',
684
- color: 'cyan',
685
- fontSize: '10px',
686
- },
687
- {
688
- startTime: 40,
689
- endTime: 50,
690
- payload: 'Test2',
691
- color: 'cyan',
692
- fontSize: '10px',
693
- },
694
- ],
695
- 'WEBVTT\n\n' +
696
- 'STYLE\n' +
697
- '::cue { color: cyan; font-size: 10px; }\n\n' +
698
- '00:00:20.000 --> 00:00:40.000\n' +
699
- 'Test\n\n' +
700
- '00:00:40.000 --> 00:00:50.000\n' +
701
- 'Test2',
702
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
703
- });
704
-
705
- it('supports payload stylized', () => {
706
- verifyHelper(
707
- [
708
- {
709
- startTime: 10,
710
- endTime: 20,
711
- payload: '',
712
- nestedCues: [
713
- {
714
- startTime: 10,
715
- endTime: 20,
716
- payload: 'Test',
717
- fontWeight: Cue.fontWeight.BOLD,
718
- },
719
- ],
720
- },
721
- {
722
- startTime: 20,
723
- endTime: 30,
724
- payload: '',
725
- nestedCues: [
726
- {
727
- startTime: 20,
728
- endTime: 30,
729
- payload: 'Test2',
730
- fontStyle: Cue.fontStyle.ITALIC,
731
- },
732
- ],
733
- },
734
- {
735
- startTime: 30,
736
- endTime: 40,
737
- payload: '',
738
- nestedCues: [
739
- {
740
- startTime: 30,
741
- endTime: 40,
742
- payload: 'Test3',
743
- textDecoration: [Cue.textDecoration.UNDERLINE],
744
- },
745
- ],
746
- },
747
- {
748
- startTime: 40,
749
- endTime: 50,
750
- payload: '',
751
- nestedCues: [
752
- {
753
- startTime: 40,
754
- endTime: 50,
755
- payload: 'Test4',
756
- },
757
- ],
758
- },
759
- {
760
- startTime: 50,
761
- endTime: 60,
762
- payload: '',
763
- nestedCues: [
764
- {
765
- startTime: 50,
766
- endTime: 60,
767
- payload: '',
768
- fontWeight: Cue.fontWeight.BOLD,
769
- nestedCues: [
770
- {
771
- startTime: 50,
772
- endTime: 60,
773
- payload: 'Test',
774
- },
775
- {
776
- startTime: 50,
777
- endTime: 60,
778
- payload: '5',
779
- fontStyle: Cue.fontStyle.ITALIC,
780
- },
781
- ],
782
- },
783
- ],
784
- },
785
- {
786
- startTime: 70,
787
- endTime: 80,
788
- payload: '',
789
- nestedCues: [
790
- {
791
- startTime: 70,
792
- endTime: 80,
793
- payload: 'Test',
794
- fontWeight: Cue.fontWeight.NORMAL,
795
- },
796
- {
797
- startTime: 70,
798
- endTime: 80,
799
- payload: '6',
800
- fontWeight: Cue.fontWeight.BOLD,
801
- },
802
- ],
803
- },
804
- {
805
- startTime: 80,
806
- endTime: 90,
807
- payload: '',
808
- nestedCues: [
809
- {
810
- startTime: 80,
811
- endTime: 90,
812
- payload: '',
813
- fontWeight: Cue.fontWeight.BOLD,
814
- nestedCues: [
815
- {
816
- startTime: 80,
817
- endTime: 90,
818
- payload: 'Test ',
819
- },
820
- {
821
- startTime: 80,
822
- endTime: 90,
823
- payload: '7',
824
- fontStyle: Cue.fontStyle.ITALIC,
825
- },
826
- ],
827
- },
828
- ],
829
- },
830
- {
831
- startTime: 90,
832
- endTime: 100,
833
- payload: '<b>Test<i>8</b>',
834
- },
835
- ],
836
- 'WEBVTT\n\n' +
837
- '00:00:10.000 --> 00:00:20.000\n' +
838
- '<b>Test</b>\n\n' +
839
- '00:00:20.000 --> 00:00:30.000\n' +
840
- '<i>Test2</i>\n\n' +
841
- '00:00:30.000 --> 00:00:40.000\n' +
842
- '<u>Test3</u>\n\n' +
843
- '00:00:40.000 --> 00:00:50.000\n' +
844
- '<a>Test4</a>\n\n' +
845
- '00:00:50.000 --> 00:01:00.000\n' +
846
- '<b>Test<i>5</i></b>\n\n' +
847
- '00:01:10.000 --> 00:01:20.000\n' +
848
- 'Test<b>6</b>\n\n' +
849
- '00:01:20.000 --> 00:01:30.000\n' +
850
- '<b>Test <i>7</i></b>\n\n' +
851
- '00:01:30.000 --> 00:01:40.000\n' +
852
- '<b>Test<i>8</b>',
853
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
854
- });
855
-
856
- it('support escaped html payload', () => {
857
- verifyHelper(
858
- [
859
- {
860
- startTime: 20.1,
861
- endTime: 40.505,
862
- payload: '"Test & 1"\u{a0}',
863
- },
864
- {
865
- startTime: 41,
866
- endTime: 42,
867
- payload: '',
868
- nestedCues: [
869
- {
870
- startTime: 41,
871
- endTime: 42,
872
- payload: 'Test',
873
- fontStyle: Cue.fontStyle.ITALIC,
874
- },
875
- {
876
- startTime: 41,
877
- endTime: 42,
878
- payload: '&',
879
- },
880
- ],
881
- },
882
- ],
883
- 'WEBVTT\n\n' +
884
- '00:00:20.100 --> 00:00:40.505\n' +
885
- '&quot;Test &amp; 1&quot;&nbsp;\n\n' +
886
- '00:00:41.000 --> 00:00:42.000\n' +
887
- '<i>Test</i>&amp;',
888
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
889
- });
890
-
891
- it('supports specific style blocks', () => {
892
- verifyHelper(
893
- [
894
- {
895
- startTime: 20,
896
- endTime: 40,
897
- payload: '',
898
- nestedCues: [
899
- {
900
- startTime: 20,
901
- endTime: 40,
902
- payload: 'Test',
903
- color: 'cyan',
904
- fontWeight: Cue.fontWeight.BOLD,
905
- },
906
- ],
907
- },
908
- {startTime: 40, endTime: 50, payload: 'Test2'},
909
- ],
910
- 'WEBVTT\n\n' +
911
- 'STYLE\n::cue(b) { color: cyan; }\n\n' +
912
- '00:00:20.000 --> 00:00:40.000\n' +
913
- '<b>Test</b>\n\n' +
914
- '00:00:40.000 --> 00:00:50.000\n' +
915
- 'Test2',
916
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
917
- });
918
-
919
- it('supports ruby html tags', () => {
920
- verifyHelper(
921
- [
922
- {
923
- startTime: 20,
924
- endTime: 40,
925
- payload: '',
926
- nestedCues: [
927
- {
928
- startTime: 20,
929
- endTime: 40,
930
- payload: '',
931
- rubyTag: 'ruby',
932
- nestedCues: [
933
- {
934
- startTime: 20,
935
- endTime: 40,
936
- payload: 'Test',
937
- },
938
- {
939
- startTime: 20,
940
- endTime: 40,
941
- payload: '2',
942
- rubyTag: 'rt',
943
- },
944
- {
945
- startTime: 20,
946
- endTime: 40,
947
- payload: '3',
948
- rubyTag: 'rp',
949
- },
950
- ],
951
- },
952
- ],
953
- },
954
- ],
955
- 'WEBVTT\n\n' +
956
- '00:00:20.000 --> 00:00:40.000\n' +
957
- '<ruby>Test<rt>2</rt><rp>3</rp></ruby>',
958
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
959
- });
960
-
961
- it('supports only two digits in the timestamp', () => {
962
- verifyHelper(
963
- [
964
- {startTime: 20, endTime: 40, payload: 'Test'},
965
- ],
966
- 'WEBVTT\n\n' +
967
- '00:00:20.00 --> 00:00:40.00\n' +
968
- 'Test',
969
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
970
- });
971
-
972
- it('supports class with default color', () => {
973
- verifyHelper(
974
- [
975
- {
976
- startTime: 20, endTime: 40,
977
- payload: '',
978
- nestedCues: [
979
- {
980
- startTime: 20,
981
- endTime: 40,
982
- payload: 'Test',
983
- color: 'yellow',
984
- },
985
- ],
986
- },
987
- {
988
- startTime: 40, endTime: 50,
989
- payload: '',
990
- nestedCues: [
991
- {
992
- startTime: 40,
993
- endTime: 50,
994
- payload: 'Test2',
995
- color: 'cyan',
996
- backgroundColor: 'blue',
997
- },
998
- ],
999
- },
1000
- {
1001
- startTime: 50, endTime: 60,
1002
- payload: '',
1003
- nestedCues: [
1004
- {
1005
- startTime: 50,
1006
- endTime: 60,
1007
- payload: 'Test 3',
1008
- color: 'magenta',
1009
- backgroundColor: 'black',
1010
- },
1011
- ],
1012
- },
1013
- {
1014
- startTime: 60,
1015
- endTime: 70,
1016
- payload: '',
1017
- nestedCues: [
1018
- {
1019
- startTime: 60,
1020
- endTime: 70,
1021
- payload: 'First row',
1022
- },
1023
- {
1024
- startTime: 60,
1025
- endTime: 70,
1026
- payload: 'Test4.1',
1027
- color: 'yellow',
1028
- },
1029
- {
1030
- startTime: 60,
1031
- endTime: 70,
1032
- payload: '',
1033
- lineBreak: true,
1034
- },
1035
- {
1036
- startTime: 60,
1037
- endTime: 70,
1038
- payload: 'Second row',
1039
- },
1040
- {
1041
- startTime: 60,
1042
- endTime: 70,
1043
- payload: 'Test4.2',
1044
- color: 'blue',
1045
- },
1046
- ],
1047
- },
1048
- {
1049
- startTime: 70,
1050
- endTime: 80,
1051
- payload: '',
1052
- nestedCues: [
1053
- {
1054
- startTime: 70,
1055
- endTime: 80,
1056
- payload: '',
1057
- color: 'red',
1058
- nestedCues: [
1059
- {
1060
- startTime: 70,
1061
- endTime: 80,
1062
- payload: 'Test5.1',
1063
- color: 'red',
1064
- },
1065
- {
1066
- startTime: 70,
1067
- endTime: 80,
1068
- payload: 'Test5.2',
1069
- color: 'lime',
1070
- },
1071
- ],
1072
- },
1073
- ],
1074
- },
1075
- {
1076
- startTime: 80,
1077
- endTime: 90,
1078
- payload: '<b><c.lime>Parse fail 1</b></c.lime>',
1079
- nestedCues: [],
1080
- },
1081
- {
1082
- startTime: 90,
1083
- endTime: 100,
1084
- payload: '<c.lime><b>Parse fail 2</c.lime></b>',
1085
- nestedCues: [],
1086
- },
1087
- {
1088
- startTime: 100,
1089
- endTime: 110,
1090
- payload: '',
1091
- nestedCues: [
1092
- {
1093
- startTime: 100,
1094
- endTime: 110,
1095
- payload: 'forward slash 1/2 in text',
1096
- color: 'lime',
1097
- },
1098
- ],
1099
- },
1100
- {
1101
- startTime: 110,
1102
- endTime: 120,
1103
- payload: '<c.lime>less or more < > in text</c.lime>',
1104
- nestedCues: [],
1105
- },
1106
- ],
1107
- 'WEBVTT\n\n' +
1108
- '00:00:20.000 --> 00:00:40.000\n' +
1109
- '<c.yellow>Test</c>\n\n' +
1110
- '00:00:40.000 --> 00:00:50.000\n' +
1111
- '<c.cyan.bg_blue>Test2</c>\n\n' +
1112
- '00:00:50.000 --> 00:01:00.000\n' +
1113
- '<c.yellow.bg_blue.magenta.bg_black>Test 3</c>\n\n' +
1114
- '00:01:00.000 --> 00:01:10.000\n' +
1115
- 'First row<c.yellow>Test4.1</c>\nSecond row<c.blue>Test4.2</c>\n\n' +
1116
- '00:01:10.000 --> 00:01:20.000\n' +
1117
- '<c.red>Test5.1<c.lime>Test5.2</c></c>\n\n' +
1118
- '00:01:20.000 --> 00:01:30.000\n' +
1119
- '<b><c.lime>Parse fail 1</b></c>\n\n' +
1120
- '00:01:30.000 --> 00:01:40.000\n' +
1121
- '<c.lime><b>Parse fail 2</c></b>\n\n' +
1122
- '00:01:40.000 --> 00:01:50.000\n' +
1123
- '<c.lime>forward slash 1/2 in text</c>\n\n' +
1124
- '00:01:50.000 --> 00:02:00.000\n' +
1125
- '<c.lime>less or more < > in text</c>',
1126
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
1127
- });
1128
-
1129
- it('supports karaoke style text', () => {
1130
- verifyHelper(
1131
- [
1132
- {
1133
- startTime: 20, endTime: 40,
1134
- payload: '',
1135
- nestedCues: [
1136
- {
1137
- startTime: 20,
1138
- endTime: 40,
1139
- payload: 'Test',
1140
- },
1141
- {
1142
- startTime: 25,
1143
- endTime: 40,
1144
- payload: ' 1',
1145
- },
1146
- ],
1147
- },
1148
- ],
1149
- 'WEBVTT\n\n' +
1150
- '00:00:20.00 --> 00:00:40.00\n' +
1151
- 'Test<00:00:25.00> 1',
1152
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
1153
- });
1154
-
1155
- it('supports voice style blocks', () => {
1156
- verifyHelper(
1157
- [
1158
- {
1159
- startTime: 20,
1160
- endTime: 40,
1161
- payload: '',
1162
- nestedCues: [
1163
- {
1164
- startTime: 20,
1165
- endTime: 40,
1166
- payload: 'Test',
1167
- color: 'cyan',
1168
- },
1169
- ],
1170
- },
1171
- {
1172
- startTime: 40,
1173
- endTime: 50,
1174
- payload: '',
1175
- nestedCues: [
1176
- {
1177
- startTime: 40,
1178
- endTime: 50,
1179
- payload: 'Test',
1180
- color: 'red',
1181
- },
1182
- {
1183
- startTime: 40,
1184
- endTime: 50,
1185
- payload: '2',
1186
- fontStyle: Cue.fontStyle.ITALIC,
1187
- },
1188
- ],
1189
- },
1190
- ],
1191
- 'WEBVTT\n\n' +
1192
- 'STYLE\n' +
1193
- '::cue(v[voice="Shaka"]) { color: cyan; }\n' +
1194
- '::cue(v[voice=ShakaBis]) { color: red; }\n\n' +
1195
- '00:00:20.000 --> 00:00:40.000\n' +
1196
- '<v Shaka>Test\n\n' +
1197
- '00:00:40.000 --> 00:00:50.000\n' +
1198
- '<v ShakaBis>Test</v><i>2</i>',
1199
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
1200
- });
1201
-
1202
- it('supports default color overriding', () => {
1203
- verifyHelper(
1204
- [
1205
- {
1206
- startTime: 10, endTime: 20,
1207
- payload: '',
1208
- nestedCues: [
1209
- {
1210
- startTime: 10,
1211
- endTime: 20,
1212
- payload: 'Example 1',
1213
- color: 'red',
1214
- backgroundColor: 'yellow',
1215
- fontSize: '10px',
1216
- },
1217
- ],
1218
- },
1219
- ],
1220
- 'WEBVTT\n\n' +
1221
- 'STYLE\n' +
1222
- '::cue(.bg_blue) { font-size: 10px; background-color: yellow }\n\n' +
1223
- '00:00:10.000 --> 00:00:20.000\n' +
1224
- '<c.red.bg_blue>Example 1</c>\n\n',
1225
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
1226
- });
1227
-
1228
- // https://github.com/shaka-project/shaka-player/issues/4479
1229
- it('keep styles when there are line breaks', () => {
1230
- verifyHelper(
1231
- [
1232
- {
1233
- startTime: 10, endTime: 20,
1234
- payload: '',
1235
- nestedCues: [
1236
- {
1237
- startTime: 10,
1238
- endTime: 20,
1239
- payload: '1',
1240
- color: 'magenta',
1241
- },
1242
- {
1243
- startTime: 10,
1244
- endTime: 20,
1245
- payload: '',
1246
- lineBreak: true,
1247
- },
1248
- {
1249
- startTime: 10,
1250
- endTime: 20,
1251
- payload: '',
1252
- color: 'magenta',
1253
- nestedCues: [
1254
- {
1255
- startTime: 10,
1256
- endTime: 20,
1257
- payload: '2',
1258
- color: 'magenta',
1259
- fontStyle: Cue.fontStyle.ITALIC,
1260
- },
1261
- ],
1262
- },
1263
- ],
1264
- },
1265
- ],
1266
- 'WEBVTT\n\n' +
1267
- '00:00:10.000 --> 00:00:20.000\n' +
1268
- '<c.magenta>1</c><br/><c.magenta><i>2</i></c>\n\n',
1269
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
1270
- });
1271
-
1272
- it('does not fail on REGION blocks', () => {
1273
- verifyHelper(
1274
- [
1275
- {
1276
- startTime: 10, endTime: 20,
1277
- payload: 'test',
1278
- },
1279
- ],
1280
- 'WEBVTT\n\n' +
1281
- 'REGION\n' +
1282
- 'id:1\n\n' +
1283
- '00:00:10.000 --> 00:00:20.000\n' +
1284
- 'test\n\n',
1285
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
1286
- });
1287
-
1288
- it('supports an extra newline inside the cue body', () => {
1289
- verifyHelper(
1290
- [
1291
- {startTime: 20, endTime: 40, payload: 'Test'},
1292
- {startTime: 40, endTime: 50, payload: 'Test2'},
1293
- ],
1294
- 'WEBVTT\n\n' +
1295
- '00:00:20.000 --> 00:00:40.000\n' +
1296
- 'Test\n\nExtra line\n\n' +
1297
- '00:00:40.000 --> 00:00:50.000\n' +
1298
- 'Test2',
1299
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
1300
- });
1301
-
1302
- it('supports an extra newline before the cue body', () => {
1303
- verifyHelper(
1304
- [
1305
- {startTime: 20, endTime: 40, payload: ''},
1306
- {startTime: 40, endTime: 50, payload: 'Test2'},
1307
- ],
1308
- 'WEBVTT\n\n' +
1309
- '00:00:20.000 --> 00:00:40.000\n' +
1310
- '\nTest\n\n' +
1311
- '00:00:40.000 --> 00:00:50.000\n' +
1312
- 'Test2',
1313
- {periodStart: 0, segmentStart: 0, segmentEnd: 0, vttOffset: 0});
1314
- });
1315
-
1316
- /**
1317
- * @param {!Array} cues
1318
- * @param {string} text
1319
- * @param {shaka.extern.TextParser.TimeContext} time
1320
- * @param {boolean=} sequenceMode
1321
- */
1322
- function verifyHelper(cues, text, time, sequenceMode = false) {
1323
- const data =
1324
- shaka.util.BufferUtils.toUint8(shaka.util.StringUtils.toUTF8(text));
1325
- const parser = new shaka.text.VttTextParser();
1326
- parser.setSequenceMode(sequenceMode);
1327
- const result = parser.parseMedia(data, time);
1328
-
1329
- const checkCue = (cue) => {
1330
- if (cue.nestedCues) {
1331
- cue.nestedCues = cue.nestedCues.map((nestedCue) => checkCue(nestedCue));
1332
- }
1333
- return jasmine.objectContaining(cue);
1334
- };
1335
-
1336
- const expected = cues.map(checkCue);
1337
- expect(result).toEqual(expected);
1338
- }
1339
-
1340
- /**
1341
- * @param {shaka.util.Error.Code} code
1342
- * @param {string} text
1343
- * @param {shaka.extern.TextParser.TimeContext} time
1344
- * @param {*=} errorData
1345
- */
1346
- function errorHelper(code, text, time, errorData = undefined) {
1347
- let shakaError;
1348
- if (errorData) {
1349
- shakaError = new shaka.util.Error(
1350
- shaka.util.Error.Severity.CRITICAL, shaka.util.Error.Category.TEXT,
1351
- code, errorData);
1352
- } else {
1353
- shakaError = new shaka.util.Error(
1354
- shaka.util.Error.Severity.CRITICAL, shaka.util.Error.Category.TEXT,
1355
- code);
1356
- }
1357
- const error = shaka.test.Util.jasmineError(shakaError);
1358
- const data =
1359
- shaka.util.BufferUtils.toUint8(shaka.util.StringUtils.toUTF8(text));
1360
- expect(() => new shaka.text.VttTextParser().parseMedia(data, time))
1361
- .toThrow(error);
1362
- }
1363
- });