shaka-player 3.3.1 → 3.3.2

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 (49) hide show
  1. package/.github/workflows/build_and_test.yaml +73 -0
  2. package/.github/workflows/release.yaml +53 -0
  3. package/CHANGELOG.md +13 -1
  4. package/build/checkversion.py +1 -1
  5. package/build/test.py +6 -0
  6. package/dist/controls.css +1 -1
  7. package/dist/deps.js +4 -4
  8. package/dist/locales.js +29 -29
  9. package/dist/shaka-player.compiled.d.ts +2 -1
  10. package/dist/shaka-player.compiled.debug.d.ts +2 -1
  11. package/dist/shaka-player.compiled.debug.externs.js +17 -12
  12. package/dist/shaka-player.compiled.debug.js +93 -90
  13. package/dist/shaka-player.compiled.debug.map +4 -4
  14. package/dist/shaka-player.compiled.externs.js +17 -12
  15. package/dist/shaka-player.compiled.js +687 -686
  16. package/dist/shaka-player.compiled.map +3 -3
  17. package/dist/shaka-player.ui.d.ts +4 -12
  18. package/dist/shaka-player.ui.debug.d.ts +4 -12
  19. package/dist/shaka-player.ui.debug.externs.js +19 -23
  20. package/dist/shaka-player.ui.debug.js +107 -105
  21. package/dist/shaka-player.ui.debug.map +4 -4
  22. package/dist/shaka-player.ui.externs.js +19 -23
  23. package/dist/shaka-player.ui.js +952 -952
  24. package/dist/shaka-player.ui.map +2 -2
  25. package/karma.conf.js +19 -15
  26. package/lib/ads/ad_manager.js +1 -0
  27. package/lib/cast/cast_proxy.js +3 -0
  28. package/lib/cast/cast_receiver.js +3 -0
  29. package/lib/dash/dash_parser.js +31 -19
  30. package/lib/hls/manifest_text_parser.js +1 -0
  31. package/lib/media/quality_observer.js +17 -34
  32. package/lib/media/region_observer.js +39 -33
  33. package/lib/media/region_timeline.js +17 -19
  34. package/lib/media/streaming_engine.js +1 -1
  35. package/lib/net/networking_engine.js +4 -0
  36. package/lib/offline/storage.js +8 -9
  37. package/lib/player.js +32 -10
  38. package/lib/util/fake_event_target.js +21 -1
  39. package/package.json +3 -6
  40. package/test/dash/dash_parser_live_unit.js +43 -0
  41. package/test/dash/dash_parser_manifest_unit.js +2 -1
  42. package/test/hls/hls_parser_unit.js +74 -0
  43. package/test/media/quality_observer_unit.js +4 -1
  44. package/test/media/region_observer_unit.js +40 -5
  45. package/test/media/region_timeline_unit.js +40 -22
  46. package/test/test/util/util.js +10 -7
  47. package/test/ui/text_displayer_layout_unit.js +8 -7
  48. package/ui/controls.js +3 -0
  49. package/ui/localization.js +12 -36
@@ -0,0 +1,73 @@
1
+ name: Build and Test PR
2
+
3
+ on:
4
+ pull_request: # Trigger for pull requests.
5
+ types: [opened, synchronize, reopened, edited, ready_for_review]
6
+ branches:
7
+ - master
8
+ - v[0-9]*
9
+ workflow_dispatch: # Allows for manual triggering.
10
+ inputs:
11
+ ref:
12
+ description: "The ref to build and test."
13
+ required: False
14
+
15
+ jobs:
16
+ lint:
17
+ name: Lint
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@v2
22
+ with:
23
+ ref: ${{ github.event.inputs.ref || github.ref }}
24
+
25
+ - name: Lint
26
+ run: python build/check.py
27
+
28
+ build_and_test:
29
+ # Don't waste time doing a full matrix of test runs when there was an
30
+ # obvious linter error.
31
+ needs: lint
32
+ strategy:
33
+ matrix:
34
+ os: ["ubuntu-latest", "macos-latest", "windows-latest"]
35
+ browser: ["Chrome", "Firefox", "Edge", "Safari"]
36
+ exclude:
37
+ - os: ubuntu-latest
38
+ browser: Edge
39
+ - os: windows-latest
40
+ browser: Safari
41
+ - os: ubuntu-latest
42
+ browser: Safari
43
+ include:
44
+ # Run Linux browsers with xvfb, so they're in a headless X session.
45
+ - os: ubuntu-latest
46
+ extra_flags: "--use-xvfb"
47
+ # Disable fail-fast so that one matrix-job failing doesn't make the other
48
+ # ones end early.
49
+ fail-fast: false
50
+
51
+ name: Build and test ${{ matrix.os }} ${{ matrix.browser }}
52
+ runs-on: ${{ matrix.os }}
53
+
54
+ steps:
55
+ # Firefox on Ubuntu appears to not have the right things installed in
56
+ # the environment used by GitHub actions, so make sure that ffmpeg is
57
+ # installed. Otherwise, the browser might not support some codecs that the
58
+ # tests assume will be supported.
59
+ - name: Install FFmpeg
60
+ if: matrix.os == 'ubuntu-latest' && matrix.browser == 'Firefox'
61
+ run: sudo apt -y update && sudo apt -y install ffmpeg
62
+
63
+ - name: Checkout code
64
+ uses: actions/checkout@v2
65
+ with:
66
+ ref: ${{ github.event.inputs.ref || github.ref }}
67
+
68
+ - name: Build Player
69
+ run: python build/all.py
70
+
71
+ - name: Test Player
72
+ run: |
73
+ python build/test.py --browsers ${{ matrix.browser }} --reporters spec --spec-hide-passed --drm ${{ matrix.extra_flags }}
@@ -0,0 +1,53 @@
1
+ on:
2
+ push:
3
+ branches:
4
+ - master
5
+ - v[0-9]*
6
+
7
+ name: Release
8
+
9
+ jobs:
10
+ release:
11
+ runs-on: ubuntu-latest
12
+ outputs:
13
+ release_created: ${{ steps.release.outputs.release_created }}
14
+ tag_name: ${{ steps.release.outputs.tag_name }}
15
+ steps:
16
+ # Create/update release PR
17
+ - uses: google-github-actions/release-please-action@v3
18
+ id: release
19
+ with:
20
+ # Required input to specify the release type (node package).
21
+ release-type: node
22
+ # Make sure the player version gets updated.
23
+ extra-files: lib/player.js
24
+ # Make sure we create the PR against the correct branch.
25
+ default-branch: ${{ github.ref_name }}
26
+
27
+ # The jobs below are all conditional on a release having been created by
28
+ # someone merging the release PR. They all run in parallel.
29
+
30
+ npm:
31
+ runs-on: ubuntu-latest
32
+ needs: release
33
+ if: ${{ needs.release.outputs.release_created }}
34
+ steps:
35
+ - uses: actions/checkout@v2
36
+ - uses: actions/setup-node@v1
37
+ with:
38
+ node-version: 12
39
+ registry-url: 'https://registry.npmjs.org'
40
+ - run: npm ci
41
+ - run: npm publish
42
+ env:
43
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
44
+ - run: npm pack
45
+ - uses: svenstaro/upload-release-action@483c1e56f95e88835747b1c7c60581215016cbf2
46
+ with:
47
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
48
+ tag: ${{ needs.release.outputs.tag_name }}
49
+ file: shaka-player-*.tgz
50
+ file_glob: true
51
+ overwrite: true
52
+
53
+ # TODO: Publish to appspot
package/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ # Changelog
2
+
3
+ ### [3.3.2](https://github.com/google/shaka-player/compare/v3.3.1...v3.3.2) (2022-02-16)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * Add explicit release() for FakeEventTarget ([#3950](https://github.com/google/shaka-player/issues/3950)) ([1f9dd98](https://github.com/google/shaka-player/commit/1f9dd9856eb21079ca789b2c8f7e461438cb13de))
9
+ * Fix download of some HLS assets ([#3934](https://github.com/google/shaka-player/issues/3934)) ([449065c](https://github.com/google/shaka-player/commit/449065c84c5b6e4bbceba03c2345a3330ac2d1a7))
10
+ * Fix exception in StreamingEngine for EMSG with HLS ([#3887](https://github.com/google/shaka-player/issues/3887)) ([ca1ca33](https://github.com/google/shaka-player/commit/ca1ca33c3caf1787c52713ccb151ea59a9285649)), closes [#3886](https://github.com/google/shaka-player/issues/3886)
11
+ * Fix memory leak in DASH live streams with inband EventStream ([#3957](https://github.com/google/shaka-player/issues/3957)) ([6eb81da](https://github.com/google/shaka-player/commit/6eb81dae36a9cced95bd99f5356b69205c264ee0))
12
+ * **HLS:** skip whitespace in attributes ([#3884](https://github.com/google/shaka-player/issues/3884)) ([6305555](https://github.com/google/shaka-player/commit/6305555d40ca0e8be1604fc1f07dd34112b62530))
13
+
1
14
  ## 3.3.1 (2022-01-28)
2
15
 
3
16
  Bugfixes:
@@ -4876,4 +4889,3 @@ Broken Compatibility:
4876
4889
  ## 0.1b (2014-11-21)
4877
4890
 
4878
4891
  Private beta release.
4879
-
@@ -37,7 +37,7 @@ def changelog_version():
37
37
  """Gets the version of the library from the CHANGELOG."""
38
38
  path = os.path.join(shakaBuildHelpers.get_source_base(), 'CHANGELOG.md')
39
39
  with shakaBuildHelpers.open_file(path, 'r') as f:
40
- match = re.search(r'## (.*) \(', f.read())
40
+ match = re.search(r'### \[(.*?)\]\(', f.read())
41
41
  return match.group(1) if match else ''
42
42
 
43
43
 
package/build/test.py CHANGED
@@ -229,6 +229,11 @@ class Launcher:
229
229
  default=None,
230
230
  const=2,
231
231
  nargs='?')
232
+ running_commands.add_argument(
233
+ '--spec-hide-passed',
234
+ help='If provided, configure the spec reporter to hide passing tests.',
235
+ action='store_true',
236
+ default=False)
232
237
  running_commands.add_argument(
233
238
  '--test-custom-asset',
234
239
  help='Run asset playback tests on a custom manifest URI.',
@@ -358,6 +363,7 @@ class Launcher:
358
363
  'single_run',
359
364
  'uncompiled',
360
365
  'delay_tests',
366
+ 'spec_hide_passed',
361
367
  'test_custom_asset',
362
368
  'test_custom_license_server',
363
369
  'test_timeout',
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:16px;white-space:nowrap;font-size:13px;background:rgba(35,35,35,.9);color:#fff;border-radius:3px;padding:5px 10px;position:absolute;bottom:37px;left:16px;-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/v29/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/v94/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:16px;white-space:nowrap;font-size:13px;background:rgba(35,35,35,.9);color:#fff;border-radius:3px;padding:5px 10px;position:absolute;bottom:37px;left:16px;-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/v29/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/v99/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 */
package/dist/deps.js CHANGED
@@ -68,9 +68,9 @@ goog.addDependency('../../../../lib/media/play_rate_controller.js', ['shaka.medi
68
68
  goog.addDependency('../../../../lib/media/playhead.js', ['shaka.media.MediaSourcePlayhead', 'shaka.media.Playhead', 'shaka.media.SrcEqualsPlayhead'], ['goog.asserts', 'shaka.log', 'shaka.media.GapJumpingController', 'shaka.media.StallDetector', 'shaka.media.StallDetector.MediaElementImplementation', 'shaka.media.TimeRangesUtils', 'shaka.media.VideoWrapper', 'shaka.util.EventManager', 'shaka.util.IReleasable', 'shaka.util.MediaReadyState', 'shaka.util.Timer'], {});
69
69
  goog.addDependency('../../../../lib/media/playhead_observer.js', ['shaka.media.IPlayheadObserver', 'shaka.media.PlayheadObserverManager'], ['shaka.util.IReleasable', 'shaka.util.Timer'], {});
70
70
  goog.addDependency('../../../../lib/media/presentation_timeline.js', ['shaka.media.PresentationTimeline'], ['goog.asserts', 'shaka.log', 'shaka.media.SegmentReference'], {});
71
- goog.addDependency('../../../../lib/media/quality_observer.js', ['shaka.media.QualityObserver'], ['shaka.log', 'shaka.media.IPlayheadObserver'], {});
72
- goog.addDependency('../../../../lib/media/region_observer.js', ['shaka.media.RegionObserver'], ['shaka.media.IPlayheadObserver', 'shaka.media.RegionTimeline'], {});
73
- goog.addDependency('../../../../lib/media/region_timeline.js', ['shaka.media.RegionTimeline'], ['shaka.util.IReleasable', 'shaka.util.Timer'], {});
71
+ goog.addDependency('../../../../lib/media/quality_observer.js', ['shaka.media.QualityObserver'], ['shaka.log', 'shaka.media.IPlayheadObserver', 'shaka.util.FakeEvent', 'shaka.util.FakeEventTarget'], {});
72
+ goog.addDependency('../../../../lib/media/region_observer.js', ['shaka.media.RegionObserver'], ['shaka.media.IPlayheadObserver', 'shaka.media.RegionTimeline', 'shaka.util.EventManager', 'shaka.util.FakeEvent', 'shaka.util.FakeEventTarget'], {});
73
+ goog.addDependency('../../../../lib/media/region_timeline.js', ['shaka.media.RegionTimeline'], ['shaka.util.FakeEvent', 'shaka.util.FakeEventTarget', 'shaka.util.IReleasable', 'shaka.util.Timer'], {});
74
74
  goog.addDependency('../../../../lib/media/segment_index.js', ['shaka.media.MetaSegmentIndex', 'shaka.media.SegmentIndex', 'shaka.media.SegmentIterator'], ['goog.asserts', 'shaka.Deprecate', 'shaka.media.SegmentReference', 'shaka.util.IReleasable', 'shaka.util.Timer'], {});
75
75
  goog.addDependency('../../../../lib/media/segment_reference.js', ['shaka.media.InitSegmentReference', 'shaka.media.SegmentReference'], ['goog.asserts', 'shaka.util.ArrayUtils'], {});
76
76
  goog.addDependency('../../../../lib/media/stall_detector.js', ['shaka.media.StallDetector', 'shaka.media.StallDetector.Implementation', 'shaka.media.StallDetector.MediaElementImplementation'], ['shaka.media.TimeRangesUtils', 'shaka.util.IReleasable'], {});
@@ -154,7 +154,7 @@ goog.addDependency('../../../../lib/util/error.js', ['shaka.util.Error'], [], {}
154
154
  goog.addDependency('../../../../lib/util/event_manager.js', ['shaka.util.EventManager'], ['goog.asserts', 'shaka.util.IReleasable', 'shaka.util.MultiMap'], {});
155
155
  goog.addDependency('../../../../lib/util/fairplay_utils.js', ['shaka.util.FairPlayUtils'], ['goog.Uri', 'goog.asserts', 'shaka.util.BufferUtils', 'shaka.util.Error', 'shaka.util.StringUtils'], {});
156
156
  goog.addDependency('../../../../lib/util/fake_event.js', ['shaka.util.FakeEvent'], ['goog.asserts'], {});
157
- goog.addDependency('../../../../lib/util/fake_event_target.js', ['shaka.util.FakeEventTarget'], ['goog.asserts', 'shaka.log', 'shaka.util.FakeEvent', 'shaka.util.MultiMap'], {});
157
+ goog.addDependency('../../../../lib/util/fake_event_target.js', ['shaka.util.FakeEventTarget'], ['goog.asserts', 'shaka.log', 'shaka.util.FakeEvent', 'shaka.util.IReleasable', 'shaka.util.MultiMap'], {});
158
158
  goog.addDependency('../../../../lib/util/functional.js', ['shaka.util.Functional'], ['shaka.Deprecate'], {});
159
159
  goog.addDependency('../../../../lib/util/i_destroyable.js', ['shaka.util.IDestroyable'], [], {});
160
160
  goog.addDependency('../../../../lib/util/i_releasable.js', ['shaka.util.IReleasable'], [], {});
package/dist/locales.js CHANGED
@@ -720,44 +720,44 @@ shaka.ui.Locales.addTo = function(localization) {
720
720
  * @const
721
721
  */
722
722
  shaka.ui.Locales.Ids = {
723
- MORE_SETTINGS: 'MORE_SETTINGS',
724
- ENTER_PICTURE_IN_PICTURE: 'ENTER_PICTURE_IN_PICTURE',
725
- AD_DURATION: 'AD_DURATION',
726
- SEEK: 'SEEK',
727
- AIRPLAY: 'AIRPLAY',
728
- REPLAY: 'REPLAY',
723
+ MUTE: 'MUTE',
724
+ VOLUME: 'VOLUME',
729
725
  LOOP: 'LOOP',
730
726
  RESOLUTION: 'RESOLUTION',
731
- SKIP_TO_LIVE: 'SKIP_TO_LIVE',
732
- EXIT_FULL_SCREEN: 'EXIT_FULL_SCREEN',
733
- UNRECOGNIZED_LANGUAGE: 'UNRECOGNIZED_LANGUAGE',
734
- MULTIPLE_LANGUAGES: 'MULTIPLE_LANGUAGES',
735
- UNDETERMINED_LANGUAGE: 'UNDETERMINED_LANGUAGE',
727
+ STATISTICS: 'STATISTICS',
736
728
  AD_TIME: 'AD_TIME',
737
- SKIP_AD: 'SKIP_AD',
738
- LANGUAGE: 'LANGUAGE',
729
+ UNMUTE: 'UNMUTE',
730
+ ENTER_LOOP_MODE: 'ENTER_LOOP_MODE',
739
731
  FULL_SCREEN: 'FULL_SCREEN',
740
- SUBTITLE_FORCED: 'SUBTITLE_FORCED',
741
- EXIT_LOOP_MODE: 'EXIT_LOOP_MODE',
742
- VOLUME: 'VOLUME',
732
+ UNRECOGNIZED_LANGUAGE: 'UNRECOGNIZED_LANGUAGE',
743
733
  CAPTIONS: 'CAPTIONS',
744
- STATISTICS: 'STATISTICS',
745
- MUTE: 'MUTE',
746
- ON: 'ON',
747
- PICTURE_IN_PICTURE: 'PICTURE_IN_PICTURE',
748
- EXIT_PICTURE_IN_PICTURE: 'EXIT_PICTURE_IN_PICTURE',
734
+ MORE_SETTINGS: 'MORE_SETTINGS',
735
+ SKIP_TO_LIVE: 'SKIP_TO_LIVE',
736
+ UNDETERMINED_LANGUAGE: 'UNDETERMINED_LANGUAGE',
749
737
  PAUSE: 'PAUSE',
750
- FAST_FORWARD: 'FAST_FORWARD',
738
+ ENTER_PICTURE_IN_PICTURE: 'ENTER_PICTURE_IN_PICTURE',
739
+ REPLAY: 'REPLAY',
740
+ EXIT_FULL_SCREEN: 'EXIT_FULL_SCREEN',
741
+ LANGUAGE: 'LANGUAGE',
742
+ OFF: 'OFF',
751
743
  BACK: 'BACK',
752
744
  PLAY: 'PLAY',
753
- CAST: 'CAST',
754
- UNMUTE: 'UNMUTE',
755
- ENTER_LOOP_MODE: 'ENTER_LOOP_MODE',
745
+ SUBTITLE_FORCED: 'SUBTITLE_FORCED',
746
+ AD_PROGRESS: 'AD_PROGRESS',
747
+ NOT_APPLICABLE: 'NOT_APPLICABLE',
748
+ AD_DURATION: 'AD_DURATION',
749
+ PICTURE_IN_PICTURE: 'PICTURE_IN_PICTURE',
750
+ SKIP_AD: 'SKIP_AD',
751
+ EXIT_LOOP_MODE: 'EXIT_LOOP_MODE',
752
+ LIVE: 'LIVE',
756
753
  REWIND: 'REWIND',
757
754
  PLAYBACK_RATE: 'PLAYBACK_RATE',
758
- LIVE: 'LIVE',
755
+ CAST: 'CAST',
756
+ SEEK: 'SEEK',
757
+ ON: 'ON',
759
758
  AUTO_QUALITY: 'AUTO_QUALITY',
760
- OFF: 'OFF',
761
- AD_PROGRESS: 'AD_PROGRESS',
762
- NOT_APPLICABLE: 'NOT_APPLICABLE',
759
+ MULTIPLE_LANGUAGES: 'MULTIPLE_LANGUAGES',
760
+ AIRPLAY: 'AIRPLAY',
761
+ EXIT_PICTURE_IN_PICTURE: 'EXIT_PICTURE_IN_PICTURE',
762
+ FAST_FORWARD: 'FAST_FORWARD',
763
763
  };
@@ -2395,7 +2395,7 @@ declare namespace shaka.util {
2395
2395
  }
2396
2396
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.externs.js
2397
2397
  declare namespace shaka.util {
2398
- class FakeEventTarget implements EventTarget {
2398
+ class FakeEventTarget implements EventTarget , shaka.util.IReleasable {
2399
2399
  private noStructuralTyping_shaka_util_FakeEventTarget : any;
2400
2400
  /**
2401
2401
  * Add an event listener to this object.
@@ -2415,6 +2415,7 @@ declare namespace shaka.util {
2415
2415
  * @param listener The callback or listener object to invoke.
2416
2416
  */
2417
2417
  listenToAllEvents (listener : EventListener | null | ( (a : Event ) => any ) ) : any ;
2418
+ release ( ) : any ;
2418
2419
  /**
2419
2420
  * Remove an event listener from this object.
2420
2421
  * @param type The event type for which you wish to remove a listener.
@@ -2395,7 +2395,7 @@ declare namespace shaka.util {
2395
2395
  }
2396
2396
  // Generated from /usr/local/google/home/joeyparrish/hacking/shaka/clean/dist/shaka-player.compiled.debug.externs.js
2397
2397
  declare namespace shaka.util {
2398
- class FakeEventTarget implements EventTarget {
2398
+ class FakeEventTarget implements EventTarget , shaka.util.IReleasable {
2399
2399
  private noStructuralTyping_shaka_util_FakeEventTarget : any;
2400
2400
  /**
2401
2401
  * Add an event listener to this object.
@@ -2415,6 +2415,7 @@ declare namespace shaka.util {
2415
2415
  * @param listener The callback or listener object to invoke.
2416
2416
  */
2417
2417
  listenToAllEvents (listener : EventListener | null | ( (a : Event ) => any ) ) : any ;
2418
+ release ( ) : any ;
2418
2419
  /**
2419
2420
  * Remove an event listener from this object.
2420
2421
  * @param type The event type for which you wish to remove a listener.
@@ -1120,11 +1120,24 @@ shaka.util.FakeEvent = class {
1120
1120
  */
1121
1121
  constructor(type, dict) {}
1122
1122
  };
1123
+ /**
1124
+ * An interface to standardize how objects release internal references
1125
+ * synchronously. If an object needs to asynchronously release references, then
1126
+ * it should use 'shaka.util.IDestroyable'.
1127
+ * @interface
1128
+ */
1129
+ shaka.util.IReleasable = class {
1130
+ /**
1131
+ * Request that this object release all internal references.
1132
+ */
1133
+ release() {}
1134
+ };
1123
1135
  /**
1124
1136
  * @summary A work-alike for EventTarget. Only DOM elements may be true
1125
1137
  * EventTargets, but this can be used as a base class to provide event dispatch
1126
1138
  * to non-DOM classes. Only FakeEvents should be dispatched.
1127
1139
  * @implements {EventTarget}
1140
+ * @implements {shaka.util.IReleasable}
1128
1141
  */
1129
1142
  shaka.util.FakeEventTarget = class {
1130
1143
  /** */
@@ -1162,6 +1175,10 @@ shaka.util.FakeEventTarget = class {
1162
1175
  * @override
1163
1176
  */
1164
1177
  dispatchEvent(event) {}
1178
+ /**
1179
+ * @override
1180
+ */
1181
+ release() {}
1165
1182
  };
1166
1183
  /**
1167
1184
  * These are the listener types defined in the closure extern for EventTarget.
@@ -1344,18 +1361,6 @@ shaka.net.NetworkingEngine.OnHeadersReceived;
1344
1361
  * reason (e.g. even if the download was aborted).
1345
1362
  */
1346
1363
  shaka.net.NetworkingEngine.OnDownloadFailed;
1347
- /**
1348
- * An interface to standardize how objects release internal references
1349
- * synchronously. If an object needs to asynchronously release references, then
1350
- * it should use 'shaka.util.IDestroyable'.
1351
- * @interface
1352
- */
1353
- shaka.util.IReleasable = class {
1354
- /**
1355
- * Request that this object release all internal references.
1356
- */
1357
- release() {}
1358
- };
1359
1364
  /**
1360
1365
  * @summary
1361
1366
  * An EventManager maintains a collection of "event