shaka-player 4.1.1 → 4.2.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 (179) hide show
  1. package/.github/workflows/build-and-test.yaml +67 -15
  2. package/.github/workflows/compute-incremental-coverage.py +251 -0
  3. package/.github/workflows/report-incremental-coverage.yaml +39 -0
  4. package/.github/workflows/selenium-lab-tests.yaml +44 -1
  5. package/AUTHORS +1 -0
  6. package/CHANGELOG.md +36 -8
  7. package/CONTRIBUTORS +3 -0
  8. package/README.md +20 -6
  9. package/demo/common/assets.js +25 -0
  10. package/demo/common/message_ids.js +2 -0
  11. package/demo/config.js +5 -1
  12. package/demo/index.html +1 -3
  13. package/demo/locales/en.json +2 -0
  14. package/demo/locales/source.json +8 -0
  15. package/dist/controls.css +1 -1
  16. package/dist/demo.compiled.debug.js +25 -23
  17. package/dist/demo.compiled.debug.map +3 -3
  18. package/dist/demo.compiled.js +25 -23
  19. package/dist/demo.compiled.map +3 -3
  20. package/dist/deps.js +6 -5
  21. package/dist/locales.js +30 -30
  22. package/dist/receiver.compiled.debug.js +24 -22
  23. package/dist/receiver.compiled.debug.map +3 -3
  24. package/dist/receiver.compiled.js +24 -22
  25. package/dist/receiver.compiled.map +3 -3
  26. package/dist/shaka-player.compiled.d.ts +69 -5
  27. package/dist/shaka-player.compiled.debug.d.ts +69 -5
  28. package/dist/shaka-player.compiled.debug.externs.js +111 -42
  29. package/dist/shaka-player.compiled.debug.js +352 -301
  30. package/dist/shaka-player.compiled.debug.map +4 -4
  31. package/dist/shaka-player.compiled.externs.js +111 -42
  32. package/dist/shaka-player.compiled.js +823 -802
  33. package/dist/shaka-player.compiled.map +4 -4
  34. package/dist/shaka-player.ui.d.ts +69 -5
  35. package/dist/shaka-player.ui.debug.d.ts +69 -5
  36. package/dist/shaka-player.ui.debug.externs.js +111 -42
  37. package/dist/shaka-player.ui.debug.js +360 -310
  38. package/dist/shaka-player.ui.debug.map +4 -4
  39. package/dist/shaka-player.ui.externs.js +111 -42
  40. package/dist/shaka-player.ui.js +980 -957
  41. package/dist/shaka-player.ui.map +4 -4
  42. package/docs/tutorials/fairplay.md +149 -0
  43. package/docs/tutorials/ui.md +6 -6
  44. package/docs/tutorials/upgrade.md +1 -0
  45. package/docs/tutorials/welcome.md +6 -3
  46. package/externs/shaka/abr_manager.js +8 -0
  47. package/externs/shaka/manifest.js +43 -0
  48. package/externs/shaka/player.js +13 -2
  49. package/karma.conf.js +3 -11
  50. package/lib/abr/simple_abr_manager.js +72 -4
  51. package/lib/ads/client_side_ad_manager.js +1 -1
  52. package/lib/dash/dash_parser.js +5 -0
  53. package/lib/hls/hls_parser.js +123 -27
  54. package/lib/media/drm_engine.js +1 -3
  55. package/lib/media/media_source_engine.js +57 -24
  56. package/lib/media/presentation_timeline.js +24 -1
  57. package/lib/media/segment_index.js +8 -0
  58. package/lib/media/segment_reference.js +7 -1
  59. package/lib/media/streaming_engine.js +42 -6
  60. package/lib/media/time_ranges_utils.js +46 -0
  61. package/lib/net/networking_engine.js +1 -0
  62. package/lib/player.js +8 -6
  63. package/lib/polyfill/media_capabilities.js +9 -0
  64. package/lib/polyfill/patchedmediakeys_apple.js +729 -0
  65. package/lib/polyfill/videoplaybackquality.js +3 -1
  66. package/lib/text/cue.js +0 -5
  67. package/lib/text/simple_text_displayer.js +21 -9
  68. package/lib/text/ui_text_displayer.js +83 -19
  69. package/lib/text/vtt_text_parser.js +61 -4
  70. package/lib/util/buffer_utils.js +3 -0
  71. package/lib/util/error.js +21 -1
  72. package/lib/util/fairplay_utils.js +100 -2
  73. package/lib/util/object_utils.js +1 -0
  74. package/lib/util/platform.js +30 -1
  75. package/lib/util/player_configuration.js +3 -10
  76. package/lib/util/stream_utils.js +23 -3
  77. package/lib/util/string_utils.js +102 -13
  78. package/maintained-branches.md +15 -0
  79. package/package.json +3 -5
  80. package/shaka-player.uncompiled.js +1 -0
  81. package/test/hls/hls_parser_unit.js +49 -33
  82. package/test/media/drm_engine_integration.js +24 -8
  83. package/test/media/media_source_engine_integration.js +24 -10
  84. package/test/media/media_source_engine_unit.js +53 -38
  85. package/test/media/streaming_engine_unit.js +107 -32
  86. package/test/test/util/fake_media_source_engine.js +10 -9
  87. package/test/test/util/simple_fakes.js +4 -0
  88. package/test/test/util/streaming_engine_util.js +10 -2
  89. package/test/text/simple_text_displayer_unit.js +27 -0
  90. package/test/text/ui_text_displayer_unit.js +65 -0
  91. package/test/text/vtt_text_parser_unit.js +26 -0
  92. package/test/util/string_utils_unit.js +46 -8
  93. package/ui/text_selection.js +2 -2
  94. package/app-engine/README.md +0 -9
  95. package/app-engine/demo-version-index/README.md +0 -14
  96. package/app-engine/demo-version-index/app.yaml +0 -28
  97. package/app-engine/demo-version-index/generate.py +0 -164
  98. package/app-engine/demo-version-index/main.py +0 -11
  99. package/app-engine/demo-version-index/requirements.txt +0 -5
  100. package/app-engine/demo-version-index/templates/index.html +0 -114
  101. package/app-engine/shaka-player-demo/README.md +0 -18
  102. package/app-engine/shaka-player-demo/app.yaml +0 -61
  103. package/app-engine/shaka-player-demo/main.py +0 -95
  104. package/app-engine/shaka-player-demo/posters/10yo.png +0 -0
  105. package/app-engine/shaka-player-demo/posters/10yo.xcf +0 -0
  106. package/app-engine/shaka-player-demo/posters/1yo.jpg +0 -0
  107. package/app-engine/shaka-player-demo/posters/2yo.png +0 -0
  108. package/app-engine/shaka-player-demo/posters/2yo.xcf +0 -0
  109. package/app-engine/shaka-player-demo/posters/3yo.png +0 -0
  110. package/app-engine/shaka-player-demo/posters/3yo.xcf +0 -0
  111. package/app-engine/shaka-player-demo/posters/4yo.png +0 -0
  112. package/app-engine/shaka-player-demo/posters/4yo.xcf +0 -0
  113. package/app-engine/shaka-player-demo/posters/5yo.png +0 -0
  114. package/app-engine/shaka-player-demo/posters/5yo.xcf +0 -0
  115. package/app-engine/shaka-player-demo/posters/6yo.png +0 -0
  116. package/app-engine/shaka-player-demo/posters/6yo.xcf +0 -0
  117. package/app-engine/shaka-player-demo/posters/7yo.png +0 -0
  118. package/app-engine/shaka-player-demo/posters/7yo.xcf +0 -0
  119. package/app-engine/shaka-player-demo/posters/8yo.png +0 -0
  120. package/app-engine/shaka-player-demo/posters/8yo.xcf +0 -0
  121. package/app-engine/shaka-player-demo/posters/9yo.png +0 -0
  122. package/app-engine/shaka-player-demo/posters/9yo.xcf +0 -0
  123. package/app-engine/shaka-player-demo/posters/audioOnly.gif +0 -0
  124. package/app-engine/shaka-player-demo/posters/audioRickRoll.gif +0 -0
  125. package/app-engine/shaka-player-demo/posters/colorbars.gif +0 -0
  126. package/app-engine/shaka-player-demo/posters/fireworks.jpg +0 -0
  127. package/app-engine/shaka-player-demo/posters/party-hat.png +0 -0
  128. package/app-engine/shaka-player-demo/posters/sources.txt +0 -46
  129. package/app-engine/shaka-player-demo/posters/standard.png +0 -0
  130. package/app-engine/shaka-player-demo/posters/trek.jpg +0 -0
  131. package/app-engine/shaka-player-demo/posters/valentines.png +0 -0
  132. package/app-engine/shaka-player-demo/posters/zombie.jpg +0 -0
  133. package/app-engine/shaka-player-demo/posters.py +0 -110
  134. package/app-engine/shaka-player-demo/requirements.txt +0 -5
  135. package/app-engine/shaka-player-demo/time.txt +0 -1
  136. package/build/README.md +0 -127
  137. package/build/__init__.py +0 -0
  138. package/build/all.py +0 -150
  139. package/build/apps.py +0 -186
  140. package/build/build.py +0 -392
  141. package/build/check.py +0 -354
  142. package/build/checkversion.py +0 -84
  143. package/build/compiler.py +0 -513
  144. package/build/conformance.textproto +0 -335
  145. package/build/docker/Dockerfile +0 -20
  146. package/build/docker/docker-compose.yml +0 -10
  147. package/build/docs.py +0 -54
  148. package/build/eslint-plugin-shaka-rules/arg-comment-spacing.js +0 -72
  149. package/build/eslint-plugin-shaka-rules/index.js +0 -24
  150. package/build/eslint-plugin-shaka-rules/package.json +0 -7
  151. package/build/eslint-plugin-shaka-rules/private.js +0 -109
  152. package/build/gendeps.py +0 -71
  153. package/build/generateExterns.js +0 -867
  154. package/build/generateLocalizations.py +0 -262
  155. package/build/generateTsDefs.py +0 -137
  156. package/build/install-linux-prereqs.sh +0 -136
  157. package/build/license-header +0 -5
  158. package/build/misspellings.txt +0 -39
  159. package/build/pixelsChanged.js +0 -35
  160. package/build/shaka-lab.yaml +0 -161
  161. package/build/shakaBuildHelpers.py +0 -356
  162. package/build/stats.py +0 -816
  163. package/build/subprocessWindowsPatch.py +0 -103
  164. package/build/test.py +0 -541
  165. package/build/types/ads +0 -8
  166. package/build/types/cast +0 -6
  167. package/build/types/cea +0 -13
  168. package/build/types/complete +0 -9
  169. package/build/types/core +0 -108
  170. package/build/types/dash +0 -8
  171. package/build/types/hls +0 -9
  172. package/build/types/manifests +0 -5
  173. package/build/types/networking +0 -6
  174. package/build/types/offline +0 -22
  175. package/build/types/polyfill +0 -18
  176. package/build/types/text +0 -11
  177. package/build/types/ui +0 -39
  178. package/build/updateScreenshots.py +0 -85
  179. package/build/wrapper.template.js +0 -52
@@ -265,6 +265,10 @@ shaka.util.Error.Code = {
265
265
  'INCONSISTENT_DRM_ACROSS_PERIODS': 4038,
266
266
  'HLS_VARIABLE_NOT_FOUND': 4039,
267
267
  'HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED': 4040,
268
+ 'HLS_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED': 4041,
269
+ 'NO_WEB_CRYPTO_API': 4042,
270
+ 'HLS_AES_128_INVALID_IV_LENGTH': 4043,
271
+ 'HLS_AES_128_INVALID_KEY_LENGTH': 4044,
268
272
  'STREAMING_ENGINE_STARTUP_INVALID_STATE': 5006,
269
273
  'NO_RECOGNIZED_KEY_SYSTEMS': 6000,
270
274
  'REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE': 6001,
@@ -587,7 +591,6 @@ shaka.text.Cue.prototype.direction;
587
591
  shaka.text.Cue.prototype.endTime;
588
592
  /**
589
593
  * @override
590
- * @type {string}
591
594
  */
592
595
  shaka.text.Cue.prototype.payload;
593
596
  /**
@@ -912,6 +915,7 @@ shaka.util.BufferUtils = class {
912
915
  * @param {?BufferSource} arr1
913
916
  * @param {?BufferSource} arr2
914
917
  * @return {boolean}
918
+ * @suppress {strictMissingProperties}
915
919
  */
916
920
  static equal(arr1, arr2) {}
917
921
  /**
@@ -980,6 +984,43 @@ shaka.dependencies = class {
980
984
  shaka.dependencies.Allowed = {
981
985
  muxjs: 'muxjs'
982
986
  };
987
+ /**
988
+ * A timer allows a single function to be executed at a later time or at
989
+ * regular intervals.
990
+ * @final
991
+ */
992
+ shaka.util.Timer = class {
993
+ /**
994
+ * Create a new timer. A timer is committed to a single callback function.
995
+ * While there is no technical reason to do this, it is far easier to
996
+ * understand and use timers when they are connected to one functional idea.
997
+ * @param {function()} onTick
998
+ */
999
+ constructor(onTick) {}
1000
+ /**
1001
+ * Have the timer call |onTick| now.
1002
+ * @return {!shaka.util.Timer}
1003
+ */
1004
+ tickNow() {}
1005
+ /**
1006
+ * Have the timer call |onTick| after |seconds| has elapsed unless |stop| is
1007
+ * called first.
1008
+ * @param {number} seconds
1009
+ * @return {!shaka.util.Timer}
1010
+ */
1011
+ tickAfter(seconds) {}
1012
+ /**
1013
+ * Have the timer call |onTick| every |seconds| until |stop| is called.
1014
+ * @param {number} seconds
1015
+ * @return {!shaka.util.Timer}
1016
+ */
1017
+ tickEvery(seconds) {}
1018
+ /**
1019
+ * Stop the timer and clear the previous behaviour. The timer is still usable
1020
+ * after calling |stop|.
1021
+ */
1022
+ stop() {}
1023
+ };
983
1024
  /**
984
1025
  * @namespace shaka.util.StringUtils
985
1026
  * @summary A set of string utility functions.
@@ -1112,43 +1153,6 @@ shaka.text.TextEngine = class {
1112
1153
  */
1113
1154
  destroy() {}
1114
1155
  };
1115
- /**
1116
- * A timer allows a single function to be executed at a later time or at
1117
- * regular intervals.
1118
- * @final
1119
- */
1120
- shaka.util.Timer = class {
1121
- /**
1122
- * Create a new timer. A timer is committed to a single callback function.
1123
- * While there is no technical reason to do this, it is far easier to
1124
- * understand and use timers when they are connected to one functional idea.
1125
- * @param {function()} onTick
1126
- */
1127
- constructor(onTick) {}
1128
- /**
1129
- * Have the timer call |onTick| now.
1130
- * @return {!shaka.util.Timer}
1131
- */
1132
- tickNow() {}
1133
- /**
1134
- * Have the timer call |onTick| after |seconds| has elapsed unless |stop| is
1135
- * called first.
1136
- * @param {number} seconds
1137
- * @return {!shaka.util.Timer}
1138
- */
1139
- tickAfter(seconds) {}
1140
- /**
1141
- * Have the timer call |onTick| every |seconds| until |stop| is called.
1142
- * @param {number} seconds
1143
- * @return {!shaka.util.Timer}
1144
- */
1145
- tickEvery(seconds) {}
1146
- /**
1147
- * Stop the timer and clear the previous behaviour. The timer is still usable
1148
- * after calling |stop|.
1149
- */
1150
- stop() {}
1151
- };
1152
1156
  /**
1153
1157
  * @summary
1154
1158
  * <p>
@@ -1207,6 +1211,10 @@ shaka.abr.SimpleAbrManager = class {
1207
1211
  * @override
1208
1212
  */
1209
1213
  playbackRateChanged(rate) {}
1214
+ /**
1215
+ * @override
1216
+ */
1217
+ setMediaElement(mediaElement) {}
1210
1218
  /**
1211
1219
  * @override
1212
1220
  */
@@ -1440,7 +1448,8 @@ shaka.net.NetworkingEngine.RequestType = {
1440
1448
  'LICENSE': 2,
1441
1449
  'APP': 3,
1442
1450
  'TIMING': 4,
1443
- 'SERVER_CERTIFICATE': 5
1451
+ 'SERVER_CERTIFICATE': 5,
1452
+ 'KEY': 6
1444
1453
  };
1445
1454
  /**
1446
1455
  * Priority level for network scheme plugins.
@@ -1809,8 +1818,10 @@ shaka.media.SegmentReference = class {
1809
1818
  * @param {shaka.media.SegmentReference.Status=} status
1810
1819
  * The segment status is used to indicate that a segment does not exist or is
1811
1820
  * not available.
1821
+ * @param {?shaka.extern.HlsAes128Key=} hlsAes128Key
1822
+ * The segment's AES-128-CBC full segment encryption key and iv.
1812
1823
  */
1813
- constructor(startTime, endTime, uris, startByte, endByte, initSegmentReference, timestampOffset, appendWindowStart, appendWindowEnd, partialReferences, tilesLayout, tileDuration, syncTime, status) {}
1824
+ constructor(startTime, endTime, uris, startByte, endByte, initSegmentReference, timestampOffset, appendWindowStart, appendWindowEnd, partialReferences, tilesLayout, tileDuration, syncTime, status, hlsAes128Key) {}
1814
1825
  /**
1815
1826
  * Creates and returns the URIs of the resource containing the segment.
1816
1827
  * @return {!Array.<string>}
@@ -1942,6 +1953,17 @@ shaka.media.PresentationTimeline = class {
1942
1953
  * @param {!Array.<!shaka.media.SegmentReference>} references
1943
1954
  */
1944
1955
  notifySegments(references) {}
1956
+ /**
1957
+ * Lock the presentation timeline's start time. After this is called, no
1958
+ * further adjustments to presentationStartTime_ will be permitted.
1959
+ * This should be called after all Periods have been parsed, and all calls to
1960
+ * notifySegments() from the initial manifest parse have been made.
1961
+ * Without this, we can get assertion failures in SegmentIndex for certain
1962
+ * DAI content. If DAI adds ad segments to the manifest faster than
1963
+ * real-time, adjustments to presentationStartTime_ can cause availability
1964
+ * windows to jump around on updates.
1965
+ */
1966
+ lockStartTime() {}
1945
1967
  /**
1946
1968
  * Gives PresentationTimeline a Stream's minimum segment start time.
1947
1969
  * @param {number} startTime
@@ -2146,6 +2168,10 @@ shaka.media.SegmentIterator = class {
2146
2168
  * @param {number} partialSegmentIndex
2147
2169
  */
2148
2170
  constructor(segmentIndex, index, partialSegmentIndex) {}
2171
+ /**
2172
+ * @return {number}
2173
+ */
2174
+ currentPosition() {}
2149
2175
  /**
2150
2176
  * @return {shaka.media.SegmentReference}
2151
2177
  */
@@ -3816,6 +3842,16 @@ shaka.polyfill.Orientation = class {
3816
3842
  */
3817
3843
  static install() {}
3818
3844
  };
3845
+ /**
3846
+ * @summary A polyfill to implement modern, standardized EME on top of Apple's
3847
+ * prefixed EME in Safari.
3848
+ */
3849
+ shaka.polyfill.PatchedMediaKeysApple = class {
3850
+ /**
3851
+ * Installs the polyfill if needed.
3852
+ */
3853
+ static install() {}
3854
+ };
3819
3855
  /**
3820
3856
  * @summary A polyfill to stub out
3821
3857
  * {@link https://bit.ly/EmeMar15 EME draft 12 March 2015} on browsers without
@@ -4095,11 +4131,44 @@ shaka.util.FairPlayUtils = class {
4095
4131
  */
4096
4132
  static initDataTransform(initData, contentId, cert) {}
4097
4133
  /**
4098
- * SPC FairPlay request.
4134
+ * Verimatrix initDataTransform configuration.
4135
+ * @param {!Uint8Array} initData
4136
+ * @param {string} initDataType
4137
+ * @param {?shaka.extern.DrmInfo} drmInfo
4138
+ */
4139
+ static verimatrixInitDataTransform(initData, initDataType, drmInfo) {}
4140
+ /**
4141
+ * EZDRM initDataTransform configuration.
4142
+ * @param {!Uint8Array} initData
4143
+ * @param {string} initDataType
4144
+ * @param {?shaka.extern.DrmInfo} drmInfo
4145
+ */
4146
+ static ezdrmInitDataTransform(initData, initDataType, drmInfo) {}
4147
+ /**
4148
+ * Conax initDataTransform configuration.
4149
+ * @param {!Uint8Array} initData
4150
+ * @param {string} initDataType
4151
+ * @param {?shaka.extern.DrmInfo} drmInfo
4152
+ */
4153
+ static conaxInitDataTransform(initData, initDataType, drmInfo) {}
4154
+ /**
4155
+ * Verimatrix FairPlay request.
4156
+ * @param {shaka.net.NetworkingEngine.RequestType} type
4157
+ * @param {shaka.extern.Request} request
4158
+ */
4159
+ static verimatrixFairPlayRequest(type, request) {}
4160
+ /**
4161
+ * EZDRM FairPlay request.
4162
+ * @param {shaka.net.NetworkingEngine.RequestType} type
4163
+ * @param {shaka.extern.Request} request
4164
+ */
4165
+ static ezdrmFairPlayRequest(type, request) {}
4166
+ /**
4167
+ * Conax FairPlay request.
4099
4168
  * @param {shaka.net.NetworkingEngine.RequestType} type
4100
4169
  * @param {shaka.extern.Request} request
4101
4170
  */
4102
- static spcFairPlayRequest(type, request) {}
4171
+ static conaxFairPlayRequest(type, request) {}
4103
4172
  /**
4104
4173
  * Common FairPlay response transform for some DRMs providers.
4105
4174
  * @param {shaka.net.NetworkingEngine.RequestType} type