shaka-player 3.3.2 → 4.0.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 (389) hide show
  1. package/.csslintrc +11 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  3. package/.github/pull_request_template.md +6 -34
  4. package/.github/workflows/build-and-test.yaml +129 -0
  5. package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +56 -0
  6. package/.github/workflows/custom-actions/set-commit-status/action.yaml +41 -0
  7. package/.github/workflows/demo-version-index.yaml +37 -0
  8. package/.github/workflows/nightly-demo.yaml +42 -0
  9. package/.github/workflows/release-please.yaml +168 -0
  10. package/.github/workflows/safari-homedir-launcher.sh +18 -0
  11. package/.github/workflows/selenium-lab-tests.yaml +92 -0
  12. package/.github/workflows/sync-labels.yaml +33 -0
  13. package/.github/workflows/update-issues.yaml +29 -0
  14. package/.github/workflows/validate-pr-title.yaml +35 -0
  15. package/AUTHORS +3 -0
  16. package/CHANGELOG.md +1866 -1675
  17. package/CONTRIBUTING.md +2 -2
  18. package/CONTRIBUTORS +3 -0
  19. package/README.md +16 -13
  20. package/app-engine/README.md +9 -0
  21. package/app-engine/demo-version-index/README.md +14 -0
  22. package/app-engine/demo-version-index/app.yaml +28 -0
  23. package/app-engine/demo-version-index/generate.py +164 -0
  24. package/app-engine/demo-version-index/main.py +11 -0
  25. package/app-engine/demo-version-index/requirements.txt +5 -0
  26. package/app-engine/demo-version-index/templates/index.html +114 -0
  27. package/app-engine/shaka-player-demo/README.md +18 -0
  28. package/app-engine/shaka-player-demo/app.yaml +61 -0
  29. package/app-engine/shaka-player-demo/main.py +95 -0
  30. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  31. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  32. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  33. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  34. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  35. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  36. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  37. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  38. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  39. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  40. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  41. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  42. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  43. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  44. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  45. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  46. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  47. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  48. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  49. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  50. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  51. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  52. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  53. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  54. package/app-engine/shaka-player-demo/posters/sources.txt +46 -0
  55. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  56. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  57. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  58. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  59. package/app-engine/shaka-player-demo/posters.py +110 -0
  60. package/app-engine/shaka-player-demo/requirements.txt +5 -0
  61. package/app-engine/shaka-player-demo/time.txt +1 -0
  62. package/build/README.md +3 -3
  63. package/build/checkversion.py +1 -1
  64. package/build/compiler.py +1 -1
  65. package/build/conformance.textproto +13 -0
  66. package/build/docker/Dockerfile +20 -0
  67. package/build/docker/docker-compose.yml +10 -0
  68. package/build/gendeps.py +18 -15
  69. package/build/shaka-lab.yaml +161 -0
  70. package/build/shakaBuildHelpers.py +4 -29
  71. package/build/test.py +94 -29
  72. package/build/types/core +0 -1
  73. package/build/types/polyfill +1 -3
  74. package/build/wrapper.template.js +2 -2
  75. package/demo/TengwarTelcontar.woff2 +0 -0
  76. package/demo/asset_card.js +1 -2
  77. package/demo/cast_receiver/index.html +1 -1
  78. package/demo/cast_receiver/receiver_app.css +14 -14
  79. package/demo/common/asset.js +17 -1
  80. package/demo/common/assets.js +31 -0
  81. package/demo/common/message_ids.js +6 -3
  82. package/demo/config.js +10 -12
  83. package/demo/custom.js +39 -1
  84. package/demo/customWarning.txt +2 -2
  85. package/demo/demo.less +29 -18
  86. package/demo/demo_uncompiled.js +1 -13
  87. package/demo/demo_utils.js +0 -1
  88. package/demo/index.html +1 -1
  89. package/demo/locales/en.json +6 -3
  90. package/demo/locales/source.json +22 -10
  91. package/demo/main.js +12 -9
  92. package/demo/search.js +2 -1
  93. package/dist/controls.css +3 -3
  94. package/dist/controls.css.map +1 -1
  95. package/dist/demo.compiled.debug.js +236 -232
  96. package/dist/demo.compiled.debug.map +4 -4
  97. package/dist/demo.compiled.js +236 -232
  98. package/dist/demo.compiled.map +4 -4
  99. package/dist/demo.css +1 -1
  100. package/dist/demo.css.map +1 -1
  101. package/dist/deps.js +229 -226
  102. package/dist/locales.js +34 -32
  103. package/dist/receiver.compiled.debug.js +75 -73
  104. package/dist/receiver.compiled.debug.map +4 -4
  105. package/dist/receiver.compiled.js +75 -73
  106. package/dist/receiver.compiled.map +4 -4
  107. package/dist/shaka-player.compiled.d.ts +321 -314
  108. package/dist/shaka-player.compiled.debug.d.ts +321 -314
  109. package/dist/shaka-player.compiled.debug.externs.js +140 -129
  110. package/dist/shaka-player.compiled.debug.js +527 -592
  111. package/dist/shaka-player.compiled.debug.map +4 -4
  112. package/dist/shaka-player.compiled.externs.js +140 -129
  113. package/dist/shaka-player.compiled.js +836 -860
  114. package/dist/shaka-player.compiled.map +4 -4
  115. package/dist/shaka-player.ui.d.ts +367 -358
  116. package/dist/shaka-player.ui.debug.d.ts +367 -358
  117. package/dist/shaka-player.ui.debug.externs.js +148 -129
  118. package/dist/shaka-player.ui.debug.js +586 -649
  119. package/dist/shaka-player.ui.debug.map +4 -4
  120. package/dist/shaka-player.ui.externs.js +148 -129
  121. package/dist/shaka-player.ui.js +1008 -1028
  122. package/dist/shaka-player.ui.map +4 -4
  123. package/docs/design/REDESIGN.md +33 -33
  124. package/docs/design/bg-fetch.md +2 -2
  125. package/docs/design/codec_preferences.md +1 -1
  126. package/docs/design/dash-audio-channels.md +3 -3
  127. package/docs/design/dash-manifests.md +1 -1
  128. package/docs/design/gap-jumping.md +3 -3
  129. package/docs/design/preload.md +2 -2
  130. package/docs/tutorials/config.md +0 -2
  131. package/docs/tutorials/drm-config.md +5 -0
  132. package/docs/tutorials/fairplay.md +7 -22
  133. package/docs/tutorials/faq.md +8 -19
  134. package/docs/tutorials/index.json +3 -8
  135. package/docs/tutorials/plugins.md +4 -6
  136. package/docs/tutorials/selenium-grid-config.md +122 -0
  137. package/docs/tutorials/upgrade.md +83 -11
  138. package/docs/tutorials/welcome.md +10 -2
  139. package/externs/cmcd.js +1 -1
  140. package/externs/polyfill.js +15 -0
  141. package/externs/shaka/manifest.js +5 -1
  142. package/externs/shaka/net.js +12 -0
  143. package/externs/shaka/offline.js +5 -1
  144. package/externs/shaka/player.js +39 -32
  145. package/externs/shaka/text.js +12 -12
  146. package/externs/sourcebuffer.js +15 -0
  147. package/karma.conf.js +137 -30
  148. package/lib/abr/simple_abr_manager.js +12 -6
  149. package/lib/ads/client_side_ad.js +13 -2
  150. package/lib/ads/client_side_ad_manager.js +22 -4
  151. package/lib/cast/cast_proxy.js +3 -4
  152. package/lib/cast/cast_utils.js +0 -1
  153. package/lib/cea/cea608_data_channel.js +2 -2
  154. package/lib/cea/cea708_service.js +5 -4
  155. package/lib/cea/mp4_cea_parser.js +11 -5
  156. package/lib/cea/sei_processor.js +6 -3
  157. package/lib/dash/content_protection.js +85 -5
  158. package/lib/dash/dash_parser.js +10 -12
  159. package/lib/dash/mpd_utils.js +4 -5
  160. package/lib/dash/segment_list.js +1 -2
  161. package/lib/dash/segment_template.js +3 -3
  162. package/lib/hls/hls_parser.js +386 -749
  163. package/lib/hls/manifest_text_parser.js +5 -6
  164. package/lib/media/adaptation_set.js +1 -2
  165. package/lib/media/content_workarounds.js +2 -2
  166. package/lib/media/drm_engine.js +105 -55
  167. package/lib/media/gap_jumping_controller.js +10 -45
  168. package/lib/media/media_source_engine.js +90 -17
  169. package/lib/media/mp4_segment_index_parser.js +1 -4
  170. package/lib/media/playhead.js +4 -7
  171. package/lib/media/presentation_timeline.js +19 -10
  172. package/lib/media/segment_index.js +13 -46
  173. package/lib/media/segment_reference.js +47 -1
  174. package/lib/media/streaming_engine.js +35 -17
  175. package/lib/media/time_ranges_utils.js +5 -12
  176. package/lib/media/video_wrapper.js +1 -1
  177. package/lib/net/networking_engine.js +4 -1
  178. package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
  179. package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
  180. package/lib/offline/manifest_converter.js +1 -0
  181. package/lib/offline/storage.js +104 -136
  182. package/lib/player.js +50 -216
  183. package/lib/polyfill/all.js +2 -3
  184. package/lib/polyfill/encryption_scheme.js +1 -1
  185. package/lib/polyfill/media_capabilities.js +15 -9
  186. package/lib/polyfill/mediasource.js +0 -28
  187. package/lib/polyfill/patchedmediakeys_nop.js +2 -0
  188. package/lib/polyfill/patchedmediakeys_webkit.js +2 -0
  189. package/lib/polyfill/symbol.js +46 -0
  190. package/lib/text/cue.js +1 -7
  191. package/lib/text/lrc_text_parser.js +8 -0
  192. package/lib/text/mp4_ttml_parser.js +8 -0
  193. package/lib/text/mp4_vtt_parser.js +8 -0
  194. package/lib/text/sbv_text_parser.js +8 -0
  195. package/lib/text/simple_text_displayer.js +3 -8
  196. package/lib/text/srt_text_parser.js +8 -0
  197. package/lib/text/ssa_text_parser.js +8 -0
  198. package/lib/text/text_engine.js +19 -3
  199. package/lib/text/ttml_text_parser.js +16 -5
  200. package/lib/text/ui_text_displayer.js +2 -8
  201. package/lib/text/vtt_text_parser.js +24 -2
  202. package/lib/text/web_vtt_generator.js +1 -7
  203. package/lib/util/buffer_utils.js +1 -3
  204. package/lib/util/ebml_parser.js +3 -3
  205. package/lib/util/error.js +10 -14
  206. package/lib/util/fairplay_utils.js +109 -0
  207. package/lib/util/functional.js +0 -42
  208. package/lib/util/iterables.js +0 -46
  209. package/lib/util/mime_utils.js +2 -0
  210. package/lib/util/mp4_box_parsers.js +1 -4
  211. package/lib/util/mp4_parser.js +5 -7
  212. package/lib/util/periods.js +10 -11
  213. package/lib/util/platform.js +48 -3
  214. package/lib/util/player_configuration.js +12 -6
  215. package/lib/util/pssh.js +24 -8
  216. package/lib/util/stream_utils.js +96 -25
  217. package/lib/util/string_utils.js +3 -5
  218. package/lib/util/uint8array_utils.js +3 -21
  219. package/lib/util/xml_utils.js +16 -8
  220. package/package.json +61 -36
  221. package/roadmap.md +27 -27
  222. package/shaka-player.uncompiled.js +1 -3
  223. package/test/abr/simple_abr_manager_unit.js +3 -8
  224. package/test/ads/ad_manager_unit.js +0 -6
  225. package/test/cast/cast_proxy_unit.js +0 -8
  226. package/test/cast/cast_receiver_integration.js +1 -18
  227. package/test/cast/cast_receiver_unit.js +1 -9
  228. package/test/cast/cast_sender_unit.js +0 -6
  229. package/test/cast/cast_utils_unit.js +1 -13
  230. package/test/cea/cea608_memory_unit.js +0 -5
  231. package/test/cea/cea708_service_unit.js +0 -7
  232. package/test/cea/cea708_window_unit.js +0 -5
  233. package/test/cea/cea_decoder_unit.js +0 -6
  234. package/test/cea/dtvcc_packet_builder_unit.js +0 -3
  235. package/test/cea/dtvcc_packet_unit.js +0 -5
  236. package/test/cea/mp4_cea_parser_unit.js +0 -4
  237. package/test/dash/dash_parser_content_protection_unit.js +45 -10
  238. package/test/dash/dash_parser_live_unit.js +2 -15
  239. package/test/dash/dash_parser_manifest_unit.js +2 -40
  240. package/test/dash/dash_parser_segment_base_unit.js +1 -8
  241. package/test/dash/dash_parser_segment_list_unit.js +1 -7
  242. package/test/dash/dash_parser_segment_template_unit.js +3 -13
  243. package/test/dash/mpd_utils_unit.js +3 -11
  244. package/test/demo/demo_unit.js +2 -6
  245. package/test/deprecate/enforcer_unit.js +0 -4
  246. package/test/deprecate/version_unit.js +0 -2
  247. package/test/hls/hls_live_unit.js +101 -234
  248. package/test/hls/hls_parser_unit.js +517 -447
  249. package/test/hls/manifest_text_parser_unit.js +0 -10
  250. package/test/media/adaptation_set_criteria_unit.js +3 -7
  251. package/test/media/adaptation_set_unit.js +0 -2
  252. package/test/media/buffering_observer_unit.js +1 -4
  253. package/test/media/closed_caption_parser_unit.js +0 -3
  254. package/test/media/drm_engine_integration.js +2 -15
  255. package/test/media/drm_engine_unit.js +90 -144
  256. package/test/media/manifest_parser_unit.js +0 -4
  257. package/test/media/media_source_engine_integration.js +26 -10
  258. package/test/media/media_source_engine_unit.js +8 -20
  259. package/test/media/mp4_segment_index_parser_unit.js +0 -4
  260. package/test/media/play_rate_controller_unit.js +0 -4
  261. package/test/media/playhead_unit.js +35 -207
  262. package/test/media/presentation_timeline_unit.js +4 -7
  263. package/test/media/quality_observer_unit.js +0 -4
  264. package/test/media/region_observer_unit.js +1 -6
  265. package/test/media/region_timeline_unit.js +0 -3
  266. package/test/media/segment_index_unit.js +15 -31
  267. package/test/media/segment_reference_unit.js +0 -3
  268. package/test/media/stall_detector_unit.js +0 -5
  269. package/test/media/streaming_engine_integration.js +13 -75
  270. package/test/media/streaming_engine_unit.js +14 -37
  271. package/test/media/time_ranges_utils_unit.js +0 -7
  272. package/test/media/transmuxer_integration.js +0 -6
  273. package/test/media/webm_segment_index_parser_unit.js +0 -4
  274. package/test/net/data_uri_plugin_unit.js +0 -7
  275. package/test/net/http_plugin_unit.js +0 -9
  276. package/test/net/networking_engine_unit.js +0 -11
  277. package/test/offline/download_progress_estimator_unit.js +0 -2
  278. package/test/offline/indexeddb_storage_unit.js +0 -6
  279. package/test/offline/manifest_convert_unit.js +34 -12
  280. package/test/offline/offline_integration.js +1 -10
  281. package/test/offline/offline_manifest_parser_unit.js +1 -6
  282. package/test/offline/offline_scheme_unit.js +0 -8
  283. package/test/offline/offline_uri_unit.js +0 -2
  284. package/test/offline/storage_compatibility_unit.js +1 -14
  285. package/test/offline/storage_integration.js +6 -31
  286. package/test/player_external.js +1 -15
  287. package/test/player_integration.js +38 -28
  288. package/test/player_load_graph_integration.js +1 -6
  289. package/test/player_src_equals_external.js +3 -9
  290. package/test/player_src_equals_integration.js +0 -7
  291. package/test/player_unit.js +78 -37
  292. package/test/routing/walker_unit.js +0 -8
  293. package/test/test/assets/large_file.mpd +1 -1
  294. package/test/test/boot.js +75 -22
  295. package/test/test/externs/jasmine.js +2 -2
  296. package/test/test/externs/karma.js +4 -0
  297. package/test/test/namespace.js +10 -0
  298. package/test/test/util/canned_idb.js +0 -8
  299. package/test/test/util/cea_utils.js +0 -6
  300. package/test/test/util/dash_parser_util.js +0 -13
  301. package/test/test/util/fake_ad.js +0 -3
  302. package/test/test/util/fake_ad_manager.js +0 -9
  303. package/test/test/util/fake_demo_main.js +0 -5
  304. package/test/test/util/fake_drm_engine.js +0 -6
  305. package/test/test/util/fake_media_source_engine.js +11 -11
  306. package/test/test/util/fake_networking_engine.js +0 -5
  307. package/test/test/util/fake_text_displayer.js +0 -5
  308. package/test/test/util/indexeddb_utils.js +1 -10
  309. package/test/test/util/jasmine_fetch.js +0 -1
  310. package/test/test/util/loader.js +0 -18
  311. package/test/test/util/manifest_generator.js +12 -15
  312. package/test/test/util/manifest_parser_util.js +4 -7
  313. package/test/test/util/offline_utils.js +1 -5
  314. package/test/test/util/simple_fakes.js +9 -26
  315. package/test/test/util/stream_generator.js +0 -14
  316. package/test/test/util/streaming_engine_util.js +1 -15
  317. package/test/test/util/test_scheme.js +25 -20
  318. package/test/test/util/ttml_utils.js +0 -2
  319. package/test/test/util/ui_utils.js +0 -9
  320. package/test/test/util/util.js +9 -23
  321. package/test/test/util/waiter.js +84 -43
  322. package/test/text/cue_integration.js +2 -6
  323. package/test/text/lrc_text_parser_unit.js +6 -11
  324. package/test/text/mp4_ttml_parser_unit.js +6 -10
  325. package/test/text/mp4_vtt_parser_unit.js +7 -12
  326. package/test/text/sbv_text_parser_unit.js +5 -10
  327. package/test/text/simple_text_displayer_unit.js +1 -8
  328. package/test/text/srt_text_parser_unit.js +5 -10
  329. package/test/text/ssa_text_parser_unit.js +17 -34
  330. package/test/text/text_engine_unit.js +47 -12
  331. package/test/text/text_track_integration.js +0 -2
  332. package/test/text/ttml_text_parser_unit.js +79 -88
  333. package/test/text/ui_text_displayer_unit.js +44 -41
  334. package/test/text/vtt_text_parser_unit.js +55 -66
  335. package/test/text/web_vtt_generator_unit.js +0 -3
  336. package/test/ui/ad_ui_unit.js +0 -11
  337. package/test/ui/localization_unit.js +0 -3
  338. package/test/ui/text_displayer_layout_unit.js +1 -12
  339. package/test/ui/ui_customization_unit.js +0 -6
  340. package/test/ui/ui_integration.js +0 -32
  341. package/test/ui/ui_unit.js +28 -17
  342. package/test/util/abortable_operation_unit.js +4 -9
  343. package/test/util/array_utils_unit.js +0 -2
  344. package/test/util/buffer_utils_unit.js +0 -2
  345. package/test/util/cmcd_manager_unit.js +3 -3
  346. package/test/util/data_view_reader_unit.js +0 -4
  347. package/test/util/ebml_parser_unit.js +0 -4
  348. package/test/util/event_manager_unit.js +0 -3
  349. package/test/util/fake_event_target_unit.js +0 -5
  350. package/test/util/iterables_unit.js +0 -64
  351. package/test/util/language_utils_unit.js +0 -3
  352. package/test/util/manifest_parser_utils_unit.js +0 -2
  353. package/test/util/mp4_box_parsers_unit.js +0 -5
  354. package/test/util/mp4_parser_unit.js +0 -4
  355. package/test/util/multi_map_unit.js +0 -3
  356. package/test/util/object_utils_unit.js +0 -2
  357. package/test/util/periods_unit.js +14 -7
  358. package/test/util/pssh_unit.js +0 -5
  359. package/test/util/state_history_unit.js +0 -2
  360. package/test/util/stream_utils_unit.js +26 -15
  361. package/test/util/string_utils_unit.js +0 -6
  362. package/test/util/text_parser_unit.js +0 -2
  363. package/test/util/xml_utils_unit.js +0 -4
  364. package/ui/controls.js +65 -40
  365. package/ui/fullscreen_button.js +26 -6
  366. package/ui/less/ad_controls.less +6 -6
  367. package/ui/less/buttons.less +6 -6
  368. package/ui/less/containers.less +10 -12
  369. package/ui/less/overflow_menu.less +4 -4
  370. package/ui/less/range_elements.less +7 -2
  371. package/ui/less/tooltip.less +4 -4
  372. package/ui/locales/en.json +1 -0
  373. package/ui/locales/sjn-translations.yaml +257 -0
  374. package/ui/locales/sjn.json +42 -0
  375. package/ui/locales/source.json +5 -0
  376. package/ui/resolution_selection.js +31 -33
  377. package/ui/seek_bar.js +2 -1
  378. package/ui/ui.js +0 -17
  379. package/.github/workflows/build_and_test.yaml +0 -73
  380. package/.github/workflows/release.yaml +0 -53
  381. package/docs/tutorials/upgrade-v2-5.md +0 -441
  382. package/docs/tutorials/upgrade-v3.md +0 -38
  383. package/externs/svgelement.js +0 -18
  384. package/externs/webcrypto.js +0 -18
  385. package/lib/polyfill/mathround.js +0 -49
  386. package/lib/polyfill/patchedmediakeys_apple.js +0 -744
  387. package/lib/polyfill/patchedmediakeys_ms.js +0 -698
  388. package/lib/util/mutex.js +0 -52
  389. package/test/util/functional_unit.js +0 -82
@@ -4,18 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- goog.require('goog.asserts');
8
- goog.require('shaka.hls.HlsParser');
9
- goog.require('shaka.net.NetworkingEngine');
10
- goog.require('shaka.test.FakeNetworkingEngine');
11
- goog.require('shaka.test.ManifestParser');
12
- goog.require('shaka.test.Util');
13
- goog.require('shaka.util.Functional');
14
- goog.require('shaka.util.Iterables');
15
- goog.require('shaka.util.PlayerConfiguration');
16
- goog.require('shaka.util.Uint8ArrayUtils');
17
- goog.requireType('shaka.util.PublicPromise');
18
-
19
7
  describe('HlsParser live', () => {
20
8
  const ManifestParser = shaka.test.ManifestParser;
21
9
 
@@ -40,14 +28,6 @@ describe('HlsParser live', () => {
40
28
  let segmentData;
41
29
  /** @type {!Uint8Array} */
42
30
  let selfInitializingSegmentData;
43
- /** @type {!Uint8Array} */
44
- let tsSegmentData;
45
- /** @type {!Uint8Array} */
46
- let pastRolloverSegmentData;
47
- /** @type {number} */
48
- let rolloverOffset;
49
- /** @type {number} */
50
- let segmentDataStartTime;
51
31
 
52
32
  beforeEach(() => {
53
33
  // TODO: use StreamGenerator?
@@ -78,36 +58,6 @@ describe('HlsParser live', () => {
78
58
  0x00, 0x00, 0x00, 0x00, // baseMediaDecodeTime first 4 bytes
79
59
  0x00, 0x00, 0x07, 0xd0, // baseMediaDecodeTime last 4 bytes (2000)
80
60
  ]);
81
- tsSegmentData = new Uint8Array([
82
- 0x47, // TS sync byte (fixed value)
83
- 0x41, 0x01, // not corrupt, payload follows, packet ID 257
84
- 0x10, // not scrambled, no adaptation field, payload only, seq #0
85
- 0x00, 0x00, 0x01, // PES start code (fixed value)
86
- 0xe0, // stream ID (video stream 0)
87
- 0x00, 0x00, // PES packet length (doesn't matter)
88
- 0x80, // marker bits (fixed value), not scrambled, not priority
89
- 0x80, // PTS only, no DTS, other flags 0 (don't matter)
90
- 0x05, // remaining PES header length == 5 (one timestamp)
91
- 0x21, 0x00, 0x0b, 0x7e, 0x41, // PTS = 180000, encoded into 5 bytes
92
- ]);
93
- // 180000 divided by TS timescale (90000) = segment starts at 2s.
94
- segmentDataStartTime = 2;
95
-
96
- pastRolloverSegmentData = new Uint8Array([
97
- 0x00, 0x00, 0x00, 0x24, // size (36)
98
- 0x6D, 0x6F, 0x6F, 0x66, // type (moof)
99
- 0x00, 0x00, 0x00, 0x1C, // traf size (28)
100
- 0x74, 0x72, 0x61, 0x66, // type (traf)
101
- 0x00, 0x00, 0x00, 0x14, // tfdt size (20)
102
- 0x74, 0x66, 0x64, 0x74, // type (tfdt)
103
- 0x01, 0x00, 0x00, 0x00, // version and flags
104
- 0x00, 0x00, 0x00, 0x00, // baseMediaDecodeTime first 4 bytes
105
- 0x0b, 0x60, 0xbc, 0x28, // baseMediaDecodeTime last 4 bytes (190889000)
106
- ]);
107
-
108
- // The timestamp above would roll over twice, so this rollover offset should
109
- // be applied.
110
- rolloverOffset = (0x200000000 * 2) / 90000;
111
61
 
112
62
  selfInitializingSegmentData =
113
63
  shaka.util.Uint8ArrayUtils.concat(initSegmentData, segmentData);
@@ -233,8 +183,10 @@ describe('HlsParser live', () => {
233
183
 
234
184
  describe('update', () => {
235
185
  it('adds new segments when they appear', async () => {
236
- const ref1 = ManifestParser.makeReference('test:/main.mp4', 2, 4);
237
- const ref2 = ManifestParser.makeReference('test:/main2.mp4', 4, 6);
186
+ const ref1 = makeReference(
187
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
188
+ const ref2 = makeReference(
189
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
238
190
 
239
191
  await testUpdate(
240
192
  master, media, [ref1], mediaWithAdditionalSegment, [ref1, ref2]);
@@ -248,8 +200,10 @@ describe('HlsParser live', () => {
248
200
  ].join('');
249
201
 
250
202
  const masterWithTwoVariants = master + secondVariant;
251
- const ref1 = ManifestParser.makeReference('test:/main.mp4', 2, 4);
252
- const ref2 = ManifestParser.makeReference('test:/main2.mp4', 4, 6);
203
+ const ref1 = makeReference(
204
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
205
+ const ref2 = makeReference(
206
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
253
207
 
254
208
  await testUpdate(
255
209
  masterWithTwoVariants, media, [ref1], mediaWithAdditionalSegment,
@@ -269,8 +223,10 @@ describe('HlsParser live', () => {
269
223
  ].join('');
270
224
 
271
225
  const masterWithAudio = masterlist + audio;
272
- const ref1 = ManifestParser.makeReference('test:/main.mp4', 2, 4);
273
- const ref2 = ManifestParser.makeReference('test:/main2.mp4', 4, 6);
226
+ const ref1 = makeReference(
227
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
228
+ const ref2 = makeReference(
229
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
274
230
 
275
231
  await testUpdate(
276
232
  masterWithAudio, media, [ref1], mediaWithAdditionalSegment,
@@ -290,9 +246,12 @@ describe('HlsParser live', () => {
290
246
 
291
247
  const updatedMedia1 = media + newSegment1;
292
248
  const updatedMedia2 = updatedMedia1 + newSegment2;
293
- const ref1 = ManifestParser.makeReference('test:/main.mp4', 2, 4);
294
- const ref2 = ManifestParser.makeReference('test:/main2.mp4', 4, 6);
295
- const ref3 = ManifestParser.makeReference('test:/main3.mp4', 6, 8);
249
+ const ref1 = makeReference(
250
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
251
+ const ref2 = makeReference(
252
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
253
+ const ref3 = makeReference(
254
+ 'test:/main3.mp4', 4, 6, /* syncTime= */ null);
296
255
 
297
256
  fakeNetEngine
298
257
  .setResponseText('test:/master', master)
@@ -398,19 +357,6 @@ describe('HlsParser live', () => {
398
357
  'main.mp4\n',
399
358
  ].join('');
400
359
 
401
- const mediaWithByteRange = [
402
- '#EXTM3U\n',
403
- '#EXT-X-TARGETDURATION:5\n',
404
- '#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
405
- '#EXT-X-MEDIA-SEQUENCE:0\n',
406
- '#EXT-X-BYTERANGE:121090@616\n',
407
- '#EXTINF:2,\n',
408
- 'main.mp4\n',
409
- ].join('');
410
-
411
- const expectedStartByte = 616;
412
- const expectedEndByte = 121705;
413
-
414
360
  const mediaWithAdditionalSegment = [
415
361
  '#EXTM3U\n',
416
362
  '#EXT-X-TARGETDURATION:5\n',
@@ -437,8 +383,8 @@ describe('HlsParser live', () => {
437
383
  '#EXT-X-MAP:URI="init.mp4",BYTERANGE="616@0"\n',
438
384
  '#EXT-X-MEDIA-SEQUENCE:0\n',
439
385
  ].join('');
440
- for (const _ of shaka.util.Iterables.range(1000)) {
441
- shaka.util.Functional.ignored(_);
386
+
387
+ for (let i = 0; i < 1000; i++) {
442
388
  mediaWithManySegments += '#EXTINF:2,\n';
443
389
  mediaWithManySegments += 'main.mp4\n';
444
390
  }
@@ -575,17 +521,17 @@ describe('HlsParser live', () => {
575
521
  .setResponseValue('test:/main.mp4', segmentData)
576
522
  .setResponseValue('test:/main2.mp4', segmentData);
577
523
 
578
- const ref1 = ManifestParser.makeReference(
579
- 'test:/main.mp4', segmentDataStartTime, segmentDataStartTime + 2,
524
+ const ref1 = makeReference(
525
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null,
580
526
  /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ null,
581
527
  /* timestampOffset= */ 0);
582
528
 
583
529
  // Expect the timestamp offset to be set for the segment after the
584
530
  // EXT-X-DISCONTINUITY tag.
585
- const ref2 = ManifestParser.makeReference(
586
- 'test:/main2.mp4', segmentDataStartTime + 2, segmentDataStartTime + 4,
531
+ const ref2 = makeReference(
532
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null,
587
533
  /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ null,
588
- /* timestampOffset= */ 2);
534
+ /* timestampOffset= */ 0);
589
535
 
590
536
  const manifest = await parser.start('test:/master', playerInterface);
591
537
  const video = manifest.variants[0].video;
@@ -593,57 +539,6 @@ describe('HlsParser live', () => {
593
539
  ManifestParser.verifySegmentIndex(video, [ref1, ref2]);
594
540
  });
595
541
 
596
- it('offsets VTT text with rolled over TS timestamps', async () => {
597
- const masterWithVtt = [
598
- '#EXTM3U\n',
599
- '#EXT-X-MEDIA:TYPE=SUBTITLES,LANGUAGE="fra",URI="text",',
600
- 'GROUP-ID="sub1"\n',
601
- '#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1",',
602
- 'RESOLUTION=960x540,FRAME-RATE=60,SUBTITLES="sub1"\n',
603
- 'video\n',
604
- ].join('');
605
-
606
- const textPlaylist = [
607
- '#EXTM3U\n',
608
- '#EXT-X-TARGETDURATION:5\n',
609
- '#EXT-X-MEDIA-SEQUENCE:0\n',
610
- '#EXTINF:2,\n',
611
- 'main.vtt\n',
612
- ].join('');
613
-
614
- const vtt = [
615
- 'WEBVTT\n',
616
- '\n',
617
- '00:00.000 --> 00:01.000\n',
618
- 'Hello, world!\n',
619
- ].join('');
620
-
621
- fakeNetEngine
622
- .setResponseText('test:/master', masterWithVtt)
623
- .setResponseText('test:/video', media)
624
- .setResponseText('test:/text', textPlaylist)
625
- .setResponseValue('test:/init.mp4', initSegmentData)
626
- .setResponseValue('test:/main.mp4', pastRolloverSegmentData)
627
- .setResponseText('test:/main.vtt', vtt);
628
-
629
- const manifest = await parser.start('test:/master', playerInterface);
630
- const textStream = manifest.textStreams[0];
631
- await textStream.createSegmentIndex();
632
- goog.asserts.assert(textStream.segmentIndex, 'Null segmentIndex!');
633
-
634
- let ref = Array.from(textStream.segmentIndex)[0];
635
- expect(ref).not.toBe(null);
636
- expect(ref.startTime).not.toBeLessThan(rolloverOffset);
637
-
638
- const videoStream = manifest.variants[0].video;
639
- await videoStream.createSegmentIndex();
640
- goog.asserts.assert(videoStream.segmentIndex, 'Null segmentIndex!');
641
-
642
- ref = Array.from(videoStream.segmentIndex)[0];
643
- expect(ref).not.toBe(null);
644
- expect(ref.startTime).not.toBeLessThan(rolloverOffset);
645
- });
646
-
647
542
  it('parses streams with partial and preload hinted segments', async () => {
648
543
  playerInterface.isLowLatencyMode = () => true;
649
544
  const mediaWithPartialSegments = [
@@ -673,35 +568,32 @@ describe('HlsParser live', () => {
673
568
  .setResponseValue('test:/partial.mp4', segmentData)
674
569
  .setResponseValue('test:/partial2.mp4', segmentData);
675
570
 
676
- const partialRef = ManifestParser.makeReference(
677
- 'test:/partial.mp4', segmentDataStartTime, segmentDataStartTime + 2,
571
+ const partialRef = makeReference(
572
+ 'test:/partial.mp4', 0, 2, /* syncTime= */ null,
678
573
  /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ 199);
679
574
 
680
- const partialRef2 = ManifestParser.makeReference(
681
- 'test:/partial2.mp4', segmentDataStartTime + 2,
682
- segmentDataStartTime + 4, /* baseUri= */ '', /* startByte= */ 200,
683
- /* endByte= */ 429);
575
+ const partialRef2 = makeReference(
576
+ 'test:/partial2.mp4', 2, 4, /* syncTime= */ null,
577
+ /* baseUri= */ '', /* startByte= */ 200, /* endByte= */ 429);
684
578
 
685
- const partialRef3 = ManifestParser.makeReference(
686
- 'test:/partial.mp4', segmentDataStartTime + 4,
687
- segmentDataStartTime + 6,
579
+ const partialRef3 = makeReference(
580
+ 'test:/partial.mp4', 4, 6, /* syncTime= */ null,
688
581
  /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ 209);
689
582
 
690
583
  // A preload hinted partial segment doesn't have duration information,
691
584
  // so its startTime and endTime are the same.
692
- const preloadRef = ManifestParser.makeReference(
693
- 'test:/partial.mp4', segmentDataStartTime + 6,
694
- segmentDataStartTime + 6,
585
+ const preloadRef = makeReference(
586
+ 'test:/partial.mp4', 6, 6, /* syncTime= */ null,
695
587
  /* baseUri= */ '', /* startByte= */ 210, /* endByte= */ null);
696
588
 
697
- const ref = ManifestParser.makeReference(
698
- 'test:/main.mp4', segmentDataStartTime, segmentDataStartTime + 4,
589
+ const ref = makeReference(
590
+ 'test:/main.mp4', 0, 4, /* syncTime= */ null,
699
591
  /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ 429,
700
592
  /* timestampOffset= */ 0, [partialRef, partialRef2]);
701
593
 
702
594
  // ref2 is not fully published yet, so it doesn't have a segment uri.
703
- const ref2 = ManifestParser.makeReference(
704
- '', segmentDataStartTime + 4, segmentDataStartTime + 6,
595
+ const ref2 = makeReference(
596
+ '', 4, 6, /* syncTime= */ null,
705
597
  /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ null,
706
598
  /* timestampOffset= */ 0, [partialRef3, preloadRef]);
707
599
 
@@ -713,16 +605,20 @@ describe('HlsParser live', () => {
713
605
 
714
606
  describe('update', () => {
715
607
  it('adds new segments when they appear', async () => {
716
- const ref1 = ManifestParser.makeReference('test:/main.mp4', 2, 4);
717
- const ref2 = ManifestParser.makeReference('test:/main2.mp4', 4, 6);
608
+ const ref1 = makeReference(
609
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
610
+ const ref2 = makeReference(
611
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
718
612
 
719
613
  await testUpdate(
720
614
  master, media, [ref1], mediaWithAdditionalSegment, [ref1, ref2]);
721
615
  });
722
616
 
723
617
  it('evicts removed segments', async () => {
724
- const ref1 = ManifestParser.makeReference('test:/main.mp4', 2, 4);
725
- const ref2 = ManifestParser.makeReference('test:/main2.mp4', 4, 6);
618
+ const ref1 = makeReference(
619
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
620
+ const ref2 = makeReference(
621
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
726
622
 
727
623
  await testUpdate(
728
624
  master, mediaWithAdditionalSegment, [ref1, ref2],
@@ -730,12 +626,13 @@ describe('HlsParser live', () => {
730
626
  });
731
627
 
732
628
  it('handles updates with redirects', async () => {
733
- const oldRef1 = ManifestParser.makeReference('test:/main.mp4', 2, 4);
629
+ const oldRef1 = makeReference(
630
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
734
631
 
735
- const newRef1 =
736
- ManifestParser.makeReference('test:/redirected/main.mp4', 2, 4);
737
- const newRef2 =
738
- ManifestParser.makeReference('test:/redirected/main2.mp4', 4, 6);
632
+ const newRef1 = makeReference(
633
+ 'test:/redirected/main.mp4', 0, 2, /* syncTime= */ null);
634
+ const newRef2 = makeReference(
635
+ 'test:/redirected/main2.mp4', 2, 4, /* syncTime= */ null);
739
636
 
740
637
  let playlistFetchCount = 0;
741
638
 
@@ -762,8 +659,8 @@ describe('HlsParser live', () => {
762
659
  .setResponseValue('test:/init.mp4', initSegmentData)
763
660
  .setResponseValue('test:/main.mp4', segmentData);
764
661
 
765
- const expectedRef = ManifestParser.makeReference(
766
- 'test:/main.mp4', segmentDataStartTime, segmentDataStartTime + 2);
662
+ const expectedRef = makeReference(
663
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
767
664
  // In live content, we do not set timestampOffset.
768
665
  expectedRef.timestampOffset = 0;
769
666
 
@@ -780,12 +677,11 @@ describe('HlsParser live', () => {
780
677
  .setResponseValue('test:/init.mp4', initSegmentData)
781
678
  .setResponseValue('test:/main.mp4', segmentData);
782
679
 
783
- const ref1 = ManifestParser.makeReference(
784
- 'test:/main.mp4', segmentDataStartTime, segmentDataStartTime + 2);
680
+ const ref1 = makeReference(
681
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
785
682
 
786
- const ref2 = ManifestParser.makeReference(
787
- 'test:/main2.mp4', segmentDataStartTime + 2,
788
- segmentDataStartTime + 4);
683
+ const ref2 = makeReference(
684
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
789
685
 
790
686
  const manifest = await parser.start('test:/master', playerInterface);
791
687
  const video = manifest.variants[0].video;
@@ -821,11 +717,11 @@ describe('HlsParser live', () => {
821
717
  .setResponseValue('test:/main.mp4', segmentData)
822
718
  .setResponseValue('test:/main2.mp4', segmentData);
823
719
 
824
- const ref1 = ManifestParser.makeReference('test:/main.mp4',
825
- segmentDataStartTime, segmentDataStartTime + 2);
720
+ const ref1 = makeReference(
721
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
826
722
 
827
- const ref2 = ManifestParser.makeReference('test:/main2.mp4',
828
- segmentDataStartTime + 2, segmentDataStartTime + 4);
723
+ const ref2 = makeReference(
724
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
829
725
 
830
726
  const manifest =
831
727
  await parser.start('test:/master', playerInterface);
@@ -858,57 +754,6 @@ describe('HlsParser live', () => {
858
754
  shaka.net.NetworkingEngine.RequestType.SEGMENT);
859
755
  });
860
756
 
861
- it('parses start time from ts segments', async () => {
862
- const tsMediaPlaylist =
863
- mediaWithRemovedSegment.replace(/\.mp4/g, '.ts');
864
-
865
- fakeNetEngine
866
- .setResponseText('test:/master', master)
867
- .setResponseText('test:/video', tsMediaPlaylist)
868
- .setResponseValue('test:/main2.ts', tsSegmentData);
869
-
870
- const expectedRef = ManifestParser.makeReference(
871
- 'test:/main2.ts', segmentDataStartTime, segmentDataStartTime + 2);
872
- // In live content, we do not set timestampOffset.
873
- expectedRef.timestampOffset = 0;
874
-
875
- const manifest = await parser.start('test:/master', playerInterface);
876
- const video = manifest.variants[0].video;
877
- await video.createSegmentIndex();
878
- ManifestParser.verifySegmentIndex(video, [expectedRef]);
879
- });
880
-
881
- it('gets start time of segments with byte range', async () => {
882
- // Nit: this value is an implementation detail of the fix for #1106
883
- const partialEndByte = expectedStartByte + 2048 - 1;
884
-
885
- fakeNetEngine
886
- .setResponseText('test:/master', master)
887
- .setResponseText('test:/video', mediaWithByteRange)
888
- .setResponseValue('test:/init.mp4', initSegmentData)
889
- .setResponseValue('test:/main.mp4', segmentData);
890
-
891
- const expectedRef = ManifestParser.makeReference(
892
- /* uri= */ 'test:/main.mp4',
893
- /* start= */ segmentDataStartTime,
894
- /* end= */ segmentDataStartTime + 2,
895
- /* baseUri= */ '',
896
- expectedStartByte,
897
- expectedEndByte); // Complete segment reference
898
-
899
- const manifest = await parser.start('test:/master', playerInterface);
900
- const video = manifest.variants[0].video;
901
- await video.createSegmentIndex();
902
- ManifestParser.verifySegmentIndex(video, [expectedRef]);
903
-
904
- // There should have been a range request for this segment to get the
905
- // start time.
906
- fakeNetEngine.expectRangeRequest(
907
- 'test:/main.mp4',
908
- expectedStartByte,
909
- partialEndByte); // partial segment request
910
- });
911
-
912
757
  it('request playlist delta updates to skip segments', async () => {
913
758
  const mediaWithDeltaUpdates = [
914
759
  '#EXTM3U\n',
@@ -973,9 +818,12 @@ describe('HlsParser live', () => {
973
818
  ].join('');
974
819
 
975
820
  playerInterface.isLowLatencyMode = () => true;
976
- const ref1 = ManifestParser.makeReference('test:/main.mp4', 2, 4);
977
- const ref2 = ManifestParser.makeReference('test:/main2.mp4', 4, 6);
978
- const ref3 = ManifestParser.makeReference('test:/main3.mp4', 6, 8);
821
+ const ref1 = makeReference(
822
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null);
823
+ const ref2 = makeReference(
824
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null);
825
+ const ref3 = makeReference(
826
+ 'test:/main3.mp4', 4, 6, /* syncTime= */ null);
979
827
  // With 'SKIPPED-SEGMENTS', ref1 is skipped from the playlist,
980
828
  // and ref1 should be in the SegmentReferences list.
981
829
  // ref3 should be appended to the SegmentReferences list.
@@ -1015,29 +863,29 @@ describe('HlsParser live', () => {
1015
863
 
1016
864
  playerInterface.isLowLatencyMode = () => true;
1017
865
 
1018
- const ref1 = ManifestParser.makeReference(
1019
- 'test:/main.mp4', segmentDataStartTime, segmentDataStartTime + 2,
866
+ const ref1 = makeReference(
867
+ 'test:/main.mp4', 0, 2, /* syncTime= */ null,
1020
868
  /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ null,
1021
869
  /* timestampOffset= */ 0);
1022
870
 
1023
871
  // Expect the timestamp offset to be set for the segment after the
1024
872
  // EXT-X-DISCONTINUITY tag.
1025
- const ref2 = ManifestParser.makeReference(
1026
- 'test:/main2.mp4', segmentDataStartTime + 2,
1027
- segmentDataStartTime + 4, /* baseUri= */ '', /* startByte= */ 0,
1028
- /* endByte= */ null, /* timestampOffset= */ 2);
873
+ const ref2 = makeReference(
874
+ 'test:/main2.mp4', 2, 4, /* syncTime= */ null,
875
+ /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ null,
876
+ /* timestampOffset= */ 0);
1029
877
 
1030
878
  // Expect the timestamp offset to be set for the segment, with the
1031
879
  // EXT-X-DISCONTINUITY tag skipped in the playlist.
1032
- const ref3 = ManifestParser.makeReference(
1033
- 'test:/main3.mp4', segmentDataStartTime + 4,
1034
- segmentDataStartTime + 6, /* baseUri= */ '', /* startByte= */ 0,
1035
- /* endByte= */ null, /* timestampOffset= */ 2);
880
+ const ref3 = makeReference(
881
+ 'test:/main3.mp4', 4, 6, /* syncTime= */ null,
882
+ /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ null,
883
+ /* timestampOffset= */ 0);
1036
884
 
1037
- const ref4 = ManifestParser.makeReference(
1038
- 'test:/main4.mp4', segmentDataStartTime + 6,
1039
- segmentDataStartTime + 8, /* baseUri= */ '', /* startByte= */ 0,
1040
- /* endByte= */ null, /* timestampOffset= */ 2);
885
+ const ref4 = makeReference(
886
+ 'test:/main4.mp4', 6, 8, /* syncTime= */ null,
887
+ /* baseUri= */ '', /* startByte= */ 0, /* endByte= */ null,
888
+ /* timestampOffset= */ 0);
1041
889
 
1042
890
  // With 'SKIPPED-SEGMENTS', ref1, ref2 are skipped from the playlist,
1043
891
  // and ref1,ref2 should be in the SegmentReferences list.
@@ -1048,4 +896,23 @@ describe('HlsParser live', () => {
1048
896
  });
1049
897
  }); // describe('update')
1050
898
  }); // describe('playlist type LIVE')
899
+
900
+ /**
901
+ * @param {string} uri A relative URI to http://example.com
902
+ * @param {number} start
903
+ * @param {number} end
904
+ * @param {?number} syncTime
905
+ * @param {string=} baseUri
906
+ * @param {number=} startByte
907
+ * @param {?number=} endByte
908
+ * @param {number=} timestampOffset
909
+ * @param {!Array.<!shaka.media.SegmentReference>=} partialReferences
910
+ * @param {?string=} tilesLayout
911
+ * @return {!shaka.media.SegmentReference}
912
+ */
913
+ function makeReference(uri, start, end, syncTime, baseUri, startByte, endByte,
914
+ timestampOffset, partialReferences, tilesLayout) {
915
+ return ManifestParser.makeReference(uri, start, end, baseUri, startByte,
916
+ endByte, timestampOffset, partialReferences, tilesLayout, syncTime);
917
+ }
1051
918
  }); // describe('HlsParser live')