shaka-player 4.3.10 → 4.4.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 (316) hide show
  1. package/.github/workflows/release-please.yaml +7 -0
  2. package/AUTHORS +9 -0
  3. package/CHANGELOG.md +295 -200
  4. package/CONTRIBUTORS +8 -0
  5. package/LICENSE +32 -0
  6. package/README.md +63 -10
  7. package/demo/autoTemplate.txt +40 -5
  8. package/demo/close_button.js +11 -0
  9. package/demo/common/asset.js +13 -1
  10. package/demo/common/assets.js +53 -3
  11. package/demo/common/message_ids.js +25 -1
  12. package/demo/config.js +69 -10
  13. package/demo/customWarning.txt +2 -2
  14. package/demo/index.html +3 -1
  15. package/demo/locales/en.json +26 -2
  16. package/demo/locales/source.json +105 -9
  17. package/demo/main.js +52 -9
  18. package/demo/search.js +3 -1
  19. package/demo/service_worker.js +3 -0
  20. package/dist/controls.css +1 -1
  21. package/dist/controls.css.map +1 -1
  22. package/dist/demo.compiled.debug.js +124 -112
  23. package/dist/demo.compiled.debug.map +3 -3
  24. package/dist/demo.compiled.js +124 -112
  25. package/dist/demo.compiled.map +3 -3
  26. package/dist/deps.js +46 -28
  27. package/dist/locales.js +28 -28
  28. package/dist/receiver.compiled.debug.js +52 -46
  29. package/dist/receiver.compiled.debug.map +3 -3
  30. package/dist/receiver.compiled.js +52 -46
  31. package/dist/receiver.compiled.map +3 -3
  32. package/dist/shaka-player.compiled.d.ts +676 -391
  33. package/dist/shaka-player.compiled.debug.d.ts +676 -391
  34. package/dist/shaka-player.compiled.debug.externs.js +1188 -616
  35. package/dist/shaka-player.compiled.debug.js +1045 -700
  36. package/dist/shaka-player.compiled.debug.map +4 -4
  37. package/dist/shaka-player.compiled.externs.js +1188 -616
  38. package/dist/shaka-player.compiled.js +1094 -933
  39. package/dist/shaka-player.compiled.map +4 -4
  40. package/dist/shaka-player.ui.d.ts +677 -392
  41. package/dist/shaka-player.ui.debug.d.ts +677 -392
  42. package/dist/shaka-player.ui.debug.externs.js +1023 -451
  43. package/dist/shaka-player.ui.debug.js +1100 -739
  44. package/dist/shaka-player.ui.debug.map +4 -4
  45. package/dist/shaka-player.ui.externs.js +1023 -451
  46. package/dist/shaka-player.ui.js +1244 -1071
  47. package/dist/shaka-player.ui.map +4 -4
  48. package/docs/tutorials/ad_monetization.md +15 -1
  49. package/docs/tutorials/application-level-redirects.md +1 -1
  50. package/docs/tutorials/config.md +9 -5
  51. package/docs/tutorials/drm-config.md +61 -0
  52. package/docs/tutorials/fairplay.md +19 -4
  53. package/docs/tutorials/license-server-auth.md +4 -4
  54. package/docs/tutorials/license-wrapping.md +2 -2
  55. package/docs/tutorials/ui-customization.md +7 -3
  56. package/docs/tutorials/ui.md +7 -7
  57. package/docs/tutorials/upgrade.md +3 -0
  58. package/externs/ima.js +123 -2
  59. package/externs/isoboxer.js +217 -0
  60. package/externs/mediakeys.js +18 -0
  61. package/externs/mux.js +1 -105
  62. package/externs/pictureinpicture.js +48 -0
  63. package/externs/shaka/ads.js +61 -1
  64. package/externs/shaka/cea.js +110 -0
  65. package/externs/shaka/codecs.js +32 -0
  66. package/externs/shaka/manifest.js +101 -1
  67. package/externs/shaka/manifest_parser.js +0 -10
  68. package/externs/shaka/net.js +36 -7
  69. package/externs/shaka/offline.js +8 -1
  70. package/externs/shaka/player.js +220 -21
  71. package/externs/shaka/text.js +1 -382
  72. package/externs/shaka/transmuxer.js +59 -0
  73. package/karma.conf.js +13 -0
  74. package/lib/abr/simple_abr_manager.js +6 -3
  75. package/lib/ads/ad_manager.js +60 -2
  76. package/lib/ads/client_side_ad.js +86 -0
  77. package/lib/ads/client_side_ad_manager.js +79 -3
  78. package/lib/ads/server_side_ad.js +86 -0
  79. package/lib/ads/server_side_ad_manager.js +13 -0
  80. package/lib/cast/cast_utils.js +1 -0
  81. package/lib/cea/cea608_data_channel.js +24 -14
  82. package/lib/cea/cea608_memory.js +5 -2
  83. package/lib/cea/cea708_service.js +8 -9
  84. package/lib/cea/cea708_window.js +1 -2
  85. package/lib/cea/cea_decoder.js +23 -6
  86. package/lib/cea/cea_utils.js +25 -2
  87. package/lib/cea/dummy_caption_decoder.js +21 -0
  88. package/lib/cea/dummy_cea_parser.js +1 -3
  89. package/lib/cea/mp4_cea_parser.js +15 -10
  90. package/lib/cea/ts_cea_parser.js +69 -0
  91. package/lib/dash/content_protection.js +32 -2
  92. package/lib/dash/dash_parser.js +93 -31
  93. package/lib/dash/mpd_utils.js +6 -25
  94. package/lib/dash/segment_base.js +12 -14
  95. package/lib/dash/segment_list.js +10 -6
  96. package/lib/dash/segment_template.js +349 -32
  97. package/lib/dependencies/all.js +8 -0
  98. package/lib/hls/hls_classes.js +33 -8
  99. package/lib/hls/hls_parser.js +805 -191
  100. package/lib/hls/manifest_text_parser.js +4 -14
  101. package/lib/media/adaptation_set_criteria.js +43 -3
  102. package/lib/media/closed_caption_parser.js +74 -12
  103. package/lib/media/drm_engine.js +189 -49
  104. package/lib/media/gap_jumping_controller.js +1 -1
  105. package/lib/media/manifest_parser.js +34 -0
  106. package/lib/media/media_source_capabilities.js +10 -0
  107. package/lib/media/media_source_engine.js +475 -231
  108. package/lib/media/playhead.js +1 -1
  109. package/lib/media/presentation_timeline.js +62 -0
  110. package/lib/media/segment_index.js +50 -14
  111. package/lib/media/segment_prefetch.js +277 -0
  112. package/lib/media/segment_reference.js +70 -4
  113. package/lib/media/streaming_engine.js +258 -81
  114. package/lib/media/video_wrapper.js +15 -7
  115. package/lib/mss/content_protection.js +353 -0
  116. package/lib/mss/mss_parser.js +1081 -0
  117. package/lib/net/networking_engine.js +60 -10
  118. package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
  119. package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
  120. package/lib/offline/manifest_converter.js +6 -0
  121. package/lib/offline/storage.js +2 -4
  122. package/lib/player.js +309 -105
  123. package/lib/polyfill/media_capabilities.js +43 -3
  124. package/lib/polyfill/patchedmediakeys_apple.js +5 -0
  125. package/lib/polyfill/patchedmediakeys_nop.js +5 -0
  126. package/lib/polyfill/patchedmediakeys_webkit.js +5 -0
  127. package/lib/text/cue.js +208 -130
  128. package/lib/text/lrc_text_parser.js +2 -2
  129. package/lib/text/mp4_vtt_parser.js +2 -2
  130. package/lib/text/sbv_text_parser.js +1 -1
  131. package/lib/text/simple_text_displayer.js +2 -1
  132. package/lib/text/srt_text_parser.js +9 -1
  133. package/lib/text/ssa_text_parser.js +2 -2
  134. package/lib/text/text_engine.js +3 -21
  135. package/lib/text/text_utils.js +71 -20
  136. package/lib/text/ui_text_displayer.js +14 -14
  137. package/lib/text/vtt_text_parser.js +22 -14
  138. package/lib/transmuxer/aac_transmuxer.js +224 -0
  139. package/lib/transmuxer/ac3.js +142 -0
  140. package/lib/transmuxer/ac3_transmuxer.js +212 -0
  141. package/lib/transmuxer/adts.js +232 -0
  142. package/lib/transmuxer/ec3.js +103 -0
  143. package/lib/transmuxer/ec3_transmuxer.js +212 -0
  144. package/lib/transmuxer/h264.js +324 -0
  145. package/lib/transmuxer/mp3_transmuxer.js +204 -0
  146. package/lib/transmuxer/mpeg_audio.js +196 -0
  147. package/lib/transmuxer/mpeg_ts_transmuxer.js +182 -0
  148. package/lib/transmuxer/mss_transmuxer.js +389 -0
  149. package/lib/{media/transmuxer.js → transmuxer/muxjs_transmuxer.js} +34 -80
  150. package/lib/transmuxer/transmuxer_engine.js +161 -0
  151. package/lib/transmuxer/ts_transmuxer.js +738 -0
  152. package/lib/util/cmcd_manager.js +131 -71
  153. package/lib/util/error.js +62 -26
  154. package/lib/util/exp_golomb.js +220 -0
  155. package/lib/util/fairplay_utils.js +64 -13
  156. package/lib/util/id3_utils.js +56 -3
  157. package/lib/util/language_utils.js +11 -8
  158. package/lib/util/manifest_parser_utils.js +3 -0
  159. package/lib/util/mime_utils.js +44 -7
  160. package/lib/util/mp4_box_parsers.js +233 -5
  161. package/lib/util/mp4_generator.js +1381 -0
  162. package/lib/util/periods.js +40 -34
  163. package/lib/util/platform.js +17 -3
  164. package/lib/util/player_configuration.js +38 -1
  165. package/lib/util/stream_utils.js +138 -27
  166. package/lib/util/text_parser.js +1 -1
  167. package/lib/util/ts_parser.js +470 -47
  168. package/lib/util/xml_utils.js +16 -3
  169. package/maintained-branches.md +2 -2
  170. package/package.json +3 -1
  171. package/roadmap.md +21 -6
  172. package/shaka-player.uncompiled.js +18 -0
  173. package/test/abr/simple_abr_manager_unit.js +32 -4
  174. package/test/ads/ad_manager_unit.js +18 -2
  175. package/test/cast/cast_utils_unit.js +7 -2
  176. package/test/cea/cea608_memory_unit.js +24 -0
  177. package/test/cea/cea_decoder_unit.js +33 -0
  178. package/test/dash/dash_parser_content_protection_unit.js +93 -3
  179. package/test/dash/dash_parser_live_unit.js +56 -13
  180. package/test/dash/dash_parser_manifest_unit.js +70 -2
  181. package/test/dash/dash_parser_segment_base_unit.js +14 -9
  182. package/test/dash/dash_parser_segment_template_unit.js +286 -6
  183. package/test/demo/demo_unit.js +5 -1
  184. package/test/hls/hls_live_unit.js +188 -28
  185. package/test/hls/hls_parser_unit.js +250 -109
  186. package/test/hls/manifest_text_parser_unit.js +18 -13
  187. package/test/media/adaptation_set_criteria_unit.js +46 -14
  188. package/test/media/adaptation_set_unit.js +2 -0
  189. package/test/media/drm_engine_integration.js +11 -8
  190. package/test/media/drm_engine_unit.js +220 -7
  191. package/test/media/media_source_engine_integration.js +122 -38
  192. package/test/media/media_source_engine_unit.js +133 -153
  193. package/test/media/playhead_unit.js +3 -0
  194. package/test/media/presentation_timeline_unit.js +51 -0
  195. package/test/media/segment_index_unit.js +52 -0
  196. package/test/media/segment_prefetch_unit.js +243 -0
  197. package/test/media/streaming_engine_integration.js +9 -3
  198. package/test/media/streaming_engine_unit.js +440 -59
  199. package/test/mss/mss_parser_content_protection_unit.js +49 -0
  200. package/test/mss/mss_parser_unit.js +472 -0
  201. package/test/mss/mss_player_integration.js +123 -0
  202. package/test/offline/manifest_convert_unit.js +9 -0
  203. package/test/offline/storage_integration.js +6 -1
  204. package/test/player_unit.js +386 -133
  205. package/test/polyfill/media_capabilities_unit.js +18 -0
  206. package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
  207. package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
  208. package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
  209. package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
  210. package/test/test/assets/hls-raw-aac/manifest.m3u8 +4 -0
  211. package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +14 -0
  212. package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
  213. package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
  214. package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
  215. package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
  216. package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
  217. package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
  218. package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
  219. package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
  220. package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +31 -0
  221. package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
  222. package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
  223. package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
  224. package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
  225. package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
  226. package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
  227. package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
  228. package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
  229. package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +31 -0
  230. package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +13 -0
  231. package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
  232. package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
  233. package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
  234. package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
  235. package/test/test/assets/hls-raw-mp3/playlist.m3u8 +4 -0
  236. package/test/test/assets/hls-ts-aac/playlist.m3u8 +23 -0
  237. package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
  238. package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
  239. package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
  240. package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
  241. package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
  242. package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
  243. package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
  244. package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
  245. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
  246. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
  247. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
  248. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
  249. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
  250. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
  251. package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +19 -0
  252. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
  253. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
  254. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
  255. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
  256. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
  257. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
  258. package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +19 -0
  259. package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
  260. package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
  261. package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
  262. package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
  263. package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
  264. package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
  265. package/test/test/assets/hls-ts-h264/prog_index.m3u8 +25 -0
  266. package/test/test/assets/hls-ts-mp3/manifest.m3u8 +13 -0
  267. package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
  268. package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
  269. package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
  270. package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
  271. package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +17 -0
  272. package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
  273. package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
  274. package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
  275. package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
  276. package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
  277. package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
  278. package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +4 -0
  279. package/test/test/boot.js +7 -2
  280. package/test/test/util/fake_ad.js +99 -0
  281. package/test/test/util/fake_ad_manager.js +7 -1
  282. package/test/test/util/fake_networking_engine.js +41 -14
  283. package/test/test/util/fake_segment_prefetch.js +81 -0
  284. package/test/test/util/manifest_generator.js +19 -5
  285. package/test/test/util/mss_parser_util.js +115 -0
  286. package/test/test/util/offline_utils.js +1 -0
  287. package/test/test/util/simple_fakes.js +12 -3
  288. package/test/test/util/streaming_engine_util.js +14 -4
  289. package/test/test/util/ttml_utils.js +2 -2
  290. package/test/text/cue_integration.js +1 -1
  291. package/test/text/srt_text_parser_unit.js +78 -0
  292. package/test/text/text_engine_unit.js +17 -8
  293. package/test/text/ui_text_displayer_unit.js +4 -4
  294. package/test/text/vtt_text_parser_unit.js +59 -40
  295. package/test/text/web_vtt_generator_unit.js +9 -3
  296. package/test/{media/transmuxer_integration.js → transmuxer/muxjs_transmuxer_integration.js} +30 -33
  297. package/test/transmuxer/transmuxer_engine_integration.js +60 -0
  298. package/test/transmuxer/transmuxer_integration.js +296 -0
  299. package/test/util/cmcd_manager_unit.js +162 -13
  300. package/test/util/language_utils_unit.js +9 -2
  301. package/test/util/mp4_box_parsers_unit.js +39 -4
  302. package/test/util/periods_unit.js +34 -26
  303. package/test/util/stream_utils_unit.js +60 -107
  304. package/ui/controls.js +19 -1
  305. package/ui/controls.less +1 -0
  306. package/ui/externs/ui.js +11 -1
  307. package/ui/language_utils.js +15 -0
  308. package/ui/less/thumbnails.less +26 -0
  309. package/ui/locales/oc.json +42 -0
  310. package/ui/pip_button.js +83 -2
  311. package/ui/range_element.js +15 -0
  312. package/ui/resolution_selection.js +9 -2
  313. package/ui/seek_bar.js +223 -0
  314. package/ui/ui.js +5 -0
  315. package/lib/cea/i_caption_decoder.js +0 -51
  316. package/lib/cea/i_cea_parser.js +0 -68
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  goog.provide('shaka.net.NetworkingEngine');
8
+ goog.provide('shaka.net.NetworkingEngine.AdvancedRequestType');
8
9
  goog.provide('shaka.net.NetworkingEngine.RequestType');
9
10
  goog.provide('shaka.net.NetworkingEngine.PendingRequest');
10
11
 
@@ -52,8 +53,11 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
52
53
  * Called when the headers are received for a download.
53
54
  * @param {shaka.net.NetworkingEngine.OnDownloadFailed=} onDownloadFailed
54
55
  * Called when a download fails, for any reason.
56
+ * @param {shaka.net.NetworkingEngine.OnRequest=} onRequest
57
+ * Called when a request is made
55
58
  */
56
- constructor(onProgressUpdated, onHeadersReceived, onDownloadFailed) {
59
+ constructor(onProgressUpdated, onHeadersReceived, onDownloadFailed,
60
+ onRequest) {
57
61
  super();
58
62
 
59
63
  /** @private {boolean} */
@@ -77,6 +81,9 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
77
81
  /** @private {?shaka.net.NetworkingEngine.OnDownloadFailed} */
78
82
  this.onDownloadFailed_ = onDownloadFailed || null;
79
83
 
84
+ /** @private {?shaka.net.NetworkingEngine.OnRequest} */
85
+ this.onRequest_ = onRequest || null;
86
+
80
87
  /** @private {boolean} */
81
88
  this.forceHTTPS_ = false;
82
89
  }
@@ -247,10 +254,11 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
247
254
  *
248
255
  * @param {shaka.net.NetworkingEngine.RequestType} type
249
256
  * @param {shaka.extern.Request} request
257
+ * @param {shaka.extern.RequestContext=} context
250
258
  * @return {!shaka.net.NetworkingEngine.PendingRequest}
251
259
  * @export
252
260
  */
253
- request(type, request) {
261
+ request(type, request, context) {
254
262
  const ObjectUtils = shaka.util.ObjectUtils;
255
263
  const numBytesRemainingObj =
256
264
  new shaka.net.NetworkingEngine.NumBytesRemainingClass();
@@ -285,12 +293,12 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
285
293
  request.uris = ObjectUtils.cloneObject(request.uris);
286
294
 
287
295
  // Apply the registered filters to the request.
288
- const requestFilterOperation = this.filterRequest_(type, request);
296
+ const requestFilterOperation = this.filterRequest_(type, request, context);
289
297
  const requestOperation = requestFilterOperation.chain(
290
298
  () => this.makeRequestWithRetry_(type, request, numBytesRemainingObj));
291
299
  const responseFilterOperation = requestOperation.chain(
292
300
  (responseAndGotProgress) =>
293
- this.filterResponse_(type, responseAndGotProgress));
301
+ this.filterResponse_(type, responseAndGotProgress, context));
294
302
 
295
303
  // Keep track of time spent in filters.
296
304
  const requestFilterStartTime = Date.now();
@@ -342,14 +350,14 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
342
350
  /**
343
351
  * @param {shaka.net.NetworkingEngine.RequestType} type
344
352
  * @param {shaka.extern.Request} request
353
+ * @param {shaka.extern.RequestContext=} context
345
354
  * @return {!shaka.util.AbortableOperation.<undefined>}
346
355
  * @private
347
356
  */
348
- filterRequest_(type, request) {
357
+ filterRequest_(type, request, context) {
349
358
  let filterOperation = shaka.util.AbortableOperation.completed(undefined);
350
359
 
351
- for (const requestFilter of this.requestFilters_) {
352
- // Request filters are run sequentially.
360
+ const applyFilter = (requestFilter) => {
353
361
  filterOperation = filterOperation.chain(() => {
354
362
  if (request.body) {
355
363
  // TODO: For v4.0 we should remove this or change to always pass a
@@ -359,8 +367,17 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
359
367
  // copying buffers if this is a partial view.
360
368
  request.body = shaka.util.BufferUtils.toArrayBuffer(request.body);
361
369
  }
362
- return requestFilter(type, request);
370
+ return requestFilter(type, request, context);
363
371
  });
372
+ };
373
+
374
+ if (this.onRequest_) {
375
+ applyFilter(this.onRequest_);
376
+ }
377
+
378
+ for (const requestFilter of this.requestFilters_) {
379
+ // Request filters are run sequentially.
380
+ applyFilter(requestFilter);
364
381
  }
365
382
 
366
383
  // Catch any errors thrown by request filters, and substitute
@@ -608,11 +625,12 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
608
625
  * @param {shaka.net.NetworkingEngine.RequestType} type
609
626
  * @param {shaka.net.NetworkingEngine.ResponseAndGotProgress}
610
627
  * responseAndGotProgress
628
+ * @param {shaka.extern.RequestContext=} context
611
629
  * @return {!shaka.extern.IAbortableOperation.<
612
630
  * shaka.net.NetworkingEngine.ResponseAndGotProgress>}
613
631
  * @private
614
632
  */
615
- filterResponse_(type, responseAndGotProgress) {
633
+ filterResponse_(type, responseAndGotProgress, context) {
616
634
  let filterOperation = shaka.util.AbortableOperation.completed(undefined);
617
635
  for (const responseFilter of this.responseFilters_) {
618
636
  // Response filters are run sequentially.
@@ -622,7 +640,7 @@ shaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {
622
640
  // TODO: See TODO in filterRequest_.
623
641
  resp.data = shaka.util.BufferUtils.toArrayBuffer(resp.data);
624
642
  }
625
- return responseFilter(type, resp);
643
+ return responseFilter(type, resp, context);
626
644
  });
627
645
  }
628
646
  // If successful, return the filtered response with whether it got
@@ -753,6 +771,25 @@ shaka.net.NetworkingEngine.RequestType = {
753
771
  'KEY': 6,
754
772
  };
755
773
 
774
+ /**
775
+ * A more advanced form of the RequestType structure, meant to describe
776
+ * sub-types of basic request types.
777
+ * For example, an INIT_SEGMENT is a sub-type of SEGMENT.
778
+ * This is meant to allow for more specificity to be added to the request type
779
+ * data, without breaking backwards compatibility.
780
+ *
781
+ * @enum {number}
782
+ * @export
783
+ */
784
+ shaka.net.NetworkingEngine.AdvancedRequestType = {
785
+ 'INIT_SEGMENT': 0,
786
+ 'MEDIA_SEGMENT': 1,
787
+ 'MEDIA_PLAYLIST': 2,
788
+ 'MASTER_PLAYLIST': 3,
789
+ 'MPD': 4,
790
+ 'MSS': 5,
791
+ };
792
+
756
793
 
757
794
  /**
758
795
  * Priority level for network scheme plugins.
@@ -836,3 +873,16 @@ shaka.net.NetworkingEngine.OnHeadersReceived;
836
873
  * @export
837
874
  */
838
875
  shaka.net.NetworkingEngine.OnDownloadFailed;
876
+
877
+
878
+ /**
879
+ * @typedef {function(
880
+ * !shaka.net.NetworkingEngine.RequestType,
881
+ * !shaka.extern.Request,
882
+ * (shaka.extern.RequestContext|undefined))}
883
+ *
884
+ * @description
885
+ * A callback function called on every request
886
+ * @export
887
+ */
888
+ shaka.net.NetworkingEngine.OnRequest;
@@ -159,6 +159,7 @@ shaka.offline.indexeddb.V1StorageCell = class
159
159
  hdr: undefined,
160
160
  kind: old.kind,
161
161
  language: old.language,
162
+ originalLanguage: old.language || null,
162
163
  label: old.label,
163
164
  width: old.width,
164
165
  height: old.height,
@@ -108,6 +108,7 @@ shaka.offline.indexeddb.V2StorageCell = class
108
108
  hdr: undefined,
109
109
  kind: old.kind,
110
110
  language: old.language,
111
+ originalLanguage: old.language || null,
111
112
  label: old.label,
112
113
  width: old.width,
113
114
  height: old.height,
@@ -8,6 +8,7 @@ goog.provide('shaka.offline.ManifestConverter');
8
8
 
9
9
  goog.require('goog.asserts');
10
10
  goog.require('shaka.media.InitSegmentReference');
11
+ goog.require('shaka.media.ManifestParser');
11
12
  goog.require('shaka.media.PresentationTimeline');
12
13
  goog.require('shaka.media.SegmentIndex');
13
14
  goog.require('shaka.media.SegmentReference');
@@ -88,6 +89,9 @@ shaka.offline.ManifestConverter = class {
88
89
  textStreams: textStreams,
89
90
  imageStreams: imageStreams,
90
91
  sequenceMode: manifestDB.sequenceMode || false,
92
+ ignoreManifestTimestampsInSegmentsMode: false,
93
+ type: manifestDB.type || shaka.media.ManifestParser.UNKNOWN,
94
+ serviceDescription: null,
91
95
  };
92
96
  }
93
97
 
@@ -190,6 +194,7 @@ shaka.offline.ManifestConverter = class {
190
194
  drmInfos: [],
191
195
  keyIds: streamDB.keyIds,
192
196
  language: streamDB.language,
197
+ originalLanguage: streamDB.originalLanguage || null,
193
198
  label: streamDB.label,
194
199
  type: streamDB.type,
195
200
  primary: streamDB.primary,
@@ -202,6 +207,7 @@ shaka.offline.ManifestConverter = class {
202
207
  spatialAudio: streamDB.spatialAudio,
203
208
  closedCaptions: streamDB.closedCaptions,
204
209
  tilesLayout: streamDB.tilesLayout,
210
+ accessibilityPurpose: null,
205
211
  external: streamDB.external,
206
212
  };
207
213
 
@@ -833,6 +833,7 @@ shaka.offline.Storage = class {
833
833
  appMetadata: metadata,
834
834
  isIncomplete: true,
835
835
  sequenceMode: manifest.sequenceMode,
836
+ type: manifest.type,
836
837
  };
837
838
 
838
839
  return {manifestDB, toDownload};
@@ -1146,10 +1147,6 @@ shaka.offline.Storage = class {
1146
1147
  const playerInterface = {
1147
1148
  networkingEngine: networkingEngine,
1148
1149
 
1149
- // No need to apply CMCD data for offline requests
1150
- modifyManifestRequest: (request, manifestInfo) => {},
1151
- modifySegmentRequest: (request, segmentInfo) => {},
1152
-
1153
1150
  // Don't bother filtering now. We will do that later when we have all the
1154
1151
  // information we need to filter.
1155
1152
  filter: () => Promise.resolve(),
@@ -1311,6 +1308,7 @@ shaka.offline.Storage = class {
1311
1308
  hdr: stream.hdr,
1312
1309
  kind: stream.kind,
1313
1310
  language: stream.language,
1311
+ originalLanguage: stream.originalLanguage,
1314
1312
  label: stream.label,
1315
1313
  width: stream.width || null,
1316
1314
  height: stream.height || null,