shaka-player 3.2.12 → 3.2.14

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 (58) hide show
  1. package/.github/workflows/build-and-test.yaml +42 -22
  2. package/.github/workflows/compute-incremental-coverage.py +14 -3
  3. package/.github/workflows/custom-actions/set-commit-status/action.yaml +1 -5
  4. package/.github/workflows/deflake.yaml +28 -0
  5. package/.github/workflows/demo-version-index.yaml +9 -1
  6. package/.github/workflows/nightly-demo.yaml +1 -1
  7. package/.github/workflows/release-please.yaml +4 -4
  8. package/.github/workflows/report-incremental-coverage.yaml +1 -1
  9. package/.github/workflows/selenium-lab-tests.yaml +21 -10
  10. package/AUTHORS +3 -0
  11. package/CHANGELOG.md +25 -0
  12. package/CONTRIBUTORS +2 -0
  13. package/dist/deps.js +3 -3
  14. package/dist/locales.js +28 -28
  15. package/dist/shaka-player.compiled.d.ts +1 -0
  16. package/dist/shaka-player.compiled.debug.d.ts +1 -0
  17. package/dist/shaka-player.compiled.debug.externs.js +1 -0
  18. package/dist/shaka-player.compiled.debug.js +181 -179
  19. package/dist/shaka-player.compiled.debug.map +4 -4
  20. package/dist/shaka-player.compiled.externs.js +1 -0
  21. package/dist/shaka-player.compiled.js +664 -663
  22. package/dist/shaka-player.compiled.map +4 -4
  23. package/dist/shaka-player.ui.d.ts +1 -0
  24. package/dist/shaka-player.ui.debug.d.ts +1 -0
  25. package/dist/shaka-player.ui.debug.externs.js +1 -0
  26. package/dist/shaka-player.ui.debug.js +222 -220
  27. package/dist/shaka-player.ui.debug.map +4 -4
  28. package/dist/shaka-player.ui.externs.js +1 -0
  29. package/dist/shaka-player.ui.js +819 -818
  30. package/dist/shaka-player.ui.map +4 -4
  31. package/docs/jsdoc-template/publish.js +33 -0
  32. package/docs/jsdoc-template/tmpl/container.tmpl +4 -1
  33. package/docs/jsdoc.conf.json +1 -0
  34. package/docs/tutorials/welcome.md +2 -2
  35. package/lib/ads/client_side_ad_manager.js +5 -2
  36. package/lib/cast/cast_sender.js +39 -14
  37. package/lib/cea/cea608_memory.js +4 -0
  38. package/lib/media/drm_engine.js +4 -2
  39. package/lib/media/streaming_engine.js +41 -4
  40. package/lib/offline/indexeddb/storage_mechanism.js +24 -0
  41. package/lib/player.js +1 -1
  42. package/lib/polyfill/media_capabilities.js +1 -0
  43. package/lib/text/ttml_text_parser.js +69 -87
  44. package/lib/util/error.js +7 -0
  45. package/lib/util/periods.js +9 -9
  46. package/lib/util/platform.js +34 -0
  47. package/lib/util/stream_utils.js +2 -1
  48. package/lib/util/xml_utils.js +45 -6
  49. package/package.json +1 -1
  50. package/test/cea/cea608_memory_unit.js +88 -0
  51. package/test/media/streaming_engine_integration.js +8 -7
  52. package/test/offline/offline_integration.js +3 -3
  53. package/test/offline/storage_integration.js +30 -0
  54. package/test/test/util/ttml_utils.js +0 -2
  55. package/test/text/ttml_text_parser_unit.js +46 -0
  56. package/test/ui/text_displayer_layout_unit.js +17 -2
  57. package/test/util/periods_unit.js +149 -11
  58. package/test/util/xml_utils_unit.js +64 -0
@@ -2,7 +2,7 @@ name: Build and Test PR
2
2
 
3
3
  on:
4
4
  pull_request: # Trigger for pull requests.
5
- types: [opened, synchronize, reopened]
5
+ types: [opened, synchronize, reopened, ready_for_review]
6
6
  branches:
7
7
  - main
8
8
  - v[0-9]*
@@ -25,7 +25,7 @@ jobs:
25
25
  runs-on: ubuntu-latest
26
26
  steps:
27
27
  - name: Checkout code
28
- uses: actions/checkout@v2
28
+ uses: actions/checkout@v3
29
29
  with:
30
30
  ref: ${{ github.event.inputs.ref || github.ref }}
31
31
 
@@ -41,12 +41,17 @@ jobs:
41
41
  include:
42
42
  # Run Linux browsers with xvfb, so they're in a headless X session.
43
43
  # Additionally, generate a code coverage report from Linux Chrome.
44
+ # It should be the uncompiled build, or else we won't execute any
45
+ # coverage instrumentation on full-stack player integration tests.
44
46
  - os: ubuntu-latest
45
47
  browser: Chrome
46
- extra_flags: "--use-xvfb --html-coverage-report"
48
+ extra_flags: "--use-xvfb --html-coverage-report --uncompiled"
47
49
  - os: ubuntu-latest
48
50
  browser: Firefox
49
51
  extra_flags: "--use-xvfb"
52
+ - os: ubuntu-latest
53
+ browser: Edge
54
+ extra_flags: "--use-xvfb"
50
55
 
51
56
  - os: macos-latest
52
57
  browser: Chrome
@@ -57,7 +62,7 @@ jobs:
57
62
  - os: macos-latest
58
63
  browser: Safari
59
64
  - os: macos-latest
60
- browser: Safari-14
65
+ browser: Safari-old
61
66
 
62
67
  - os: windows-latest
63
68
  browser: Chrome
@@ -83,25 +88,26 @@ jobs:
83
88
  run: sudo apt -y update && sudo apt -y install ffmpeg
84
89
 
85
90
  - name: Checkout code
86
- uses: actions/checkout@v2
91
+ uses: actions/checkout@v3
87
92
  with:
88
93
  ref: ${{ github.event.inputs.ref || github.ref }}
89
94
 
90
- # Safari 14 can be installed, but not to the root, and it can't replace
91
- # the standard version, at least not on GitHub's VMs. If you try to
92
- # install directly to the root with sudo, it will appear to succeed, but
93
- # will have no effect. If you try to script it explicitly with rm -rf
94
- # and cp, this will fail. Safari may be on a read-only filesystem.
95
- - name: Install Safari 14 to home directory
96
- if: matrix.os == 'macos-latest' && matrix.browser == 'Safari-14'
95
+ # Older versions of Safari can be installed, but not to the root, and it
96
+ # can't replace the standard version, at least not on GitHub's VMs. If
97
+ # you try to install directly to the root with sudo, it will appear to
98
+ # succeed, but will have no effect. If you try to script it explicitly
99
+ # with rm -rf and cp, this will fail. Safari may be on a read-only
100
+ # filesystem.
101
+ - name: Install old Safari to home directory
102
+ if: matrix.os == 'macos-latest' && matrix.browser == 'Safari-old'
97
103
  run: |
98
- # Download Safari 14
99
- # See also https://www.macupdate.com/app/mac/15675/apple-safari/old-versions
100
- curl -Lv https://www.macupdate.com/action/download/62946 > Safari14.0CatalinaAuto.pkg.zip
104
+ # Download Safari 15
105
+ # This URL discovered through the seed files listed at
106
+ # https://github.com/zhangyoufu/swscan.apple.com/blob/master/url.txt
107
+ curl -Lv http://swcdn.apple.com/content/downloads/42/33/012-57329-A_41P2VU6UHN/5fw5vna27fdw4mqfak5adj3pjpxvo9hgh7/Safari15.6.1CatalinaAuto.pkg > Safari.pkg
101
108
 
102
- # Install Safari 14 to homedir specifically.
103
- unzip Safari14.0CatalinaAuto.pkg.zip
104
- installer -pkg Safari14.0CatalinaAuto.pkg -target CurrentUserHomeDirectory
109
+ # Install older Safari to homedir specifically.
110
+ installer -pkg Safari.pkg -target CurrentUserHomeDirectory
105
111
 
106
112
  # Install a launcher that can execute a shell script to launch this
107
113
  npm install karma-script-launcher --save-dev
@@ -114,7 +120,7 @@ jobs:
114
120
  run: |
115
121
  browser=${{ matrix.browser }}
116
122
 
117
- if [[ "$browser" == "Safari-14" ]]; then
123
+ if [[ "$browser" == "Safari-old" ]]; then
118
124
  # Replace the browser name with a script that can launch this
119
125
  # browser from the command line.
120
126
  browser="$PWD/.github/workflows/safari-homedir-launcher.sh"
@@ -144,7 +150,7 @@ jobs:
144
150
  cp "$coverage_folder"/coverage-details.json coverage/staging/
145
151
  echo "${{ github.event.number }}" > coverage/staging/pr-number.json
146
152
 
147
- echo "::set-output name=coverage_found::true"
153
+ echo "coverage_found=true" >> $GITHUB_OUTPUT
148
154
  echo "Coverage report staged."
149
155
  else
150
156
  echo "No coverage report generated."
@@ -165,6 +171,18 @@ jobs:
165
171
  # an environment variable set, the file should definitely be there.
166
172
  if-no-files-found: error
167
173
 
174
+ # Upload new screenshots and diffs on failure; ignore if missing
175
+ - name: Upload screenshots
176
+ uses: actions/upload-artifact@v3
177
+ if: ${{ failure() }}
178
+ with:
179
+ name: screenshots-${{ matrix.browser }}
180
+ path: |
181
+ test/test/assets/screenshots/*/*.png-new
182
+ test/test/assets/screenshots/*/*.png-diff
183
+ if-no-files-found: ignore
184
+ retention-days: 5
185
+
168
186
  build_in_docker:
169
187
  # Don't waste time doing a full matrix of test runs when there was an
170
188
  # obvious linter error.
@@ -173,9 +191,11 @@ jobs:
173
191
  runs-on: ubuntu-latest
174
192
  steps:
175
193
  - name: Checkout code
176
- uses: actions/checkout@v2
194
+ uses: actions/checkout@v3
177
195
  with:
178
196
  ref: ${{ github.event.inputs.ref || github.ref }}
179
197
 
180
198
  - name: Docker
181
- run: docker-compose -f build/docker/docker-compose.yml up
199
+ run: |
200
+ docker build -t shaka-player-build build/docker
201
+ docker run -v $(pwd):/usr/src --user $(id -u):$(id -g) shaka-player-build
@@ -17,6 +17,7 @@
17
17
  import argparse
18
18
  import io
19
19
  import json
20
+ import os
20
21
  import re
21
22
  import subprocess
22
23
  import zipfile
@@ -221,6 +222,16 @@ def IncrementalCoverage(pr, coverage_details):
221
222
  return None
222
223
  return num_covered / num_changed
223
224
 
225
+ def set_output(name, value):
226
+ path = os.environ.get("GITHUB_OUTPUT")
227
+ if path:
228
+ # Inside GitHub Actions, output the data to a special file GitHub provides.
229
+ with open(path, "a") as f:
230
+ f.write("{}={}\n".format(name, value))
231
+ else:
232
+ # Outside of GitHub Actions, just print the data.
233
+ print("OUTPUT {}={}".format(name, value))
234
+
224
235
  def main():
225
236
  parser = argparse.ArgumentParser(
226
237
  description="Compute incremental code coverage for a PR",
@@ -241,11 +252,11 @@ def main():
241
252
  pr = PullRequest(args.repo, pr_number)
242
253
  coverage = IncrementalCoverage(pr, coverage_details)
243
254
 
244
- print("::set-output name=pr_number::%d" % pr_number)
255
+ set_output("pr_number", str(pr_number))
245
256
  if coverage is None:
246
- print("::set-output name=coverage::No instrumented code was changed.")
257
+ set_output("coverage", "No instrumented code was changed.")
247
258
  else:
248
- print("::set-output name=coverage::%.2f%%" % (coverage * 100.0))
259
+ set_output("coverage", "%.2f%%" % (coverage * 100.0))
249
260
 
250
261
  if __name__ == "__main__":
251
262
  main()
@@ -11,10 +11,6 @@ inputs:
11
11
  state:
12
12
  description: Either "pending", "error", "success", or "failure".
13
13
  required: true
14
- ref:
15
- description: A git ref for which to set the commit status. For PRs, use the head commit, not the merge commit. Defaults to HEAD.
16
- required: false
17
- default: HEAD
18
14
  token:
19
15
  description: A GitHub access token.
20
16
  required: true
@@ -30,7 +26,7 @@ runs:
30
26
  # next to the status on the PR, it will link to this run where they can
31
27
  # see the logs.
32
28
  RUN_URL="https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}"
33
- SHA1=$(git rev-parse "${{ inputs.ref }}")
29
+ SHA1=$(git rev-parse HEAD)
34
30
 
35
31
  GITHUB_TOKEN=${{ inputs.token }} \
36
32
  gh api \
@@ -0,0 +1,28 @@
1
+ name: Deflake Tests
2
+
3
+ # Runs when the Selenum nightly test workflow completes. This will run with
4
+ # full privileges, even if the other workflow doesn't. That allows us to
5
+ # trigger re-runs if we think the results might be flaky.
6
+ on:
7
+ workflow_run:
8
+ workflows: [Selenium Lab Tests]
9
+ types: [completed]
10
+
11
+ jobs:
12
+ deflake:
13
+ if: ${{ github.event.workflow_run.event == 'schedule' && github.event.workflow_run.conclusion == 'failure' }}
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Check run count and re-run workflow
18
+ env:
19
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
20
+ run: |
21
+ gh api /repos/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }} > run.json
22
+ RUNS=$(jq -r .run_attempt < run.json)
23
+ if [[ "$RUNS" -lt 3 ]]; then
24
+ echo "$RUNS failed runs so far; re-running workflow."
25
+ gh run rerun ${{ github.event.workflow_run.id }} --failed -R ${{ github.repository }}
26
+ else
27
+ echo "$RUNS failed runs so far; not re-running workflow."
28
+ fi
@@ -9,12 +9,20 @@ on:
9
9
  paths:
10
10
  - .github/workflows/demo-version-index.yaml
11
11
  - app-engine/demo-version-index/**
12
+ release:
13
+ types: [published]
12
14
 
13
15
  jobs:
14
16
  appspot:
15
17
  runs-on: ubuntu-latest
16
18
  steps:
17
- - uses: actions/checkout@v2
19
+ - uses: actions/checkout@v3
20
+ with:
21
+ # We need a list of all tags for this, so fetch the entire history.
22
+ fetch-depth: 0
23
+
24
+ - name: Generate static content
25
+ run: python3 app-engine/demo-version-index/generate.py
18
26
 
19
27
  - uses: google-github-actions/auth@v0
20
28
  with:
@@ -11,7 +11,7 @@ jobs:
11
11
  appspot:
12
12
  runs-on: ubuntu-latest
13
13
  steps:
14
- - uses: actions/checkout@v2
14
+ - uses: actions/checkout@v3
15
15
  with:
16
16
  fetch-depth: 0
17
17
  persist-credentials: false
@@ -23,7 +23,7 @@ jobs:
23
23
  default-branch: ${{ github.ref_name }}
24
24
 
25
25
  # If we didn't create a release, we may have created or updated a PR.
26
- - uses: actions/checkout@v2
26
+ - uses: actions/checkout@v3
27
27
  if: steps.release.outputs.release_created == false
28
28
  - name: Custom update Player version
29
29
  if: steps.release.outputs.release_created == false
@@ -53,7 +53,7 @@ jobs:
53
53
  needs: release
54
54
  if: needs.release.outputs.release_created && endsWith(needs.release.outputs.tag_name, '.0') == false
55
55
  steps:
56
- - uses: actions/checkout@v2
56
+ - uses: actions/checkout@v3
57
57
  with:
58
58
  ref: main
59
59
  - name: Tag the main branch
@@ -70,7 +70,7 @@ jobs:
70
70
  needs: release
71
71
  if: needs.release.outputs.release_created
72
72
  steps:
73
- - uses: actions/checkout@v2
73
+ - uses: actions/checkout@v3
74
74
  with:
75
75
  fetch-depth: 0
76
76
  persist-credentials: false
@@ -99,7 +99,7 @@ jobs:
99
99
  needs: release
100
100
  if: needs.release.outputs.release_created
101
101
  steps:
102
- - uses: actions/checkout@v2
102
+ - uses: actions/checkout@v3
103
103
  with:
104
104
  fetch-depth: 0
105
105
  persist-credentials: false
@@ -15,7 +15,7 @@ jobs:
15
15
 
16
16
  steps:
17
17
  - name: Checkout code
18
- uses: actions/checkout@v2
18
+ uses: actions/checkout@v3
19
19
 
20
20
  - name: Compute incremental code coverage
21
21
  id: compute
@@ -32,7 +32,7 @@ jobs:
32
32
  else
33
33
  LAB_TEST_REF="main"
34
34
  fi
35
- echo "::set-output name=REF::$LAB_TEST_REF"
35
+ echo "REF=$LAB_TEST_REF" >> $GITHUB_OUTPUT
36
36
 
37
37
  # Configure the build matrix based on our grid's YAML config.
38
38
  # The matrix contents will be computed by this first job and deserialized
@@ -45,9 +45,9 @@ jobs:
45
45
  INCLUDE: ${{ steps.configure.outputs.INCLUDE }}
46
46
 
47
47
  steps:
48
- - uses: actions/checkout@v2
48
+ - uses: actions/checkout@v3
49
49
  with:
50
- ref: ${{ needs.compute-ref.REF }}
50
+ ref: ${{ needs.compute-ref.outputs.REF }}
51
51
 
52
52
  - name: Install dependencies
53
53
  run: npm ci
@@ -77,7 +77,9 @@ jobs:
77
77
  }
78
78
 
79
79
  // Output JSON object consumed by the build matrix below.
80
- console.log(`::set-output name=INCLUDE::${ JSON.stringify(include) }`);
80
+ fs.appendFileSync(
81
+ process.env['GITHUB_OUTPUT'],
82
+ `INCLUDE=${ JSON.stringify(include) }\n`);
81
83
 
82
84
  // Log the output, for the sake of debugging this script.
83
85
  console.log({include});
@@ -90,9 +92,9 @@ jobs:
90
92
  needs: compute-ref
91
93
  runs-on: ubuntu-latest
92
94
  steps:
93
- - uses: actions/checkout@v2
95
+ - uses: actions/checkout@v3
94
96
  with:
95
- ref: ${{ needs.compute-ref.REF }}
97
+ ref: ${{ needs.compute-ref.outputs.REF }}
96
98
 
97
99
  - name: Set commit status to pending
98
100
  uses: ./.github/workflows/custom-actions/set-commit-status
@@ -132,9 +134,9 @@ jobs:
132
134
  name: ${{ matrix.browser }}
133
135
 
134
136
  steps:
135
- - uses: actions/checkout@v2
137
+ - uses: actions/checkout@v3
136
138
  with:
137
- ref: ${{ needs.compute-ref.REF }}
139
+ ref: ${{ needs.compute-ref.outputs.REF }}
138
140
 
139
141
  - name: Set commit status to pending
140
142
  uses: ./.github/workflows/custom-actions/set-commit-status
@@ -180,6 +182,15 @@ jobs:
180
182
  # the container.
181
183
  - name: Test Player
182
184
  run: |
185
+ # Generate a coverage report from uncompiled code on ChromeLinux.
186
+ # It should be the uncompiled build, or else we won't execute any
187
+ # coverage instrumentation on full-stack player integration tests.
188
+ if [[ "${{ matrix.browser }}" == "ChromeLinux" ]]; then
189
+ extra_flags="--html-coverage-report --uncompiled"
190
+ else
191
+ extra_flags=""
192
+ fi
193
+
183
194
  python3 build/test.py \
184
195
  --no-build \
185
196
  --reporters spec --spec-hide-passed \
@@ -189,7 +200,7 @@ jobs:
189
200
  --grid-config build/shaka-lab.yaml \
190
201
  --grid-address selenium-grid.lab:4444 \
191
202
  --browsers ${{ matrix.browser }} \
192
- --html-coverage-report
203
+ $extra_flags
193
204
 
194
205
  - name: Find coverage report (ChromeLinux only)
195
206
  id: coverage
@@ -209,7 +220,7 @@ jobs:
209
220
 
210
221
  if [ -f "$coverage_report" ]; then
211
222
  echo "Found coverage report: $coverage_report"
212
- echo "::set-output name=coverage_report::$coverage_report"
223
+ echo "coverage_report=$coverage_report" >> $GITHUB_OUTPUT
213
224
  else
214
225
  echo "Could not locate coverage report!"
215
226
  exit 1
package/AUTHORS CHANGED
@@ -66,6 +66,8 @@ Rostislav Hejduk <Ross-cz@users.noreply.github.com>
66
66
  SameGoal Inc. <*@samegoal.com>
67
67
  Sanborn Hilland <sanbornh@rogers.com>
68
68
  Sander Saares <sander@saares.eu>
69
+ Sanil Raut <sr1990003@gmail.com>
70
+ Seongryun Jo <ocipap0531@gmail.com>
69
71
  Swank Motion Pictures Inc. <*@swankmp.com>
70
72
  TalkTalk Plc <*@talktalkplc.com>
71
73
  Tatsiana Gelahova <tatsiana.gelahova@gmail.com>
@@ -77,3 +79,4 @@ Verizon Digital Media Services <*@verizondigitalmedia.com>
77
79
  Vincent Valot <valot.vince@gmail.com>
78
80
  Wayne Morgan <wayne.morgan.dev@gmail.com>
79
81
  Raymond Cheng <raycheng100@gmail.com>
82
+ Blue Billywig <*@bluebillywig.com>
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.2.14](https://github.com/shaka-project/shaka-player/compare/v3.2.13...v3.2.14) (2022-10-29)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **ads:** Fix IMA crash when autoplay is rejected ([#4518](https://github.com/shaka-project/shaka-player/issues/4518)) ([f619ee9](https://github.com/shaka-project/shaka-player/commit/f619ee981fdbed918835ceb5d703ee6461a5a8fe)), closes [#4179](https://github.com/shaka-project/shaka-player/issues/4179)
9
+ * Fix multi-period DASH with descriptive audio ([#4629](https://github.com/shaka-project/shaka-player/issues/4629)) ([a92493c](https://github.com/shaka-project/shaka-player/commit/a92493c009a4cf3a8a3d95c7fbd2c13b46c4d024)), closes [#4500](https://github.com/shaka-project/shaka-player/issues/4500)
10
+ * Force using mcap polyfill on EOS browsers ([#4630](https://github.com/shaka-project/shaka-player/issues/4630)) ([a8ea1ad](https://github.com/shaka-project/shaka-player/commit/a8ea1adb8c2559e49d668a69448c837ef4670c04))
11
+ * Limit key ids to 32 characters ([#4614](https://github.com/shaka-project/shaka-player/issues/4614)) ([976e932](https://github.com/shaka-project/shaka-player/commit/976e932c2af6ce7b6f7db9c253eb25b4c28e39c5))
12
+ * Make XML parsing secure ([#4598](https://github.com/shaka-project/shaka-player/issues/4598)) ([09aed18](https://github.com/shaka-project/shaka-player/commit/09aed189431b13d46050501d9a8ad98a7bdf1950))
13
+ * **offline:** Add storage muxer init timeout ([#4566](https://github.com/shaka-project/shaka-player/issues/4566)) ([251533c](https://github.com/shaka-project/shaka-player/commit/251533c7feda9d474d779e3d8f70489d0413f917))
14
+
15
+ ## [3.2.13](https://github.com/shaka-project/shaka-player/compare/v3.2.12...v3.2.13) (2022-10-07)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * allow build without text ([#4506](https://github.com/shaka-project/shaka-player/issues/4506)) ([5f3afd4](https://github.com/shaka-project/shaka-player/commit/5f3afd443cf9999997a471eee702b3b76c5e350e))
21
+ * allow the playback on platforms when low latency APIs are not supported ([#4485](https://github.com/shaka-project/shaka-player/issues/4485)) ([0239aa5](https://github.com/shaka-project/shaka-player/commit/0239aa50d9653ebe6e44e8619fd7bc25d378ff6d))
22
+ * check for negative rows before moving ([#4510](https://github.com/shaka-project/shaka-player/issues/4510)) ([12e3305](https://github.com/shaka-project/shaka-player/commit/12e3305e6d121ed1cb3d3cf686be68cfdff2d9fb)), closes [#4508](https://github.com/shaka-project/shaka-player/issues/4508)
23
+ * Filter unsupported H.264 streams in Xbox ([#4493](https://github.com/shaka-project/shaka-player/issues/4493)) ([ea02766](https://github.com/shaka-project/shaka-player/commit/ea0276686d77e3444cf14f30f3f294c48be117e8))
24
+ * Fix hang when seeking to the last segment ([#4537](https://github.com/shaka-project/shaka-player/issues/4537)) ([951aaea](https://github.com/shaka-project/shaka-player/commit/951aaea8225b75beea5d2699b0213bb1a950c679))
25
+ * Respect existing app usage of Cast SDK ([#4523](https://github.com/shaka-project/shaka-player/issues/4523)) ([da5fd15](https://github.com/shaka-project/shaka-player/commit/da5fd1524a415d93c7e27b3557ec994d34fb0525)), closes [#4521](https://github.com/shaka-project/shaka-player/issues/4521)
26
+ * **ttml:** Default TTML background color to transparent if unspecified ([#4496](https://github.com/shaka-project/shaka-player/issues/4496)) ([0c6ad6d](https://github.com/shaka-project/shaka-player/commit/0c6ad6ddb30067e5872f2715bdcd8d2975bec23e)), closes [#4468](https://github.com/shaka-project/shaka-player/issues/4468)
27
+
3
28
  ## [3.2.12](https://github.com/shaka-project/shaka-player/compare/v3.2.11...v3.2.12) (2022-08-31)
4
29
 
5
30
 
package/CONTRIBUTORS CHANGED
@@ -99,6 +99,7 @@ Sander Saares <sander@saares.eu>
99
99
  Sandra Lokshina <ismena@google.com>
100
100
  Satheesh Velmurugan <satheesh@philo.com>
101
101
  Semih Gokceoglu <semih.gkcoglu@gmail.com>
102
+ Seongryun Jo <ocipap0531@gmail.com>
102
103
  Seth Madison <seth@philo.com>
103
104
  Tatsiana Gelahova <tatsiana.gelahova@gmail.com>
104
105
  Theodore Abshire <theodab@google.com>
@@ -116,3 +117,4 @@ Vincent Valot <valot.vince@gmail.com>
116
117
  Wayne Morgan <wayne.morgan.dev@gmail.com>
117
118
  Yohann Connell <robinconnell@google.com>
118
119
  Raymond Cheng <raycheng100@gmail.com>
120
+ Janroel Koppen <j.koppen@bluebillywig.com>
package/dist/deps.js CHANGED
@@ -62,7 +62,7 @@ goog.addDependency('../../../../lib/media/adaptation_set_criteria.js', ['shaka.m
62
62
  goog.addDependency('../../../../lib/media/buffering_observer.js', ['shaka.media.BufferingObserver'], [], {'lang': 'es6'});
63
63
  goog.addDependency('../../../../lib/media/closed_caption_parser.js', ['shaka.media.ClosedCaptionParser', 'shaka.media.IClosedCaptionParser'], ['shaka.cea.CeaDecoder', 'shaka.cea.Mp4CeaParser', 'shaka.util.BufferUtils'], {'lang': 'es6'});
64
64
  goog.addDependency('../../../../lib/media/content_workarounds.js', ['shaka.media.ContentWorkarounds'], ['goog.asserts', 'shaka.log', 'shaka.util.BufferUtils', 'shaka.util.Error', 'shaka.util.Lazy', 'shaka.util.Mp4Parser', 'shaka.util.Platform', 'shaka.util.Uint8ArrayUtils'], {'lang': 'es6'});
65
- goog.addDependency('../../../../lib/media/drm_engine.js', ['shaka.media.DrmEngine'], ['goog.asserts', 'shaka.log', 'shaka.media.Transmuxer', 'shaka.net.NetworkingEngine', 'shaka.util.BufferUtils', 'shaka.util.Destroyer', 'shaka.util.Error', 'shaka.util.EventManager', 'shaka.util.FairPlayUtils', 'shaka.util.FakeEvent', 'shaka.util.IDestroyable', 'shaka.util.Iterables', 'shaka.util.Lazy', 'shaka.util.MapUtils', 'shaka.util.MimeUtils', 'shaka.util.Platform', 'shaka.util.PublicPromise', 'shaka.util.StreamUtils', 'shaka.util.StringUtils', 'shaka.util.Timer', 'shaka.util.Uint8ArrayUtils'], {'lang': 'es8'});
65
+ goog.addDependency('../../../../lib/media/drm_engine.js', ['shaka.media.DrmEngine'], ['goog.asserts', 'shaka.log', 'shaka.media.Transmuxer', 'shaka.net.NetworkingEngine', 'shaka.util.BufferUtils', 'shaka.util.Destroyer', 'shaka.util.Error', 'shaka.util.EventManager', 'shaka.util.FairPlayUtils', 'shaka.util.FakeEvent', 'shaka.util.IDestroyable', 'shaka.util.Iterables', 'shaka.util.Lazy', 'shaka.util.MapUtils', 'shaka.util.MimeUtils', 'shaka.util.Platform', 'shaka.util.PublicPromise', 'shaka.util.StreamUtils', 'shaka.util.StringUtils', 'shaka.util.Timer', 'shaka.util.Uint8ArrayUtils', 'shaka.util.XmlUtils'], {'lang': 'es8'});
66
66
  goog.addDependency('../../../../lib/media/gap_jumping_controller.js', ['shaka.media.GapJumpingController'], ['shaka.log', 'shaka.media.PresentationTimeline', 'shaka.media.StallDetector', 'shaka.media.TimeRangesUtils', 'shaka.util.EventManager', 'shaka.util.FakeEvent', 'shaka.util.IReleasable', 'shaka.util.Timer'], {'lang': 'es6'});
67
67
  goog.addDependency('../../../../lib/media/manifest_parser.js', ['shaka.media.ManifestParser'], ['goog.Uri', 'shaka.log', 'shaka.net.NetworkingEngine', 'shaka.util.Error', 'shaka.util.Platform'], {'lang': 'es8'});
68
68
  goog.addDependency('../../../../lib/media/media_source_engine.js', ['shaka.media.MediaSourceEngine'], ['goog.asserts', 'shaka.log', 'shaka.media.ContentWorkarounds', 'shaka.media.IClosedCaptionParser', 'shaka.media.TimeRangesUtils', 'shaka.media.Transmuxer', 'shaka.text.TextEngine', 'shaka.util.Destroyer', 'shaka.util.Error', 'shaka.util.EventManager', 'shaka.util.Functional', 'shaka.util.IDestroyable', 'shaka.util.ManifestParserUtils', 'shaka.util.MimeUtils', 'shaka.util.Platform', 'shaka.util.PublicPromise'], {'lang': 'es8'});
@@ -93,7 +93,7 @@ goog.addDependency('../../../../lib/offline/indexeddb/base_storage_cell.js', ['s
93
93
  goog.addDependency('../../../../lib/offline/indexeddb/db_connection.js', ['shaka.offline.indexeddb.DBConnection'], ['shaka.offline.indexeddb.DBOperation', 'shaka.util.ArrayUtils'], {'lang': 'es6'});
94
94
  goog.addDependency('../../../../lib/offline/indexeddb/db_operation.js', ['shaka.offline.indexeddb.DBOperation'], ['shaka.util.PublicPromise'], {'lang': 'es8'});
95
95
  goog.addDependency('../../../../lib/offline/indexeddb/eme_session_storage_cell.js', ['shaka.offline.indexeddb.EmeSessionStorageCell'], ['shaka.offline.indexeddb.DBConnection'], {'lang': 'es8'});
96
- goog.addDependency('../../../../lib/offline/indexeddb/storage_mechanism.js', ['shaka.offline.indexeddb.StorageMechanism'], ['goog.asserts', 'shaka.log', 'shaka.offline.StorageMuxer', 'shaka.offline.indexeddb.EmeSessionStorageCell', 'shaka.offline.indexeddb.V1StorageCell', 'shaka.offline.indexeddb.V2StorageCell', 'shaka.offline.indexeddb.V5StorageCell', 'shaka.util.Error', 'shaka.util.Platform', 'shaka.util.PublicPromise'], {'lang': 'es8'});
96
+ goog.addDependency('../../../../lib/offline/indexeddb/storage_mechanism.js', ['shaka.offline.indexeddb.StorageMechanism'], ['goog.asserts', 'shaka.log', 'shaka.offline.StorageMuxer', 'shaka.offline.indexeddb.EmeSessionStorageCell', 'shaka.offline.indexeddb.V1StorageCell', 'shaka.offline.indexeddb.V2StorageCell', 'shaka.offline.indexeddb.V5StorageCell', 'shaka.util.Error', 'shaka.util.Platform', 'shaka.util.PublicPromise', 'shaka.util.Timer'], {'lang': 'es8'});
97
97
  goog.addDependency('../../../../lib/offline/indexeddb/v1_storage_cell.js', ['shaka.offline.indexeddb.V1StorageCell'], ['goog.asserts', 'shaka.log', 'shaka.offline.indexeddb.BaseStorageCell', 'shaka.util.Error', 'shaka.util.ManifestParserUtils', 'shaka.util.PeriodCombiner', 'shaka.util.PublicPromise'], {'lang': 'es8'});
98
98
  goog.addDependency('../../../../lib/offline/indexeddb/v2_storage_cell.js', ['shaka.offline.indexeddb.V2StorageCell'], ['shaka.offline.indexeddb.BaseStorageCell', 'shaka.util.PeriodCombiner'], {'lang': 'es8'});
99
99
  goog.addDependency('../../../../lib/offline/indexeddb/v5_storage_cell.js', ['shaka.offline.indexeddb.V5StorageCell'], ['shaka.offline.indexeddb.BaseStorageCell'], {'lang': 'es6'});
@@ -183,7 +183,7 @@ goog.addDependency('../../../../lib/util/switch_history.js', ['shaka.util.Switch
183
183
  goog.addDependency('../../../../lib/util/text_parser.js', ['shaka.util.TextParser'], ['goog.asserts'], {'lang': 'es6'});
184
184
  goog.addDependency('../../../../lib/util/timer.js', ['shaka.util.Timer'], ['shaka.util.DelayedTick'], {'lang': 'es6'});
185
185
  goog.addDependency('../../../../lib/util/uint8array_utils.js', ['shaka.util.Uint8ArrayUtils'], ['shaka.Deprecate', 'shaka.util.BufferUtils', 'shaka.util.StringUtils'], {'lang': 'es6'});
186
- goog.addDependency('../../../../lib/util/xml_utils.js', ['shaka.util.XmlUtils'], ['goog.asserts', 'shaka.log', 'shaka.util.StringUtils'], {'lang': 'es6'});
186
+ goog.addDependency('../../../../lib/util/xml_utils.js', ['shaka.util.XmlUtils'], ['goog.asserts', 'shaka.log', 'shaka.util.Lazy', 'shaka.util.StringUtils'], {'lang': 'es8'});
187
187
  goog.addDependency('../../../../third_party/closure-uri/uri.js', ['goog.Uri', 'goog.Uri.QueryData'], ['goog.asserts', 'goog.uri.utils', 'goog.uri.utils.ComponentIndex']);
188
188
  goog.addDependency('../../../../third_party/closure-uri/utils.js', ['goog.uri.utils', 'goog.uri.utils.ComponentIndex'], []);
189
189
  goog.addDependency('../../../../third_party/language-mapping-list/language-mapping-list.js', ['mozilla.LanguageMapping'], [], {'lang': 'es6'});
package/dist/locales.js CHANGED
@@ -719,43 +719,43 @@ shaka.ui.Locales.addTo = function(localization) {
719
719
  * @const
720
720
  */
721
721
  shaka.ui.Locales.Ids = {
722
- OFF: 'OFF',
723
- CAPTIONS: 'CAPTIONS',
724
- SKIP_AD: 'SKIP_AD',
725
- UNDETERMINED_LANGUAGE: 'UNDETERMINED_LANGUAGE',
726
- ENTER_PICTURE_IN_PICTURE: 'ENTER_PICTURE_IN_PICTURE',
727
722
  LOOP: 'LOOP',
723
+ NOT_APPLICABLE: 'NOT_APPLICABLE',
724
+ UNDETERMINED_LANGUAGE: 'UNDETERMINED_LANGUAGE',
728
725
  MUTE: 'MUTE',
729
- PAUSE: 'PAUSE',
730
- FULL_SCREEN: 'FULL_SCREEN',
731
- UNMUTE: 'UNMUTE',
726
+ EXIT_PICTURE_IN_PICTURE: 'EXIT_PICTURE_IN_PICTURE',
732
727
  AD_TIME: 'AD_TIME',
733
- REWIND: 'REWIND',
734
- AD_DURATION: 'AD_DURATION',
728
+ BACK: 'BACK',
729
+ LANGUAGE: 'LANGUAGE',
735
730
  PLAY: 'PLAY',
736
- MORE_SETTINGS: 'MORE_SETTINGS',
737
- NOT_APPLICABLE: 'NOT_APPLICABLE',
738
- FAST_FORWARD: 'FAST_FORWARD',
739
- MULTIPLE_LANGUAGES: 'MULTIPLE_LANGUAGES',
731
+ UNMUTE: 'UNMUTE',
732
+ OFF: 'OFF',
733
+ SKIP_TO_LIVE: 'SKIP_TO_LIVE',
734
+ REPLAY: 'REPLAY',
735
+ SEEK: 'SEEK',
740
736
  CAST: 'CAST',
741
- EXIT_PICTURE_IN_PICTURE: 'EXIT_PICTURE_IN_PICTURE',
742
- PLAYBACK_RATE: 'PLAYBACK_RATE',
743
737
  AUTO_QUALITY: 'AUTO_QUALITY',
744
- REPLAY: 'REPLAY',
745
- EXIT_FULL_SCREEN: 'EXIT_FULL_SCREEN',
746
738
  ENTER_LOOP_MODE: 'ENTER_LOOP_MODE',
739
+ EXIT_LOOP_MODE: 'EXIT_LOOP_MODE',
747
740
  UNRECOGNIZED_LANGUAGE: 'UNRECOGNIZED_LANGUAGE',
748
- LIVE: 'LIVE',
749
- BACK: 'BACK',
750
- SKIP_TO_LIVE: 'SKIP_TO_LIVE',
751
- ON: 'ON',
752
- AIRPLAY: 'AIRPLAY',
753
- LANGUAGE: 'LANGUAGE',
741
+ PLAYBACK_RATE: 'PLAYBACK_RATE',
742
+ VOLUME: 'VOLUME',
754
743
  AD_PROGRESS: 'AD_PROGRESS',
744
+ PAUSE: 'PAUSE',
755
745
  SUBTITLE_FORCED: 'SUBTITLE_FORCED',
756
- SEEK: 'SEEK',
757
- EXIT_LOOP_MODE: 'EXIT_LOOP_MODE',
758
- VOLUME: 'VOLUME',
759
- RESOLUTION: 'RESOLUTION',
746
+ SKIP_AD: 'SKIP_AD',
747
+ LIVE: 'LIVE',
748
+ FAST_FORWARD: 'FAST_FORWARD',
749
+ AD_DURATION: 'AD_DURATION',
750
+ EXIT_FULL_SCREEN: 'EXIT_FULL_SCREEN',
751
+ AIRPLAY: 'AIRPLAY',
760
752
  PICTURE_IN_PICTURE: 'PICTURE_IN_PICTURE',
753
+ ENTER_PICTURE_IN_PICTURE: 'ENTER_PICTURE_IN_PICTURE',
754
+ RESOLUTION: 'RESOLUTION',
755
+ CAPTIONS: 'CAPTIONS',
756
+ MORE_SETTINGS: 'MORE_SETTINGS',
757
+ ON: 'ON',
758
+ FULL_SCREEN: 'FULL_SCREEN',
759
+ REWIND: 'REWIND',
760
+ MULTIPLE_LANGUAGES: 'MULTIPLE_LANGUAGES',
761
761
  };
@@ -2209,6 +2209,7 @@ declare namespace shaka.util.Error {
2209
2209
  HTTP_ERROR = 1002.0 ,
2210
2210
  INCONSISTENT_DRM_ACROSS_PERIODS = 4038.0 ,
2211
2211
  INDEXED_DB_ERROR = 9001.0 ,
2212
+ INDEXED_DB_INIT_TIMED_OUT = 9017.0 ,
2212
2213
  INIT_DATA_TRANSFORM_ERROR = 6016.0 ,
2213
2214
  INVALID_HLS_TAG = 4016.0 ,
2214
2215
  INVALID_MP4_CEA = 2010.0 ,
@@ -2209,6 +2209,7 @@ declare namespace shaka.util.Error {
2209
2209
  HTTP_ERROR = 1002.0 ,
2210
2210
  INCONSISTENT_DRM_ACROSS_PERIODS = 4038.0 ,
2211
2211
  INDEXED_DB_ERROR = 9001.0 ,
2212
+ INDEXED_DB_INIT_TIMED_OUT = 9017.0 ,
2212
2213
  INIT_DATA_TRANSFORM_ERROR = 6016.0 ,
2213
2214
  INVALID_HLS_TAG = 4016.0 ,
2214
2215
  INVALID_MP4_CEA = 2010.0 ,
@@ -636,6 +636,7 @@ shaka.util.Error.Code = {
636
636
  'MISSING_STORAGE_CELL': 9013,
637
637
  'STORAGE_LIMIT_REACHED': 9014,
638
638
  'DOWNLOAD_SIZE_CALLBACK_ERROR': 9015,
639
+ 'INDEXED_DB_INIT_TIMED_OUT': 9017,
639
640
  'CS_IMA_SDK_MISSING': 10000,
640
641
  'CS_AD_MANAGER_NOT_INITIALIZED': 10001,
641
642
  'SS_IMA_SDK_MISSING': 10002,