shaka-player 3.2.2 → 3.3.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 (156) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +1 -1
  3. package/.github/ISSUE_TEMPLATE/question.md +1 -1
  4. package/AUTHORS +6 -5
  5. package/CHANGELOG.md +247 -0
  6. package/CONTRIBUTORS +4 -2
  7. package/build/types/core +3 -0
  8. package/build/types/offline +1 -0
  9. package/build/types/polyfill +1 -0
  10. package/build/types/ui +2 -0
  11. package/demo/common/assets.js +18 -0
  12. package/demo/common/message_ids.js +13 -1
  13. package/demo/config.js +31 -1
  14. package/demo/index.html +1 -1
  15. package/demo/locales/en.json +12 -0
  16. package/demo/locales/source.json +48 -0
  17. package/dist/controls.css +26 -2
  18. package/dist/controls.css.map +1 -1
  19. package/dist/demo.compiled.debug.js +19 -16
  20. package/dist/demo.compiled.debug.map +3 -3
  21. package/dist/demo.compiled.js +19 -16
  22. package/dist/demo.compiled.map +3 -3
  23. package/dist/deps.js +18 -11
  24. package/dist/locales.js +28 -26
  25. package/dist/receiver.compiled.debug.js +11 -9
  26. package/dist/receiver.compiled.debug.map +3 -3
  27. package/dist/receiver.compiled.js +11 -9
  28. package/dist/receiver.compiled.map +3 -3
  29. package/dist/shaka-player.compiled.d.ts +205 -15
  30. package/dist/shaka-player.compiled.debug.d.ts +205 -15
  31. package/dist/shaka-player.compiled.debug.externs.js +256 -6
  32. package/dist/shaka-player.compiled.debug.js +406 -354
  33. package/dist/shaka-player.compiled.debug.map +4 -4
  34. package/dist/shaka-player.compiled.externs.js +256 -6
  35. package/dist/shaka-player.compiled.js +826 -800
  36. package/dist/shaka-player.compiled.map +4 -4
  37. package/dist/shaka-player.ui.d.ts +221 -16
  38. package/dist/shaka-player.ui.debug.d.ts +221 -16
  39. package/dist/shaka-player.ui.debug.externs.js +283 -6
  40. package/dist/shaka-player.ui.debug.js +547 -476
  41. package/dist/shaka-player.ui.debug.map +4 -4
  42. package/dist/shaka-player.ui.externs.js +283 -6
  43. package/dist/shaka-player.ui.js +1019 -980
  44. package/dist/shaka-player.ui.map +4 -4
  45. package/docs/design/bg-fetch-after.gv +29 -0
  46. package/docs/design/bg-fetch-after.gv.png +0 -0
  47. package/docs/design/bg-fetch-before.gv +18 -0
  48. package/docs/design/bg-fetch-before.gv.png +0 -0
  49. package/docs/design/bg-fetch.md +134 -0
  50. package/docs/tutorials/blob-url.md +15 -0
  51. package/docs/tutorials/index.json +1 -0
  52. package/docs/tutorials/ui-customization.md +66 -0
  53. package/docs/tutorials/ui.md +5 -5
  54. package/externs/ima.js +3 -0
  55. package/externs/shaka/ads.js +5 -0
  56. package/externs/shaka/manifest.js +12 -1
  57. package/externs/shaka/manifest_parser.js +10 -1
  58. package/externs/shaka/net.js +20 -4
  59. package/externs/shaka/offline.js +31 -2
  60. package/externs/shaka/player.js +130 -5
  61. package/externs/shaka/text.js +14 -0
  62. package/externs/webcrypto.js +18 -0
  63. package/lib/abr/ewma.js +14 -0
  64. package/lib/abr/ewma_bandwidth_estimator.js +16 -2
  65. package/lib/abr/simple_abr_manager.js +6 -0
  66. package/lib/ads/client_side_ad.js +8 -0
  67. package/lib/ads/client_side_ad_manager.js +8 -4
  68. package/lib/ads/server_side_ad.js +7 -0
  69. package/lib/cast/cast_utils.js +1 -0
  70. package/lib/dash/dash_parser.js +48 -14
  71. package/lib/dash/segment_base.js +25 -1
  72. package/lib/dash/segment_list.js +18 -9
  73. package/lib/dash/segment_template.js +23 -10
  74. package/lib/hls/hls_parser.js +86 -23
  75. package/lib/media/quality_observer.js +291 -0
  76. package/lib/media/segment_index.js +6 -0
  77. package/lib/media/segment_reference.js +18 -3
  78. package/lib/media/streaming_engine.js +42 -4
  79. package/lib/net/http_fetch_plugin.js +31 -11
  80. package/lib/net/http_plugin_utils.js +1 -0
  81. package/lib/net/http_xhr_plugin.js +40 -14
  82. package/lib/net/networking_engine.js +81 -18
  83. package/lib/offline/download_info.js +68 -0
  84. package/lib/offline/download_manager.js +13 -5
  85. package/lib/offline/indexeddb/base_storage_cell.js +35 -0
  86. package/lib/offline/indexeddb/storage_mechanism.js +1 -1
  87. package/lib/offline/indexeddb/v5_storage_cell.js +5 -0
  88. package/lib/offline/storage.js +393 -284
  89. package/lib/offline/stored_content_utils.js +2 -0
  90. package/lib/player.js +206 -7
  91. package/lib/polyfill/random_uuid.js +52 -0
  92. package/lib/text/cue.js +12 -0
  93. package/lib/text/ttml_text_parser.js +25 -2
  94. package/lib/text/ui_text_displayer.js +2 -2
  95. package/lib/util/cmcd_manager.js +826 -0
  96. package/lib/util/error.js +6 -0
  97. package/lib/util/language_utils.js +12 -0
  98. package/lib/util/mutex.js +52 -0
  99. package/lib/util/periods.js +98 -64
  100. package/lib/util/player_configuration.js +18 -0
  101. package/package.json +1 -1
  102. package/shaka-player.uncompiled.js +3 -0
  103. package/test/dash/dash_parser_content_protection_unit.js +2 -0
  104. package/test/dash/dash_parser_live_unit.js +101 -1
  105. package/test/dash/dash_parser_manifest_unit.js +35 -1
  106. package/test/dash/dash_parser_segment_base_unit.js +2 -0
  107. package/test/dash/dash_parser_segment_list_unit.js +2 -1
  108. package/test/dash/dash_parser_segment_template_unit.js +2 -1
  109. package/test/hls/hls_live_unit.js +2 -0
  110. package/test/hls/hls_parser_unit.js +2 -0
  111. package/test/media/quality_observer_unit.js +139 -0
  112. package/test/media/segment_reference_unit.js +16 -1
  113. package/test/media/streaming_engine_integration.js +2 -1
  114. package/test/media/streaming_engine_unit.js +2 -0
  115. package/test/net/http_plugin_unit.js +20 -15
  116. package/test/offline/storage_integration.js +108 -4
  117. package/test/player_integration.js +99 -0
  118. package/test/test/util/dash_parser_util.js +4 -0
  119. package/test/test/util/fake_ad.js +7 -0
  120. package/test/test/util/fake_drm_engine.js +9 -2
  121. package/test/test/util/manifest_generator.js +3 -2
  122. package/test/test/util/test_scheme.js +14 -1
  123. package/test/text/ttml_text_parser_unit.js +47 -0
  124. package/test/ui/ui_unit.js +250 -0
  125. package/test/util/cmcd_manager_unit.js +277 -0
  126. package/ui/airplay_button.js +1 -0
  127. package/ui/audio_language_selection.js +7 -0
  128. package/ui/cast_button.js +1 -0
  129. package/ui/context_menu.js +109 -0
  130. package/ui/controls.js +41 -7
  131. package/ui/controls.less +1 -0
  132. package/ui/enums.js +4 -0
  133. package/ui/externs/ui.js +28 -1
  134. package/ui/fast_forward_button.js +14 -5
  135. package/ui/fullscreen_button.js +1 -0
  136. package/ui/less/buttons.less +0 -4
  137. package/ui/less/containers.less +74 -0
  138. package/ui/less/overflow_menu.less +0 -10
  139. package/ui/less/tooltip.less +97 -0
  140. package/ui/locales/en.json +1 -0
  141. package/ui/locales/source.json +4 -0
  142. package/ui/loop_button.js +5 -0
  143. package/ui/mute_button.js +2 -1
  144. package/ui/overflow_menu.js +5 -25
  145. package/ui/pip_button.js +5 -0
  146. package/ui/play_button.js +2 -2
  147. package/ui/playback_rate_selection.js +8 -9
  148. package/ui/resolution_selection.js +7 -0
  149. package/ui/rewind_button.js +15 -6
  150. package/ui/seek_bar.js +4 -2
  151. package/ui/settings_menu.js +36 -4
  152. package/ui/small_play_button.js +1 -0
  153. package/ui/statistics_button.js +253 -0
  154. package/ui/text_selection.js +11 -4
  155. package/ui/ui.js +30 -0
  156. package/ui/volume_bar.js +1 -1
@@ -395,6 +395,13 @@ declare namespace shaka {
395
395
  * <code>detach</code>, or <code>unload</code>.
396
396
  */
397
397
  unload (initializeMediaSource ? : boolean ) : Promise < any > ;
398
+ /**
399
+ * Provides a way to update the stream start position during the media loading
400
+ * process. Can for example be called from the <code>manifestparsed</code>
401
+ * event handler to update the start position based on information in the
402
+ * manifest.
403
+ */
404
+ updateStartTime (startTime : number ) : any ;
398
405
  /**
399
406
  * Return whether the browser provides basic support. If this returns false,
400
407
  * Shaka Player cannot be used at all. In this case, do not construct a
@@ -628,6 +635,7 @@ declare namespace shaka.ads {
628
635
  getSequenceLength ( ) : any ;
629
636
  getTimeUntilSkippable ( ) : any ;
630
637
  getVolume ( ) : any ;
638
+ isLinear ( ) : any ;
631
639
  isMuted ( ) : any ;
632
640
  isPaused ( ) : any ;
633
641
  isSkippable ( ) : any ;
@@ -653,6 +661,7 @@ declare namespace shaka.ads {
653
661
  getSequenceLength ( ) : any ;
654
662
  getTimeUntilSkippable ( ) : any ;
655
663
  getVolume ( ) : any ;
664
+ isLinear ( ) : any ;
656
665
  isMuted ( ) : any ;
657
666
  isPaused ( ) : any ;
658
667
  isSkippable ( ) : any ;
@@ -816,7 +825,7 @@ declare namespace shaka.media {
816
825
  */
817
826
  class InitSegmentReference {
818
827
  private noStructuralTyping_shaka_media_InitSegmentReference : any;
819
- constructor (uris : ( ) => string [] , startByte : number , endByte : number | null ) ;
828
+ constructor (uris : ( ) => string [] , startByte : number , endByte : number | null , mediaQuality ? : null | shaka.extern.MediaQualityInfo ) ;
820
829
  /**
821
830
  * Returns the offset from the start of the resource to the end of the
822
831
  * segment, inclusive. A value of null indicates that the segment extends
@@ -1166,14 +1175,14 @@ declare namespace shaka.net {
1166
1175
  * logic as Shaka when determining support.
1167
1176
  */
1168
1177
  static isSupported ( ) : boolean ;
1169
- static parse (uri : string , request : shaka.extern.Request , requestType : shaka.net.NetworkingEngine.RequestType , progressUpdated : shaka.extern.ProgressUpdated ) : shaka.extern.IAbortableOperation < any > ;
1178
+ static parse (uri : string , request : shaka.extern.Request , requestType : shaka.net.NetworkingEngine.RequestType , progressUpdated : shaka.extern.ProgressUpdated , headersReceived : shaka.extern.HeadersReceived ) : shaka.extern.IAbortableOperation < any > ;
1170
1179
  }
1171
1180
  }
1172
1181
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
1173
1182
  declare namespace shaka.net {
1174
1183
  class HttpXHRPlugin {
1175
1184
  private noStructuralTyping_shaka_net_HttpXHRPlugin : any;
1176
- static parse (uri : string , request : shaka.extern.Request , requestType : shaka.net.NetworkingEngine.RequestType , progressUpdated : shaka.extern.ProgressUpdated ) : shaka.extern.IAbortableOperation < any > ;
1185
+ static parse (uri : string , request : shaka.extern.Request , requestType : shaka.net.NetworkingEngine.RequestType , progressUpdated : shaka.extern.ProgressUpdated , headersReceived : shaka.extern.HeadersReceived ) : shaka.extern.IAbortableOperation < any > ;
1177
1186
  }
1178
1187
  }
1179
1188
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
@@ -1190,7 +1199,7 @@ declare namespace shaka.net {
1190
1199
  * handle the actual request. A plugin is registered using registerScheme.
1191
1200
  * Each scheme has at most one plugin to handle the request.
1192
1201
  */
1193
- constructor (onProgressUpdated ? : (a : number , b : number ) => any ) ;
1202
+ constructor (onProgressUpdated ? : (a : number , b : number ) => any , onHeadersReceived ? : shaka.net.NetworkingEngine.OnHeadersReceived , onDownloadFailed ? : shaka.net.NetworkingEngine.OnDownloadFailed ) ;
1194
1203
  /**
1195
1204
  * Clears all request filters.
1196
1205
  */
@@ -1259,6 +1268,14 @@ declare namespace shaka.net.NetworkingEngine {
1259
1268
  }
1260
1269
  }
1261
1270
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
1271
+ declare namespace shaka.net.NetworkingEngine {
1272
+ type OnDownloadFailed = (a : shaka.extern.Request , b : shaka.util.Error | null , c : number , d : boolean ) => any ;
1273
+ }
1274
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
1275
+ declare namespace shaka.net.NetworkingEngine {
1276
+ type OnHeadersReceived = (a : { [ key: string ]: string } , b : shaka.extern.Request , c : shaka.net.NetworkingEngine.RequestType ) => any ;
1277
+ }
1278
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
1262
1279
  declare namespace shaka.net.NetworkingEngine {
1263
1280
  /**
1264
1281
  * A pending network request. This can track the current progress of the
@@ -1559,6 +1576,16 @@ declare namespace shaka.polyfill {
1559
1576
  }
1560
1577
  }
1561
1578
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
1579
+ declare namespace shaka.polyfill {
1580
+ class RandomUUID {
1581
+ private noStructuralTyping_shaka_polyfill_RandomUUID : any;
1582
+ /**
1583
+ * Install the polyfill if needed.
1584
+ */
1585
+ static install ( ) : any ;
1586
+ }
1587
+ }
1588
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
1562
1589
  declare namespace shaka.polyfill {
1563
1590
  class StorageEstimate {
1564
1591
  private noStructuralTyping_shaka_polyfill_StorageEstimate : any;
@@ -1640,6 +1667,8 @@ declare namespace shaka.text {
1640
1667
  startTime : any ;
1641
1668
  textAlign : any ;
1642
1669
  textDecoration : any ;
1670
+ textStrokeColor : any ;
1671
+ textStrokeWidth : any ;
1643
1672
  wrapLine : any ;
1644
1673
  writingMode : any ;
1645
1674
  }
@@ -2003,6 +2032,23 @@ declare namespace shaka.util {
2003
2032
  }
2004
2033
  }
2005
2034
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
2035
+ declare namespace shaka.util.CmcdManager {
2036
+ type ManifestInfo = { format : shaka.util.CmcdManager.StreamingFormat } ;
2037
+ }
2038
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
2039
+ declare namespace shaka.util.CmcdManager {
2040
+ type SegmentInfo = { bandwidth ? : number , codecs : string , duration : number , init : boolean , mimeType : string , type : string } ;
2041
+ }
2042
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
2043
+ declare namespace shaka.util.CmcdManager {
2044
+ enum StreamingFormat {
2045
+ DASH = 'd' ,
2046
+ HLS = 'h' ,
2047
+ OTHER = 'o' ,
2048
+ SMOOTH = 's' ,
2049
+ }
2050
+ }
2051
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
2006
2052
  declare namespace shaka.util {
2007
2053
  class ConfigUtils {
2008
2054
  private noStructuralTyping_shaka_util_ConfigUtils : any;
@@ -2207,6 +2253,7 @@ declare namespace shaka.util.Error {
2207
2253
  MEDIA_SOURCE_OPERATION_THREW = 3015.0 ,
2208
2254
  MISSING_STORAGE_CELL = 9013.0 ,
2209
2255
  MISSING_TEXT_PLUGIN = 2014.0 ,
2256
+ MODIFY_OPERATION_NOT_SUPPORTED = 9016.0 ,
2210
2257
  MP4_SIDX_INVALID_TIMESCALE = 3005.0 ,
2211
2258
  MP4_SIDX_TYPE_NOT_SUPPORTED = 3006.0 ,
2212
2259
  MP4_SIDX_WRONG_BOX_TYPE = 3004.0 ,
@@ -2401,6 +2448,120 @@ declare namespace shaka.util {
2401
2448
  }
2402
2449
  }
2403
2450
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
2451
+ declare namespace shaka.util {
2452
+ class LanguageUtils {
2453
+ private noStructuralTyping_shaka_util_LanguageUtils : any;
2454
+ /**
2455
+ * Check if |locale1| and |locale2| are language-compatible.
2456
+ * Language compatible is when the language component of each locale matches.
2457
+ * This means that no matter what region they have (or don't have) as long as
2458
+ * the language components match, they are language-compatible.
2459
+ * Examples:
2460
+ * Locale A | Locale B | Language-Compatible
2461
+ * -----------------------------------------
2462
+ * en-US | en-US | true
2463
+ * en-US | en | true
2464
+ * en-US | en-CA | true
2465
+ * en-CA | fr-CA | false
2466
+ */
2467
+ static areLanguageCompatible (locale1 : string , locale2 : string ) : boolean ;
2468
+ /**
2469
+ * Check if |locale1| and |locale2| are locale-compatible.
2470
+ * Locale-compatible is defined as all components in each locale match. Since
2471
+ * we only respect the language and region components, we only check that
2472
+ * the language and region components match.
2473
+ * Examples:
2474
+ * Locale A | Locale B | Locale Compatible
2475
+ * ---------------------------------------
2476
+ * en-US | en-US | true
2477
+ * en | en-US | false
2478
+ * en-US | en-CA | false
2479
+ */
2480
+ static areLocaleCompatible (locale1 : string , locale2 : string ) : boolean ;
2481
+ /**
2482
+ * Check if two language codes are siblings. Language codes are siblings if
2483
+ * they share the same base language while neither one is the base language.
2484
+ * For example, "en-US" and "en-CA" are siblings but "en-US" and "en" are not
2485
+ * siblings.
2486
+ */
2487
+ static areSiblings (a : string , b : string ) : boolean ;
2488
+ /**
2489
+ * Find the locale in |searchSpace| that comes closest to |target|. If no
2490
+ * locale is found to be close to |target|, then |null| will be returned.
2491
+ */
2492
+ static findClosestLocale (target : string , searchSpace : Iterable < string > ) : string | null ;
2493
+ /**
2494
+ * Get the normalized base language for a language code.
2495
+ */
2496
+ static getBase (lang : string ) : string ;
2497
+ /**
2498
+ * Get the normalized language of the given text stream. Will return 'und' if
2499
+ * a language is not found on the text stream.
2500
+ * This should always be used to get the language from a text stream.
2501
+ */
2502
+ static getLocaleForText (stream : shaka.extern.Stream ) : string ;
2503
+ /**
2504
+ * Get the normalized locale for the given variant. This will look through
2505
+ * the variant to find the locale that represents the content in the variant.
2506
+ * This will return 'und' if no language can be found.
2507
+ * This should always be used to get the locale from a variant.
2508
+ */
2509
+ static getLocaleForVariant (variant : shaka.extern.Variant ) : string ;
2510
+ /**
2511
+ * Check if |possibleParent| is the parent locale of |possibleChild|. Because
2512
+ * we do not support dialects, the parent-child relationship is a lot simpler.
2513
+ * In a parent child relationship:
2514
+ * - The parent and child have the same language-component
2515
+ * - The parent has no region-component
2516
+ * - The child has a region-component
2517
+ * Example:
2518
+ * Locale A | Locale B | Is A The parent of B?
2519
+ * --------------------------------------------
2520
+ * en-US | en-US | no
2521
+ * en-US | en | no
2522
+ * en | en-US | yes
2523
+ * en | en | no
2524
+ * en | fr | no
2525
+ */
2526
+ static isParentOf (possibleParent : string , possibleChild : string ) : boolean ;
2527
+ /**
2528
+ * Check if |localeA| shares the same parent with |localeB|. Since we don't
2529
+ * support dialect, we will only look at language and region. For two locales
2530
+ * to be siblings:
2531
+ * - Both must have language-components
2532
+ * - Both must have region-components
2533
+ * - Both must have the same language-component
2534
+ * Example:
2535
+ * Locale A | Locale B | Siblings?
2536
+ * --------------------------------------------
2537
+ * en-US | en-US | yes
2538
+ * en-US | en-CA | yes
2539
+ * en-US | en | no
2540
+ * en | en-US | no
2541
+ * en | en | no
2542
+ * en | fr | no
2543
+ */
2544
+ static isSiblingOf (localeA : string , localeB : string ) : boolean ;
2545
+ /**
2546
+ * Normalize a locale. This will take a locale and canonicalize it to a state
2547
+ * that we are prepared to work with.
2548
+ * We only support with:
2549
+ * - language
2550
+ * - language-REGION
2551
+ * If given a dialect, we will discard it. We will convert any 3-character
2552
+ * codes to 2-character codes. We will force language codes to lowercase and
2553
+ * region codes to uppercase.
2554
+ */
2555
+ static normalize (locale : string ) : string ;
2556
+ /**
2557
+ * Compute a numerical relatedness for language codes. Language codes with a
2558
+ * higher relatedness are a better match. Unrelated language codes have a
2559
+ * relatedness score of 0.
2560
+ */
2561
+ static relatedness (target : string , candidate : string ) : number ;
2562
+ }
2563
+ }
2564
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
2404
2565
  declare namespace shaka.util {
2405
2566
  class Mp4Parser {
2406
2567
  private noStructuralTyping_shaka_util_Mp4Parser : any;
@@ -3165,6 +3326,7 @@ declare namespace shaka.extern {
3165
3326
  getSequenceLength ( ) : number ;
3166
3327
  getTimeUntilSkippable ( ) : number ;
3167
3328
  getVolume ( ) : number ;
3329
+ isLinear ( ) : boolean ;
3168
3330
  isMuted ( ) : boolean ;
3169
3331
  isPaused ( ) : boolean ;
3170
3332
  isSkippable ( ) : boolean ;
@@ -3245,7 +3407,7 @@ declare namespace shaka.extern {
3245
3407
  }
3246
3408
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/manifest.js
3247
3409
  declare namespace shaka.extern {
3248
- type Stream = { audioSamplingRate : number | null , bandwidth ? : number , channelsCount : number | null , closedCaptions : Map < string , string > | null , codecs : string , createSegmentIndex : shaka.extern.CreateSegmentIndexFunction , drmInfos : shaka.extern.DrmInfo [] , emsgSchemeIdUris : string [] | null , encrypted : boolean , forced : boolean , frameRate ? : number , hdr ? : string , height ? : number , id : number , keyIds : Set < string > , kind ? : string , label : string | null , language : string , mimeType : string , originalId : string | null , pixelAspectRatio ? : string , primary : boolean , roles : string [] , segmentIndex : shaka.media.SegmentIndex | null , spatialAudio : boolean , tilesLayout ? : string , trickModeVideo : any , type : string , width ? : number } ;
3410
+ type Stream = { audioSamplingRate : number | null , bandwidth ? : number , channelsCount : number | null , closeSegmentIndex ? : ( ) => any , closedCaptions : Map < string , string > | null , codecs : string , createSegmentIndex : shaka.extern.CreateSegmentIndexFunction , drmInfos : shaka.extern.DrmInfo [] , emsgSchemeIdUris : string [] | null , encrypted : boolean , forced : boolean , frameRate ? : number , hdr ? : string , height ? : number , id : number , keyIds : Set < string > , kind ? : string , label : string | null , language : string , matchedStreams ? : any [] , mimeType : string , originalId : string | null , pixelAspectRatio ? : string , primary : boolean , roles : string [] , segmentIndex : shaka.media.SegmentIndex | null , spatialAudio : boolean , tilesLayout ? : string , trickModeVideo : any , type : string , width ? : number } ;
3249
3411
  }
3250
3412
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/manifest.js
3251
3413
  declare namespace shaka.extern {
@@ -3324,13 +3486,17 @@ declare namespace shaka.extern.ManifestParser {
3324
3486
  }
3325
3487
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/manifest_parser.js
3326
3488
  declare namespace shaka.extern.ManifestParser {
3327
- type PlayerInterface = { enableLowLatencyMode : ( ) => any , filter : (a : shaka.extern.Manifest ) => Promise < any > , isAutoLowLatencyMode : ( ) => boolean , isLowLatencyMode : ( ) => boolean , makeTextStreamsForClosedCaptions : (a : shaka.extern.Manifest ) => any , networkingEngine : shaka.net.NetworkingEngine , onError : (a : shaka.util.Error ) => any , onEvent : shaka.util.EventManager.ListenerType , onTimelineRegionAdded : (a : shaka.extern.TimelineRegionInfo ) => any } ;
3489
+ type PlayerInterface = { enableLowLatencyMode : ( ) => any , filter : (a : shaka.extern.Manifest ) => Promise < any > , isAutoLowLatencyMode : ( ) => boolean , isLowLatencyMode : ( ) => boolean , makeTextStreamsForClosedCaptions : (a : shaka.extern.Manifest ) => any , modifyManifestRequest : (a : shaka.extern.Request , b : shaka.util.CmcdManager.ManifestInfo ) => any , modifySegmentRequest : (a : shaka.extern.Request , b : shaka.util.CmcdManager.SegmentInfo ) => any , networkingEngine : shaka.net.NetworkingEngine , onError : (a : shaka.util.Error ) => any , onEvent : shaka.util.EventManager.ListenerType , onTimelineRegionAdded : (a : shaka.extern.TimelineRegionInfo ) => any } ;
3328
3490
  }
3329
3491
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/mp4_parser.js
3330
3492
  declare namespace shaka.extern {
3331
3493
  type ParsedBox = { flags : number | null , has64BitSize : boolean , parser : shaka.util.Mp4Parser , partialOkay : boolean , reader : shaka.util.DataViewReader , size : number , start : number , version : number | null } ;
3332
3494
  }
3333
3495
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/net.js
3496
+ declare namespace shaka.extern {
3497
+ type HeadersReceived = (a : { [ key: string ]: string } ) => any ;
3498
+ }
3499
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/net.js
3334
3500
  declare namespace shaka.extern {
3335
3501
  type ProgressUpdated = (a : number , b : number , c : number ) => any ;
3336
3502
  }
@@ -3350,7 +3516,7 @@ declare namespace shaka.extern {
3350
3516
  }
3351
3517
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/net.js
3352
3518
  declare namespace shaka.extern {
3353
- type Response = { data : ArrayBuffer | ArrayBufferView , fromCache ? : boolean , headers : { [ key: string ]: string } , timeMs ? : number , uri : string } ;
3519
+ type Response = { data : ArrayBuffer | ArrayBufferView , fromCache ? : boolean , headers : { [ key: string ]: string } , status ? : number , timeMs ? : number , uri : string } ;
3354
3520
  }
3355
3521
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/net.js
3356
3522
  declare namespace shaka.extern {
@@ -3367,7 +3533,7 @@ declare namespace shaka.extern {
3367
3533
  }
3368
3534
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/net.js
3369
3535
  declare namespace shaka.extern {
3370
- type SchemePlugin = (a : string , b : shaka.extern.Request , c : shaka.net.NetworkingEngine.RequestType , d : shaka.extern.ProgressUpdated ) => shaka.extern.IAbortableOperation < shaka.extern.Response > ;
3536
+ type SchemePlugin = (a : string , b : shaka.extern.Request , c : shaka.net.NetworkingEngine.RequestType , d : shaka.extern.ProgressUpdated , e : shaka.extern.HeadersReceived ) => shaka.extern.IAbortableOperation < shaka.extern.Response > ;
3371
3537
  }
3372
3538
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/offline.js
3373
3539
  declare namespace shaka.extern {
@@ -3401,7 +3567,7 @@ declare namespace shaka.extern {
3401
3567
  }
3402
3568
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/offline.js
3403
3569
  declare namespace shaka.extern {
3404
- type ManifestDB = { appMetadata : object | null , creationTime : number , drmInfo : shaka.extern.DrmInfo | null , duration : number , expiration : number , originalManifestUri : string , sessionIds : string [] , size : number , streams : shaka.extern.StreamDB [] } ;
3570
+ type ManifestDB = { appMetadata : object | null , creationTime : number , drmInfo : shaka.extern.DrmInfo | null , duration : number , expiration : number , isIncomplete ? : boolean , originalManifestUri : string , sessionIds : string [] , size : number , streams : shaka.extern.StreamDB [] } ;
3405
3571
  }
3406
3572
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/offline.js
3407
3573
  declare namespace shaka.extern {
@@ -3409,7 +3575,7 @@ declare namespace shaka.extern {
3409
3575
  }
3410
3576
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/offline.js
3411
3577
  declare namespace shaka.extern {
3412
- type SegmentDB = { appendWindowEnd : number , appendWindowStart : number , dataKey : number , endTime : number , initSegmentKey : number | null , startTime : number , tilesLayout : string | null , timestampOffset : number } ;
3578
+ type SegmentDB = { appendWindowEnd : number , appendWindowStart : number , dataKey : number , endTime : number , initSegmentKey : number | null , pendingInitSegmentRefId ? : string , pendingSegmentRefId ? : string , startTime : number , tilesLayout : string | null , timestampOffset : number } ;
3413
3579
  }
3414
3580
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/offline.js
3415
3581
  declare namespace shaka.extern {
@@ -3479,6 +3645,10 @@ declare namespace shaka.extern {
3479
3645
  * @param onRemove A callback for when a segment is removed from the cell. The key of the segment will be passed to the callback.
3480
3646
  */
3481
3647
  removeSegments (keys : number [] , onRemove : (a : number ) => any ) : Promise < any > ;
3648
+ /**
3649
+ * Updates the given manifest, stored at the given key.
3650
+ */
3651
+ updateManifest (key : number , manifest : shaka.extern.ManifestDB ) : Promise < any > ;
3482
3652
  /**
3483
3653
  * Replace the expiration time of the manifest stored under |key| with
3484
3654
  * |newExpiration|. If no manifest is found under |key| then this should
@@ -3533,7 +3703,7 @@ declare namespace shaka.extern {
3533
3703
  }
3534
3704
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/offline.js
3535
3705
  declare namespace shaka.extern {
3536
- type StoredContent = { appMetadata : object | null , duration : number , expiration : number , offlineUri : string | null , originalManifestUri : string , size : number , tracks : shaka.extern.TrackList } ;
3706
+ type StoredContent = { appMetadata : object | null , duration : number , expiration : number , isIncomplete : boolean , offlineUri : string | null , originalManifestUri : string , size : number , tracks : shaka.extern.TrackList } ;
3537
3707
  }
3538
3708
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/offline.js
3539
3709
  declare namespace shaka.extern {
@@ -3581,7 +3751,11 @@ declare namespace shaka.extern {
3581
3751
  }
3582
3752
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3583
3753
  declare namespace shaka.extern {
3584
- type AbrConfiguration = { bandwidthDowngradeTarget : number , bandwidthUpgradeTarget : number , defaultBandwidthEstimate : number , enabled : boolean , restrictions : shaka.extern.Restrictions , switchInterval : number , useNetworkInformation : boolean } ;
3754
+ type AbrConfiguration = { advanced : shaka.extern.AdvancedAbrConfiguration , bandwidthDowngradeTarget : number , bandwidthUpgradeTarget : number , defaultBandwidthEstimate : number , enabled : boolean , restrictions : shaka.extern.Restrictions , switchInterval : number , useNetworkInformation : boolean } ;
3755
+ }
3756
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3757
+ declare namespace shaka.extern {
3758
+ type AdvancedAbrConfiguration = { fastHalfLife : number , minBytes : number , minTotalBytes : number , slowHalfLife : number } ;
3585
3759
  }
3586
3760
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3587
3761
  declare namespace shaka.extern {
@@ -3600,6 +3774,10 @@ declare namespace shaka.extern {
3600
3774
  type Chapter = { endTime : number , startTime : number , title : string } ;
3601
3775
  }
3602
3776
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3777
+ declare namespace shaka.extern {
3778
+ type CmcdConfiguration = { contentId : string , enabled : boolean , sessionId : string , useHeaders : boolean } ;
3779
+ }
3780
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3603
3781
  declare namespace shaka.extern {
3604
3782
  type DashManifestConfiguration = { autoCorrectDrift : boolean , clockSyncUri : string , disableXlinkProcessing : boolean , ignoreDrmInfo : boolean , ignoreEmptyAdaptationSet : boolean , ignoreMaxSegmentDuration : boolean , ignoreMinBufferTime : boolean , ignoreSuggestedPresentationDelay : boolean , initialSegmentLimit : number , keySystemsByURI : { [ key: string ]: string } , manifestPreprocessor : (a : Element ) => any , xlinkFailGracefully : boolean } ;
3605
3783
  }
@@ -3617,7 +3795,7 @@ declare namespace shaka.extern {
3617
3795
  }
3618
3796
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3619
3797
  declare namespace shaka.extern {
3620
- type HlsManifestConfiguration = { ignoreImageStreamFailures : boolean , ignoreTextStreamFailures : boolean , useFullSegmentsForStartTime : boolean } ;
3798
+ type HlsManifestConfiguration = { defaultAudioCodec : string , defaultVideoCodec : string , ignoreImageStreamFailures : boolean , ignoreTextStreamFailures : boolean , useFullSegmentsForStartTime : boolean } ;
3621
3799
  }
3622
3800
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3623
3801
  declare namespace shaka.extern {
@@ -3632,12 +3810,16 @@ declare namespace shaka.extern {
3632
3810
  type ManifestConfiguration = { availabilityWindowOverride : number , dash : shaka.extern.DashManifestConfiguration , defaultPresentationDelay : number , disableAudio : boolean , disableText : boolean , disableThumbnails : boolean , disableVideo : boolean , hls : shaka.extern.HlsManifestConfiguration , retryParameters : shaka.extern.RetryParameters } ;
3633
3811
  }
3634
3812
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3813
+ declare namespace shaka.extern {
3814
+ type MediaQualityInfo = { audioSamplingRate : number | null , bandwidth : number , channelsCount : number | null , codecs : string , contentType : string , frameRate : number | null , height : number | null , mimeType : string | null , pixelAspectRatio : string | null , width : number | null } ;
3815
+ }
3816
+ // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3635
3817
  declare namespace shaka.extern {
3636
3818
  type OfflineConfiguration = { downloadSizeCallback : (a : number ) => Promise < boolean > , progressCallback : (a : shaka.extern.StoredContent , b : number ) => any , trackSelectionCallback : (a : shaka.extern.TrackList ) => Promise < shaka.extern.TrackList > , usePersistentLicense : boolean } ;
3637
3819
  }
3638
3820
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3639
3821
  declare namespace shaka.extern {
3640
- type PlayerConfiguration = { abr : shaka.extern.AbrConfiguration , abrFactory : shaka.extern.AbrManager.Factory , drm : shaka.extern.DrmConfiguration , manifest : shaka.extern.ManifestConfiguration , offline : shaka.extern.OfflineConfiguration , playRangeEnd : number , playRangeStart : number , preferForcedSubs : boolean , preferredAudioChannelCount : number , preferredAudioCodecs : string [] , preferredAudioLanguage : string , preferredDecodingAttributes : string [] , preferredTextLanguage : string , preferredTextRole : string , preferredVariantRole : string , preferredVideoCodecs : string [] , restrictions : shaka.extern.Restrictions , streaming : shaka.extern.StreamingConfiguration , textDisplayFactory : shaka.extern.TextDisplayer.Factory } ;
3822
+ type PlayerConfiguration = { abr : shaka.extern.AbrConfiguration , abrFactory : shaka.extern.AbrManager.Factory , cmcd : shaka.extern.CmcdConfiguration , drm : shaka.extern.DrmConfiguration , manifest : shaka.extern.ManifestConfiguration , offline : shaka.extern.OfflineConfiguration , playRangeEnd : number , playRangeStart : number , preferForcedSubs : boolean , preferredAudioChannelCount : number , preferredAudioCodecs : string [] , preferredAudioLanguage : string , preferredDecodingAttributes : string [] , preferredTextLanguage : string , preferredTextRole : string , preferredVariantRole : string , preferredVideoCodecs : string [] , restrictions : shaka.extern.Restrictions , streaming : shaka.extern.StreamingConfiguration , textDisplayFactory : shaka.extern.TextDisplayer.Factory } ;
3641
3823
  }
3642
3824
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3643
3825
  declare namespace shaka.extern {
@@ -3653,7 +3835,7 @@ declare namespace shaka.extern {
3653
3835
  }
3654
3836
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3655
3837
  declare namespace shaka.extern {
3656
- type StreamingConfiguration = { alwaysStreamText : boolean , autoLowLatencyMode : boolean , bufferBehind : number , bufferingGoal : number , durationBackoff : number , failureCallback : (a : shaka.util.Error ) => any , forceHTTPS : boolean , forceTransmuxTS : boolean , gapDetectionThreshold : number , ignoreTextStreamFailures : boolean , inaccurateManifestTolerance : number , jumpLargeGaps : boolean , lowLatencyMode : boolean , preferNativeHls : boolean , rebufferingGoal : number , retryParameters : shaka.extern.RetryParameters , safeSeekOffset : number , smallGapLimit : number , stallEnabled : boolean , stallSkip : number , stallThreshold : number , startAtSegmentBoundary : boolean , updateIntervalSeconds : number , useNativeHlsOnSafari : boolean } ;
3838
+ type StreamingConfiguration = { alwaysStreamText : boolean , autoLowLatencyMode : boolean , bufferBehind : number , bufferingGoal : number , dispatchAllEmsgBoxes : boolean , durationBackoff : number , failureCallback : (a : shaka.util.Error ) => any , forceHTTPS : boolean , forceTransmuxTS : boolean , gapDetectionThreshold : number , ignoreTextStreamFailures : boolean , inaccurateManifestTolerance : number , jumpLargeGaps : boolean , lowLatencyMode : boolean , observeQualityChanges : boolean , preferNativeHls : boolean , rebufferingGoal : number , retryParameters : shaka.extern.RetryParameters , safeSeekOffset : number , smallGapLimit : number , stallEnabled : boolean , stallSkip : number , stallThreshold : number , startAtSegmentBoundary : boolean , updateIntervalSeconds : number , useNativeHlsOnSafari : boolean } ;
3657
3839
  }
3658
3840
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/externs/shaka/player.js
3659
3841
  declare namespace shaka.extern {
@@ -3826,6 +4008,14 @@ declare namespace shaka.extern {
3826
4008
  * and line through. Empty array means no decoration.
3827
4009
  */
3828
4010
  textDecoration : shaka.text.Cue.textDecoration [] ;
4011
+ /**
4012
+ * Text stroke color as a CSS color, e.g. "#FFFFFF" or "white".
4013
+ */
4014
+ textStrokeColor : string ;
4015
+ /**
4016
+ * Text stroke width as a CSS stroke-width value.
4017
+ */
4018
+ textStrokeWidth : string ;
3829
4019
  /**
3830
4020
  * Whether or not line wrapping should be applied to the cue.
3831
4021
  */