shaka-player 4.3.11 → 4.4.1

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 (315) hide show
  1. package/AUTHORS +9 -0
  2. package/CHANGELOG.md +303 -202
  3. package/CONTRIBUTORS +8 -0
  4. package/LICENSE +32 -0
  5. package/README.md +63 -10
  6. package/demo/autoTemplate.txt +40 -5
  7. package/demo/close_button.js +11 -0
  8. package/demo/common/asset.js +13 -1
  9. package/demo/common/assets.js +53 -3
  10. package/demo/common/message_ids.js +25 -1
  11. package/demo/config.js +69 -10
  12. package/demo/customWarning.txt +2 -2
  13. package/demo/index.html +3 -1
  14. package/demo/locales/en.json +26 -2
  15. package/demo/locales/source.json +105 -9
  16. package/demo/main.js +52 -9
  17. package/demo/search.js +3 -1
  18. package/demo/service_worker.js +3 -0
  19. package/dist/controls.css +1 -1
  20. package/dist/controls.css.map +1 -1
  21. package/dist/demo.compiled.debug.js +124 -112
  22. package/dist/demo.compiled.debug.map +3 -3
  23. package/dist/demo.compiled.js +124 -112
  24. package/dist/demo.compiled.map +3 -3
  25. package/dist/deps.js +46 -28
  26. package/dist/locales.js +33 -33
  27. package/dist/receiver.compiled.debug.js +52 -46
  28. package/dist/receiver.compiled.debug.map +3 -3
  29. package/dist/receiver.compiled.js +52 -46
  30. package/dist/receiver.compiled.map +3 -3
  31. package/dist/shaka-player.compiled.d.ts +676 -391
  32. package/dist/shaka-player.compiled.debug.d.ts +676 -391
  33. package/dist/shaka-player.compiled.debug.externs.js +1188 -616
  34. package/dist/shaka-player.compiled.debug.js +1043 -699
  35. package/dist/shaka-player.compiled.debug.map +4 -4
  36. package/dist/shaka-player.compiled.externs.js +1188 -616
  37. package/dist/shaka-player.compiled.js +1091 -929
  38. package/dist/shaka-player.compiled.map +4 -4
  39. package/dist/shaka-player.ui.d.ts +677 -392
  40. package/dist/shaka-player.ui.debug.d.ts +677 -392
  41. package/dist/shaka-player.ui.debug.externs.js +1023 -451
  42. package/dist/shaka-player.ui.debug.js +1098 -737
  43. package/dist/shaka-player.ui.debug.map +4 -4
  44. package/dist/shaka-player.ui.externs.js +1023 -451
  45. package/dist/shaka-player.ui.js +1246 -1071
  46. package/dist/shaka-player.ui.map +4 -4
  47. package/docs/tutorials/ad_monetization.md +15 -1
  48. package/docs/tutorials/application-level-redirects.md +1 -1
  49. package/docs/tutorials/config.md +9 -5
  50. package/docs/tutorials/drm-config.md +61 -0
  51. package/docs/tutorials/fairplay.md +19 -4
  52. package/docs/tutorials/license-server-auth.md +4 -4
  53. package/docs/tutorials/license-wrapping.md +2 -2
  54. package/docs/tutorials/ui-customization.md +7 -3
  55. package/docs/tutorials/ui.md +7 -7
  56. package/docs/tutorials/upgrade.md +3 -0
  57. package/externs/ima.js +123 -2
  58. package/externs/isoboxer.js +217 -0
  59. package/externs/mediakeys.js +18 -0
  60. package/externs/mux.js +1 -105
  61. package/externs/pictureinpicture.js +48 -0
  62. package/externs/shaka/ads.js +61 -1
  63. package/externs/shaka/cea.js +110 -0
  64. package/externs/shaka/codecs.js +32 -0
  65. package/externs/shaka/manifest.js +101 -1
  66. package/externs/shaka/manifest_parser.js +0 -10
  67. package/externs/shaka/net.js +36 -7
  68. package/externs/shaka/offline.js +8 -1
  69. package/externs/shaka/player.js +220 -21
  70. package/externs/shaka/text.js +1 -382
  71. package/externs/shaka/transmuxer.js +60 -0
  72. package/karma.conf.js +13 -0
  73. package/lib/abr/simple_abr_manager.js +6 -3
  74. package/lib/ads/ad_manager.js +60 -2
  75. package/lib/ads/client_side_ad.js +86 -0
  76. package/lib/ads/client_side_ad_manager.js +79 -3
  77. package/lib/ads/server_side_ad.js +86 -0
  78. package/lib/ads/server_side_ad_manager.js +13 -0
  79. package/lib/cast/cast_utils.js +1 -0
  80. package/lib/cea/cea608_data_channel.js +24 -14
  81. package/lib/cea/cea608_memory.js +5 -2
  82. package/lib/cea/cea708_service.js +8 -9
  83. package/lib/cea/cea708_window.js +1 -2
  84. package/lib/cea/cea_decoder.js +23 -6
  85. package/lib/cea/cea_utils.js +25 -2
  86. package/lib/cea/dummy_caption_decoder.js +21 -0
  87. package/lib/cea/dummy_cea_parser.js +1 -3
  88. package/lib/cea/mp4_cea_parser.js +15 -10
  89. package/lib/cea/ts_cea_parser.js +69 -0
  90. package/lib/dash/content_protection.js +32 -2
  91. package/lib/dash/dash_parser.js +93 -31
  92. package/lib/dash/mpd_utils.js +6 -25
  93. package/lib/dash/segment_base.js +12 -14
  94. package/lib/dash/segment_list.js +10 -6
  95. package/lib/dash/segment_template.js +349 -32
  96. package/lib/dependencies/all.js +8 -0
  97. package/lib/hls/hls_classes.js +33 -8
  98. package/lib/hls/hls_parser.js +805 -191
  99. package/lib/hls/manifest_text_parser.js +4 -14
  100. package/lib/media/adaptation_set_criteria.js +43 -3
  101. package/lib/media/closed_caption_parser.js +74 -12
  102. package/lib/media/drm_engine.js +189 -49
  103. package/lib/media/gap_jumping_controller.js +1 -1
  104. package/lib/media/manifest_parser.js +34 -0
  105. package/lib/media/media_source_capabilities.js +10 -0
  106. package/lib/media/media_source_engine.js +495 -231
  107. package/lib/media/playhead.js +1 -1
  108. package/lib/media/presentation_timeline.js +62 -0
  109. package/lib/media/segment_index.js +50 -14
  110. package/lib/media/segment_prefetch.js +277 -0
  111. package/lib/media/segment_reference.js +70 -4
  112. package/lib/media/streaming_engine.js +258 -81
  113. package/lib/media/video_wrapper.js +15 -7
  114. package/lib/mss/content_protection.js +353 -0
  115. package/lib/mss/mss_parser.js +1082 -0
  116. package/lib/net/networking_engine.js +60 -10
  117. package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
  118. package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
  119. package/lib/offline/manifest_converter.js +6 -0
  120. package/lib/offline/storage.js +2 -4
  121. package/lib/player.js +309 -105
  122. package/lib/polyfill/media_capabilities.js +43 -3
  123. package/lib/polyfill/patchedmediakeys_apple.js +5 -0
  124. package/lib/polyfill/patchedmediakeys_nop.js +5 -0
  125. package/lib/polyfill/patchedmediakeys_webkit.js +5 -0
  126. package/lib/text/cue.js +208 -130
  127. package/lib/text/lrc_text_parser.js +2 -2
  128. package/lib/text/mp4_vtt_parser.js +2 -2
  129. package/lib/text/sbv_text_parser.js +1 -1
  130. package/lib/text/simple_text_displayer.js +1 -1
  131. package/lib/text/srt_text_parser.js +9 -1
  132. package/lib/text/ssa_text_parser.js +2 -2
  133. package/lib/text/text_engine.js +3 -21
  134. package/lib/text/text_utils.js +71 -20
  135. package/lib/text/ui_text_displayer.js +14 -14
  136. package/lib/text/vtt_text_parser.js +22 -14
  137. package/lib/transmuxer/aac_transmuxer.js +224 -0
  138. package/lib/transmuxer/ac3.js +142 -0
  139. package/lib/transmuxer/ac3_transmuxer.js +213 -0
  140. package/lib/transmuxer/adts.js +232 -0
  141. package/lib/transmuxer/ec3.js +103 -0
  142. package/lib/transmuxer/ec3_transmuxer.js +213 -0
  143. package/lib/transmuxer/h264.js +324 -0
  144. package/lib/transmuxer/mp3_transmuxer.js +205 -0
  145. package/lib/transmuxer/mpeg_audio.js +196 -0
  146. package/lib/transmuxer/mpeg_ts_transmuxer.js +182 -0
  147. package/lib/transmuxer/mss_transmuxer.js +389 -0
  148. package/lib/{media/transmuxer.js → transmuxer/muxjs_transmuxer.js} +34 -80
  149. package/lib/transmuxer/transmuxer_engine.js +161 -0
  150. package/lib/transmuxer/ts_transmuxer.js +721 -0
  151. package/lib/util/cmcd_manager.js +131 -71
  152. package/lib/util/error.js +62 -26
  153. package/lib/util/exp_golomb.js +220 -0
  154. package/lib/util/fairplay_utils.js +64 -13
  155. package/lib/util/id3_utils.js +56 -3
  156. package/lib/util/language_utils.js +11 -8
  157. package/lib/util/manifest_parser_utils.js +3 -0
  158. package/lib/util/mime_utils.js +44 -7
  159. package/lib/util/mp4_box_parsers.js +233 -5
  160. package/lib/util/mp4_generator.js +1388 -0
  161. package/lib/util/periods.js +40 -34
  162. package/lib/util/platform.js +17 -3
  163. package/lib/util/player_configuration.js +38 -1
  164. package/lib/util/stream_utils.js +138 -27
  165. package/lib/util/text_parser.js +1 -1
  166. package/lib/util/ts_parser.js +460 -74
  167. package/lib/util/xml_utils.js +16 -3
  168. package/maintained-branches.md +2 -2
  169. package/package.json +3 -1
  170. package/roadmap.md +21 -6
  171. package/shaka-player.uncompiled.js +18 -0
  172. package/test/abr/simple_abr_manager_unit.js +32 -4
  173. package/test/ads/ad_manager_unit.js +18 -2
  174. package/test/cast/cast_utils_unit.js +7 -2
  175. package/test/cea/cea608_memory_unit.js +24 -0
  176. package/test/cea/cea_decoder_unit.js +33 -0
  177. package/test/dash/dash_parser_content_protection_unit.js +93 -3
  178. package/test/dash/dash_parser_live_unit.js +56 -13
  179. package/test/dash/dash_parser_manifest_unit.js +70 -2
  180. package/test/dash/dash_parser_segment_base_unit.js +14 -9
  181. package/test/dash/dash_parser_segment_template_unit.js +286 -6
  182. package/test/demo/demo_unit.js +5 -1
  183. package/test/hls/hls_live_unit.js +188 -28
  184. package/test/hls/hls_parser_unit.js +250 -109
  185. package/test/hls/manifest_text_parser_unit.js +18 -13
  186. package/test/media/adaptation_set_criteria_unit.js +46 -14
  187. package/test/media/adaptation_set_unit.js +2 -0
  188. package/test/media/drm_engine_integration.js +11 -8
  189. package/test/media/drm_engine_unit.js +220 -7
  190. package/test/media/media_source_engine_integration.js +124 -40
  191. package/test/media/media_source_engine_unit.js +133 -153
  192. package/test/media/playhead_unit.js +3 -0
  193. package/test/media/presentation_timeline_unit.js +51 -0
  194. package/test/media/segment_index_unit.js +52 -0
  195. package/test/media/segment_prefetch_unit.js +243 -0
  196. package/test/media/streaming_engine_integration.js +9 -3
  197. package/test/media/streaming_engine_unit.js +440 -59
  198. package/test/mss/mss_parser_content_protection_unit.js +49 -0
  199. package/test/mss/mss_parser_unit.js +472 -0
  200. package/test/mss/mss_player_integration.js +123 -0
  201. package/test/offline/manifest_convert_unit.js +9 -0
  202. package/test/offline/storage_integration.js +6 -1
  203. package/test/player_unit.js +386 -133
  204. package/test/polyfill/media_capabilities_unit.js +18 -0
  205. package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
  206. package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
  207. package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
  208. package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
  209. package/test/test/assets/hls-raw-aac/manifest.m3u8 +4 -0
  210. package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +14 -0
  211. package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
  212. package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
  213. package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
  214. package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
  215. package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
  216. package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
  217. package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
  218. package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
  219. package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +31 -0
  220. package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
  221. package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
  222. package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
  223. package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
  224. package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
  225. package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
  226. package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
  227. package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
  228. package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +31 -0
  229. package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +13 -0
  230. package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
  231. package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
  232. package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
  233. package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
  234. package/test/test/assets/hls-raw-mp3/playlist.m3u8 +4 -0
  235. package/test/test/assets/hls-ts-aac/playlist.m3u8 +23 -0
  236. package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
  237. package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
  238. package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
  239. package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
  240. package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
  241. package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
  242. package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
  243. package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
  244. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
  245. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
  246. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
  247. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
  248. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
  249. package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
  250. package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +19 -0
  251. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
  252. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
  253. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
  254. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
  255. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
  256. package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
  257. package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +19 -0
  258. package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
  259. package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
  260. package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
  261. package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
  262. package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
  263. package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
  264. package/test/test/assets/hls-ts-h264/prog_index.m3u8 +25 -0
  265. package/test/test/assets/hls-ts-mp3/manifest.m3u8 +13 -0
  266. package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
  267. package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
  268. package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
  269. package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
  270. package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +17 -0
  271. package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
  272. package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
  273. package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
  274. package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
  275. package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
  276. package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
  277. package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +4 -0
  278. package/test/test/boot.js +7 -2
  279. package/test/test/util/fake_ad.js +99 -0
  280. package/test/test/util/fake_ad_manager.js +7 -1
  281. package/test/test/util/fake_networking_engine.js +41 -14
  282. package/test/test/util/fake_segment_prefetch.js +81 -0
  283. package/test/test/util/manifest_generator.js +19 -5
  284. package/test/test/util/mss_parser_util.js +115 -0
  285. package/test/test/util/offline_utils.js +1 -0
  286. package/test/test/util/simple_fakes.js +12 -3
  287. package/test/test/util/streaming_engine_util.js +14 -4
  288. package/test/test/util/ttml_utils.js +2 -2
  289. package/test/text/cue_integration.js +1 -1
  290. package/test/text/srt_text_parser_unit.js +78 -0
  291. package/test/text/text_engine_unit.js +17 -8
  292. package/test/text/ui_text_displayer_unit.js +4 -4
  293. package/test/text/vtt_text_parser_unit.js +59 -40
  294. package/test/text/web_vtt_generator_unit.js +9 -3
  295. package/test/{media/transmuxer_integration.js → transmuxer/muxjs_transmuxer_integration.js} +30 -33
  296. package/test/transmuxer/transmuxer_engine_integration.js +60 -0
  297. package/test/transmuxer/transmuxer_integration.js +296 -0
  298. package/test/util/cmcd_manager_unit.js +162 -13
  299. package/test/util/language_utils_unit.js +9 -2
  300. package/test/util/mp4_box_parsers_unit.js +39 -4
  301. package/test/util/periods_unit.js +34 -26
  302. package/test/util/stream_utils_unit.js +60 -107
  303. package/ui/controls.js +19 -1
  304. package/ui/controls.less +1 -0
  305. package/ui/externs/ui.js +11 -1
  306. package/ui/language_utils.js +15 -0
  307. package/ui/less/thumbnails.less +26 -0
  308. package/ui/locales/oc.json +42 -0
  309. package/ui/pip_button.js +83 -2
  310. package/ui/range_element.js +15 -0
  311. package/ui/resolution_selection.js +9 -2
  312. package/ui/seek_bar.js +223 -0
  313. package/ui/ui.js +5 -0
  314. package/lib/cea/i_caption_decoder.js +0 -51
  315. package/lib/cea/i_cea_parser.js +0 -68
package/demo/main.js CHANGED
@@ -296,7 +296,32 @@ shakaDemo.Main = class {
296
296
  text = text.replace(replaceString, value);
297
297
  };
298
298
  fillInTemplate('RE:player', shaka.Player.version);
299
- fillInTemplate('RE:link', window.location.href);
299
+ if (this.selectedAsset) {
300
+ const uriLines = [];
301
+ const addLine = (key, value) => {
302
+ uriLines.push(key + '= `' + value + '`');
303
+ };
304
+ addLine('uri', this.selectedAsset.manifestUri);
305
+ if (this.selectedAsset.adTagUri) {
306
+ addLine('ad tag uri', this.selectedAsset.adTagUri);
307
+ }
308
+ if (this.selectedAsset.licenseServers.size) {
309
+ const uri = this.selectedAsset.licenseServers.values().next().value;
310
+ addLine('license server', uri);
311
+ for (const drmSystem of this.selectedAsset.licenseServers.keys()) {
312
+ if (!shakaDemo.Main.commonDrmSystems.includes(drmSystem)) {
313
+ addLine('drm system', drmSystem);
314
+ break;
315
+ }
316
+ }
317
+ }
318
+ if (this.selectedAsset.certificateUri) {
319
+ addLine('certificate', this.selectedAsset.certificateUri);
320
+ }
321
+ fillInTemplate('RE:uris', uriLines.join('\n'));
322
+ } else {
323
+ fillInTemplate('RE:uris', 'No asset');
324
+ }
300
325
  fillInTemplate('RE:browser', navigator.userAgent);
301
326
  if (this.selectedAsset &&
302
327
  this.selectedAsset.source == shakaAssets.Source.CUSTOM) {
@@ -308,11 +333,14 @@ shakaDemo.Main = class {
308
333
  fillInTemplate('RE:customwarning\n', '');
309
334
  }
310
335
 
336
+ const urlTerms = [];
337
+ urlTerms.push('labels=type%3A+bug');
338
+ urlTerms.push('body=' + encodeURIComponent(text));
339
+ const url = 'https://github.com/shaka-project/shaka-player/issues/new?' +
340
+ urlTerms.join('&');
341
+
311
342
  // Navigate to the github issue opening interface, with the
312
- // partially-filled template as a preset body.
313
- let url = 'https://github.com/shaka-project/shaka-player/issues/new?';
314
- url += 'body=' + encodeURIComponent(text);
315
- // Open in another tab.
343
+ // partially-filled template as a preset body, opening in another tab.
316
344
  window.open(url, '_blank');
317
345
  }
318
346
 
@@ -743,6 +771,10 @@ shakaDemo.Main = class {
743
771
  !this.support_.manifest['m3u8']) {
744
772
  return shakaDemo.MessageIds.UNSUPPORTED_NO_HLS_SUPPORT;
745
773
  }
774
+ if (asset.features.includes(shakaAssets.Feature.MSS) &&
775
+ !this.support_.manifest['ism']) {
776
+ return shakaDemo.MessageIds.UNSUPPORTED_NO_MSS_SUPPORT;
777
+ }
746
778
 
747
779
  // Does the asset contain a playable mime type?
748
780
  const mimeTypes = [];
@@ -1185,6 +1217,10 @@ shakaDemo.Main = class {
1185
1217
  if (document.pictureInPictureElement) {
1186
1218
  document.exitPictureInPicture();
1187
1219
  }
1220
+ if (window.documentPictureInPicture &&
1221
+ window.documentPictureInPicture.window) {
1222
+ window.documentPictureInPicture.window.close();
1223
+ }
1188
1224
  this.player_.unload();
1189
1225
 
1190
1226
  // The currently-selected asset changed, so update asset cards.
@@ -1219,9 +1255,8 @@ shakaDemo.Main = class {
1219
1255
  // Remove all not-player-applied configurations, by resetting the
1220
1256
  // configuration then re-applying the desired configuration.
1221
1257
  this.player_.resetConfiguration();
1222
- this.player_.configure(this.desiredConfig_);
1258
+ this.readHash_();
1223
1259
  this.player_.configure(assetConfig);
1224
- // This uses Player.configure so as to not change |this.desiredConfig_|.
1225
1260
  }
1226
1261
 
1227
1262
  const config = storage ?
@@ -1328,6 +1363,10 @@ shakaDemo.Main = class {
1328
1363
  extraText.kind, extraText.mime, extraText.codecs);
1329
1364
  }
1330
1365
 
1366
+ for (const extraThumbnail of asset.extraThumbnail) {
1367
+ this.player_.addThumbnailsTrack(extraThumbnail);
1368
+ }
1369
+
1331
1370
  // If the asset has an ad tag attached to it, load the ads
1332
1371
  const adManager = this.player_.getAdManager();
1333
1372
  if (adManager && asset.adTagUri) {
@@ -1336,7 +1375,8 @@ shakaDemo.Main = class {
1336
1375
  // If that happens, just proceed to load.
1337
1376
  goog.asserts.assert(this.video_ != null, 'this.video should exist!');
1338
1377
  adManager.initClientSide(
1339
- this.controls_.getClientSideAdContainer(), this.video_);
1378
+ this.controls_.getClientSideAdContainer(), this.video_,
1379
+ /** adsRenderingSettings= **/ null);
1340
1380
  const adRequest = new google.ima.AdsRequest();
1341
1381
  adRequest.adTagUrl = asset.adTagUri;
1342
1382
  adManager.requestClientSideAds(adRequest);
@@ -1392,7 +1432,10 @@ shakaDemo.Main = class {
1392
1432
  // NaN != NaN, so there has to be a special check for it to prevent
1393
1433
  // false positives.
1394
1434
  const bothAreNaN = isNaN(currentValue) && isNaN(defaultValue);
1395
- if (currentValue != defaultValue && !bothAreNaN) {
1435
+ // Strings count as NaN too, so check for them specifically.
1436
+ const bothAreStrings = (typeof currentValue) == 'string' &&
1437
+ (typeof defaultValue) == 'string';
1438
+ if (currentValue != defaultValue && (!bothAreNaN || bothAreStrings)) {
1396
1439
  // Don't bother saving in the hash unless it's a non-default value.
1397
1440
  params.push(hashName + '=' + currentValue);
1398
1441
  }
package/demo/search.js CHANGED
@@ -359,7 +359,7 @@ shakaDemo.Search = class {
359
359
  /* docLink= */ null);
360
360
  this.makeSelectInput_(coreContainer,
361
361
  shakaDemo.MessageIds.MANIFEST_SEARCH,
362
- [Feature.DASH, Feature.HLS], FEATURE);
362
+ [Feature.DASH, Feature.HLS, Feature.MSS], FEATURE);
363
363
  this.makeSelectInput_(coreContainer,
364
364
  shakaDemo.MessageIds.CONTAINER_SEARCH,
365
365
  [Feature.MP4, Feature.MP2TS, Feature.WEBM, Feature.CONTAINERLESS],
@@ -403,6 +403,8 @@ shakaDemo.Search = class {
403
403
  shakaDemo.MessageIds.THUMBNAILS);
404
404
  this.makeBooleanInput_(specialContainer, Feature.LCEVC, FEATURE,
405
405
  shakaDemo.MessageIds.LCEVC);
406
+ this.makeBooleanInput_(specialContainer, Feature.LOW_LATENCY_STREAM,
407
+ FEATURE, shakaDemo.MessageIds.LOW_LATENCY_STREAM);
406
408
 
407
409
  container.appendChild(this.resultsDiv_);
408
410
  }
@@ -95,6 +95,9 @@ const OPTIONAL_RESOURCES = [
95
95
  // The mux.js transmuxing library for MPEG-2 TS and CEA support.
96
96
  '../node_modules/mux.js/dist/mux.min.js',
97
97
 
98
+ // The codem-isoboxer library for MSS support.
99
+ '../node_modules/codem-isoboxer/dist/iso_boxer.min.js',
100
+
98
101
  // The cast sender SDK.
99
102
  'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js',
100
103
 
package/dist/controls.css CHANGED
@@ -51,4 +51,4 @@
51
51
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
52
52
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
53
53
  * SOFTWARE.
54
- */.shaka-tooltips-on{overflow:visible}.shaka-tooltips-on>[class*=shaka-tooltip]{position:relative}.shaka-tooltips-on>[class*=shaka-tooltip]:active:after,.shaka-tooltips-on>[class*=shaka-tooltip]:focus-visible:after,.shaka-tooltips-on>[class*=shaka-tooltip]:hover:after{content:attr(aria-label);font-family:Roboto-Regular,Roboto,sans-serif;line-height:calc(32px / 2);white-space:nowrap;font-size:13px;background:rgba(35 35 35 / 90%);color:#fff;border-radius:3px;padding:5px 10px;position:absolute;bottom:calc(32px + 5px);left:calc(32px / 2);-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}.shaka-tooltips-on>.shaka-tooltip-status:active:after,.shaka-tooltips-on>.shaka-tooltip-status:focus-visible:after,.shaka-tooltips-on>.shaka-tooltip-status:hover:after{content:attr(aria-label) " (" attr(shaka-status) ")"}.shaka-tooltips-on button:first-child:active:after,.shaka-tooltips-on button:first-child:focus-visible:after,.shaka-tooltips-on button:first-child:hover:after{left:0;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.shaka-tooltips-on button:last-child:active:after,.shaka-tooltips-on button:last-child:focus-visible:after,.shaka-tooltips-on button:last-child:hover:after{left:32px;-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);-ms-transform:translateX(-100%);-o-transform:translateX(-100%);transform:translateX(-100%)}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons Round';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialiconsround/v108/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmM.otf) format('opentype')}.material-icons-round{font-family:'Material Icons Round';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}/*# sourceMappingURL=controls.css.map */
54
+ */.shaka-tooltips-on{overflow:visible}.shaka-tooltips-on>[class*=shaka-tooltip]{position:relative}.shaka-tooltips-on>[class*=shaka-tooltip]:active:after,.shaka-tooltips-on>[class*=shaka-tooltip]:focus-visible:after,.shaka-tooltips-on>[class*=shaka-tooltip]:hover:after{content:attr(aria-label);font-family:Roboto-Regular,Roboto,sans-serif;line-height:calc(32px / 2);white-space:nowrap;font-size:13px;background:rgba(35 35 35 / 90%);color:#fff;border-radius:3px;padding:5px 10px;position:absolute;bottom:calc(32px + 5px);left:calc(32px / 2);-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}.shaka-tooltips-on>.shaka-tooltip-status:active:after,.shaka-tooltips-on>.shaka-tooltip-status:focus-visible:after,.shaka-tooltips-on>.shaka-tooltip-status:hover:after{content:attr(aria-label) " (" attr(shaka-status) ")"}.shaka-tooltips-on button:first-child:active:after,.shaka-tooltips-on button:first-child:focus-visible:after,.shaka-tooltips-on button:first-child:hover:after{left:0;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.shaka-tooltips-on button:last-child:active:after,.shaka-tooltips-on button:last-child:focus-visible:after,.shaka-tooltips-on button:last-child:hover:after{left:32px;-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);-ms-transform:translateX(-100%);-o-transform:translateX(-100%);transform:translateX(-100%)}#shaka-player-ui-thumbnail-container{background-color:#000;border:1px solid #000;box-shadow:0 8px 8px 0 rgba(0,0,0,.5);min-width:150px;overflow:hidden;position:absolute;visibility:hidden;width:15%;z-index:1}#shaka-player-ui-thumbnail-container #shaka-player-ui-thumbnail-image{position:absolute}#shaka-player-ui-thumbnail-container #shaka-player-ui-thumbnail-time{background-color:rgba(0,0,0,.5);bottom:0;color:#fff;font-size:16px;left:0;position:absolute;right:0;text-align:center}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype')}@font-face{font-family:'Material Icons Round';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialiconsround/v108/LDItaoyNOAY6Uewc665JcIzCKsKc_M9flwmM.otf) format('opentype')}.material-icons-round{font-family:'Material Icons Round';font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr}/*# sourceMappingURL=controls.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["$stdin"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["$stdin"],"names":[],"mappings":"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"}