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
@@ -234,7 +234,8 @@ shaka.media.StreamingEngine = class {
234
234
 
235
235
  const mimeType = shaka.util.MimeUtils.getFullType(
236
236
  stream.mimeType, stream.codecs);
237
- this.playerInterface_.mediaSourceEngine.reinitText(mimeType);
237
+ this.playerInterface_.mediaSourceEngine.reinitText(
238
+ mimeType, this.manifest_.sequenceMode);
238
239
 
239
240
  const textDisplayer =
240
241
  this.playerInterface_.mediaSourceEngine.getTextDisplayer();
@@ -428,7 +429,8 @@ shaka.media.StreamingEngine = class {
428
429
  // init segment again.
429
430
  const fullMimeType = shaka.util.MimeUtils.getFullType(
430
431
  stream.mimeType, stream.codecs);
431
- this.playerInterface_.mediaSourceEngine.reinitText(fullMimeType);
432
+ this.playerInterface_.mediaSourceEngine.reinitText(
433
+ fullMimeType, this.manifest_.sequenceMode);
432
434
  }
433
435
 
434
436
  // Releases the segmentIndex of the old stream.
@@ -604,11 +606,10 @@ shaka.media.StreamingEngine = class {
604
606
  */
605
607
  seeked() {
606
608
  const presentationTime = this.playerInterface_.getPresentationTime();
607
- const smallGapLimit = this.config_.smallGapLimit;
608
609
  const ContentType = shaka.util.ManifestParserUtils.ContentType;
609
610
  const newTimeIsBuffered = (type) => {
610
611
  return this.playerInterface_.mediaSourceEngine.isBuffered(
611
- type, presentationTime, smallGapLimit);
612
+ type, presentationTime);
612
613
  };
613
614
 
614
615
  let streamCleared = false;
@@ -645,6 +646,10 @@ shaka.media.StreamingEngine = class {
645
646
  if (type === ContentType.TEXT) {
646
647
  this.playerInterface_.mediaSourceEngine.resetCaptionParser();
647
648
  }
649
+
650
+ // Mark the media state as having seeked, so that the new buffers know
651
+ // that they will need to be at a new position (for sequence mode).
652
+ mediaState.seeked = true;
648
653
  }
649
654
  }
650
655
 
@@ -674,7 +679,7 @@ shaka.media.StreamingEngine = class {
674
679
 
675
680
  if (mediaState.waitingToClearBuffer) {
676
681
  // May not be performing an update, but an update will still happen.
677
- // See: https://github.com/google/shaka-player/issues/334
682
+ // See: https://github.com/shaka-project/shaka-player/issues/334
678
683
  shaka.log.debug(logPrefix, 'clear: already waiting');
679
684
  return;
680
685
  }
@@ -764,7 +769,9 @@ shaka.media.StreamingEngine = class {
764
769
  const mediaSourceEngine = this.playerInterface_.mediaSourceEngine;
765
770
  const forceTransmuxTS = this.config_.forceTransmuxTS;
766
771
 
767
- await mediaSourceEngine.init(streamsByType, forceTransmuxTS);
772
+
773
+ await mediaSourceEngine.init(streamsByType, forceTransmuxTS,
774
+ this.manifest_.sequenceMode);
768
775
  this.destroyer_.ensureNotDestroyed();
769
776
 
770
777
  this.setDuration_();
@@ -805,6 +812,9 @@ shaka.media.StreamingEngine = class {
805
812
  clearBufferSafeMargin: 0,
806
813
  waitingToFlushBuffer: false,
807
814
  clearingBuffer: false,
815
+ // The playhead might be seeking on startup, if a start time is set, so
816
+ // start "seeked" as true.
817
+ seeked: true,
808
818
  recovering: false,
809
819
  hasError: false,
810
820
  operation: null,
@@ -920,9 +930,9 @@ shaka.media.StreamingEngine = class {
920
930
  // buffering forever at the end.
921
931
  // We should only do this if the duration needs to shrink.
922
932
  // Growing it by less than 1ms can actually cause buffering on
923
- // replay, as in https://github.com/google/shaka-player/issues/979
933
+ // replay, as in https://github.com/shaka-project/shaka-player/issues/979
924
934
  // On some platforms, this can spuriously be 0, so ignore this case.
925
- // https://github.com/google/shaka-player/issues/1967,
935
+ // https://github.com/shaka-project/shaka-player/issues/1967,
926
936
  const duration = this.playerInterface_.mediaSourceEngine.getDuration();
927
937
  if (duration != 0 &&
928
938
  duration < this.manifest_.presentationTimeline.getDuration()) {
@@ -1272,6 +1282,7 @@ shaka.media.StreamingEngine = class {
1272
1282
  this.scheduleUpdate_(mediaState, 0);
1273
1283
  return;
1274
1284
  }
1285
+
1275
1286
  await this.append_(
1276
1287
  mediaState, presentationTime, stream, reference, result);
1277
1288
  }
@@ -1508,7 +1519,7 @@ shaka.media.StreamingEngine = class {
1508
1519
 
1509
1520
  await this.playerInterface_.mediaSourceEngine.setStreamProperties(
1510
1521
  mediaState.type, timestampOffset, appendWindowStart,
1511
- appendWindowEnd);
1522
+ appendWindowEnd, this.manifest_.sequenceMode);
1512
1523
  } catch (error) {
1513
1524
  mediaState.lastAppendWindowStart = null;
1514
1525
  mediaState.lastAppendWindowEnd = null;
@@ -1565,8 +1576,7 @@ shaka.media.StreamingEngine = class {
1565
1576
  * @return {!Promise}
1566
1577
  * @private
1567
1578
  */
1568
- async append_(mediaState, presentationTime, stream, reference,
1569
- segment) {
1579
+ async append_(mediaState, presentationTime, stream, reference, segment) {
1570
1580
  const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);
1571
1581
 
1572
1582
  const hasClosedCaptions = stream.closedCaptions &&
@@ -1584,14 +1594,19 @@ shaka.media.StreamingEngine = class {
1584
1594
 
1585
1595
  await this.evict_(mediaState, presentationTime);
1586
1596
  this.destroyer_.ensureNotDestroyed();
1587
- shaka.log.v1(logPrefix, 'appending media segment');
1597
+ shaka.log.v1(logPrefix, 'appending media segment at',
1598
+ (reference.syncTime == null ? 'unknown' : reference.syncTime));
1588
1599
 
1600
+ const seeked = mediaState.seeked;
1601
+ mediaState.seeked = false;
1589
1602
  await this.playerInterface_.mediaSourceEngine.appendBuffer(
1590
1603
  mediaState.type,
1591
1604
  segment,
1592
- reference.startTime,
1605
+ reference.syncTime == null ? reference.startTime : reference.syncTime,
1593
1606
  reference.endTime,
1594
- hasClosedCaptions);
1607
+ hasClosedCaptions,
1608
+ seeked,
1609
+ this.manifest_.sequenceMode);
1595
1610
  this.destroyer_.ensureNotDestroyed();
1596
1611
  shaka.log.v2(logPrefix, 'appended media segment');
1597
1612
  }
@@ -1718,7 +1733,7 @@ shaka.media.StreamingEngine = class {
1718
1733
  const bufferedBehind = presentationTime - startTime;
1719
1734
 
1720
1735
  const overflow = bufferedBehind - bufferBehind;
1721
- // See: https://github.com/google/shaka-player/issues/2982
1736
+ // See: https://github.com/shaka-project/shaka-player/issues/2982
1722
1737
  if (overflow <= 0.01) {
1723
1738
  shaka.log.v2(logPrefix,
1724
1739
  'buffer behind okay:',
@@ -2017,6 +2032,7 @@ shaka.media.StreamingEngine.PlayerInterface;
2017
2032
  * waitingToFlushBuffer: boolean,
2018
2033
  * clearBufferSafeMargin: number,
2019
2034
  * clearingBuffer: boolean,
2035
+ * seeked: boolean,
2020
2036
  * recovering: boolean,
2021
2037
  * hasError: boolean,
2022
2038
  * operation: shaka.net.NetworkingEngine.PendingRequest
@@ -2061,6 +2077,8 @@ shaka.media.StreamingEngine.PlayerInterface;
2061
2077
  * The amount of buffer to retain when clearing the buffer after the update.
2062
2078
  * @property {boolean} clearingBuffer
2063
2079
  * True indicates that the buffer is being cleared.
2080
+ * @property {boolean} seeked
2081
+ * True indicates that the presentation just seeked.
2064
2082
  * @property {boolean} recovering
2065
2083
  * True indicates that the last segment was not appended because it could not
2066
2084
  * fit in the buffer.
@@ -2079,7 +2097,7 @@ shaka.media.StreamingEngine.MediaState_;
2079
2097
  * of the Period.
2080
2098
  *
2081
2099
  * NOTE: This was increased as part of the solution to
2082
- * https://github.com/google/shaka-player/issues/1281
2100
+ * https://github.com/shaka-project/shaka-player/issues/1281
2083
2101
  *
2084
2102
  * @const {number}
2085
2103
  * @private
@@ -2093,7 +2111,7 @@ shaka.media.StreamingEngine.APPEND_WINDOW_START_FUDGE_ = 0.1;
2093
2111
  * the Period. This rounding error could then create an artificial gap and a
2094
2112
  * stutter when the gap-jumping logic takes over.
2095
2113
  *
2096
- * https://github.com/google/shaka-player/issues/1597
2114
+ * https://github.com/shaka-project/shaka-player/issues/1597
2097
2115
  *
2098
2116
  * @const {number}
2099
2117
  * @private
@@ -6,8 +6,6 @@
6
6
 
7
7
  goog.provide('shaka.media.TimeRangesUtils');
8
8
 
9
- goog.require('shaka.util.Iterables');
10
-
11
9
 
12
10
  /**
13
11
  * @summary A set of utility functions for dealing with TimeRanges objects.
@@ -56,17 +54,13 @@ shaka.media.TimeRangesUtils = class {
56
54
 
57
55
 
58
56
  /**
59
- * Determines if the given time is inside a buffered range. This includes
60
- * gaps, meaning that if the playhead is in a gap, it is considered buffered.
61
- * If there is a small gap between the playhead and buffer start, consider it
62
- * as buffered.
57
+ * Determines if the given time is inside a buffered range.
63
58
  *
64
59
  * @param {TimeRanges} b
65
60
  * @param {number} time Playhead time
66
- * @param {number=} smallGapLimit Set in configuration
67
61
  * @return {boolean}
68
62
  */
69
- static isBuffered(b, time, smallGapLimit = 0) {
63
+ static isBuffered(b, time) {
70
64
  if (!b || !b.length) {
71
65
  return false;
72
66
  }
@@ -78,9 +72,8 @@ shaka.media.TimeRangesUtils = class {
78
72
  if (time > b.end(b.length - 1)) {
79
73
  return false;
80
74
  }
81
- // Push the time forward by the gap limit so that it is more likely to be in
82
- // the range.
83
- return (time + smallGapLimit >= b.start(0));
75
+
76
+ return time >= b.start(0);
84
77
  }
85
78
 
86
79
 
@@ -157,7 +150,7 @@ shaka.media.TimeRangesUtils = class {
157
150
  return [];
158
151
  }
159
152
  const ret = [];
160
- for (const i of shaka.util.Iterables.range(b.length)) {
153
+ for (let i = 0; i < b.length; i++) {
161
154
  ret.push({start: b.start(i), end: b.end(i)});
162
155
  }
163
156
  return ret;
@@ -141,7 +141,7 @@ shaka.media.VideoWrapper = class {
141
141
  // TODO: Need further investigation why it happens. Before and after
142
142
  // setting the current time, video.readyState is 1, video.paused is true,
143
143
  // and video.buffered's TimeRanges length is 0.
144
- // See: https://github.com/google/shaka-player/issues/1298
144
+ // See: https://github.com/shaka-project/shaka-player/issues/1298
145
145
  this.mover_.moveTo(
146
146
  this.video_.currentTime == 0 ?
147
147
  startTime :
@@ -220,6 +220,9 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
220
220
  retryParameters: retryParams,
221
221
  licenseRequestType: null,
222
222
  sessionId: null,
223
+ drmInfo: null,
224
+ initData: null,
225
+ initDataType: null,
223
226
  streamDataCallback: streamDataCallback,
224
227
  };
225
228
  }
@@ -431,7 +434,7 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
431
434
  }
432
435
 
433
436
  // Schemes are meant to be case-insensitive.
434
- // See https://github.com/google/shaka-player/issues/2173
437
+ // See https://github.com/shaka-project/shaka-player/issues/2173
435
438
  // and https://tools.ietf.org/html/rfc3986#section-3.1
436
439
  scheme = scheme.toLowerCase();
437
440
 
@@ -99,6 +99,7 @@ shaka.offline.indexeddb.V1StorageCell = class
99
99
  sessionIds: old.sessionIds,
100
100
  drmInfo: old.drmInfo,
101
101
  appMetadata: old.appMetadata,
102
+ sequenceMode: false,
102
103
  };
103
104
  }
104
105
 
@@ -60,6 +60,7 @@ shaka.offline.indexeddb.V2StorageCell = class
60
60
  sessionIds: old.sessionIds,
61
61
  size: old.size,
62
62
  streams,
63
+ sequenceMode: false,
63
64
  };
64
65
  }
65
66
 
@@ -87,6 +87,7 @@ shaka.offline.ManifestConverter = class {
87
87
  variants: Array.from(variants.values()),
88
88
  textStreams: textStreams,
89
89
  imageStreams: imageStreams,
90
+ sequenceMode: manifestDB.sequenceMode || false,
90
91
  };
91
92
  }
92
93