shaka-player 4.3.3 → 4.3.5

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 (67) hide show
  1. package/.github/workflows/build-and-test.yaml +4 -4
  2. package/.github/workflows/demo-version-index.yaml +6 -0
  3. package/.github/workflows/selenium-lab-tests.yaml +72 -11
  4. package/.github/workflows/update-screenshots.yaml +142 -0
  5. package/CHANGELOG.md +41 -0
  6. package/demo/common/asset.js +15 -0
  7. package/demo/common/assets.js +4 -2
  8. package/demo/common/message_ids.js +1 -0
  9. package/demo/custom.js +19 -0
  10. package/demo/locales/en.json +1 -0
  11. package/demo/locales/source.json +4 -0
  12. package/demo/main.js +14 -0
  13. package/dist/demo.compiled.debug.js +30 -28
  14. package/dist/demo.compiled.debug.map +3 -3
  15. package/dist/demo.compiled.js +30 -28
  16. package/dist/demo.compiled.map +3 -3
  17. package/dist/deps.js +4 -3
  18. package/dist/locales.js +30 -30
  19. package/dist/receiver.compiled.debug.js +22 -22
  20. package/dist/receiver.compiled.debug.map +2 -2
  21. package/dist/receiver.compiled.js +22 -22
  22. package/dist/receiver.compiled.map +2 -2
  23. package/dist/shaka-player.compiled.d.ts +7 -0
  24. package/dist/shaka-player.compiled.debug.d.ts +7 -0
  25. package/dist/shaka-player.compiled.debug.js +116 -109
  26. package/dist/shaka-player.compiled.debug.map +4 -4
  27. package/dist/shaka-player.compiled.js +825 -821
  28. package/dist/shaka-player.compiled.map +4 -4
  29. package/dist/shaka-player.ui.d.ts +7 -0
  30. package/dist/shaka-player.ui.debug.d.ts +7 -0
  31. package/dist/shaka-player.ui.debug.js +128 -121
  32. package/dist/shaka-player.ui.debug.map +4 -4
  33. package/dist/shaka-player.ui.js +937 -932
  34. package/dist/shaka-player.ui.map +4 -4
  35. package/docs/tutorials/errors.md +94 -0
  36. package/docs/tutorials/fairplay.md +2 -2
  37. package/docs/tutorials/index.json +2 -0
  38. package/docs/tutorials/widevine-service-certs.md +45 -0
  39. package/externs/ima.js +9 -0
  40. package/lib/ads/client_side_ad_manager.js +6 -3
  41. package/lib/dash/segment_template.js +17 -5
  42. package/lib/hls/hls_parser.js +12 -2
  43. package/lib/media/drm_engine.js +4 -2
  44. package/lib/media/transmuxer.js +13 -7
  45. package/lib/media/video_wrapper.js +3 -3
  46. package/lib/offline/indexeddb/storage_mechanism.js +1 -1
  47. package/lib/player.js +3 -1
  48. package/lib/polyfill/media_capabilities.js +6 -9
  49. package/lib/polyfill/mediasource.js +24 -2
  50. package/lib/text/simple_text_displayer.js +2 -64
  51. package/lib/text/text_utils.js +88 -0
  52. package/lib/text/ui_text_displayer.js +1 -5
  53. package/lib/text/vtt_text_parser.js +228 -102
  54. package/lib/text/web_vtt_generator.js +2 -64
  55. package/lib/util/mime_utils.js +1 -1
  56. package/lib/util/platform.js +8 -0
  57. package/lib/util/stream_utils.js +26 -14
  58. package/package.json +1 -1
  59. package/support.html +1 -0
  60. package/test/dash/dash_parser_manifest_unit.js +0 -36
  61. package/test/polyfill/media_capabilities_unit.js +21 -22
  62. package/test/test/util/layout_tests.js +433 -0
  63. package/test/test/util/util.js +0 -120
  64. package/test/{ui → text}/text_displayer_layout_unit.js +59 -235
  65. package/test/text/ui_text_displayer_unit.js +2 -4
  66. package/test/text/vtt_text_parser_unit.js +138 -8
  67. package/test/text/web_vtt_layout_integration.js +525 -0
@@ -16,7 +16,7 @@ on:
16
16
  # old one. If a PR is updated and a new test run is started, the old test run
17
17
  # will be cancelled automatically to conserve resources.
18
18
  concurrency:
19
- group: ${{ github.workflow }}-${{ github.event.inputs.ref || github.ref }}
19
+ group: ${{ github.workflow }}-${{ inputs.ref || github.ref }}
20
20
  cancel-in-progress: true
21
21
 
22
22
  jobs:
@@ -27,7 +27,7 @@ jobs:
27
27
  - name: Checkout code
28
28
  uses: actions/checkout@v3
29
29
  with:
30
- ref: ${{ github.event.inputs.ref || github.ref }}
30
+ ref: ${{ inputs.ref || github.ref }}
31
31
 
32
32
  - name: Lint
33
33
  run: python build/check.py
@@ -103,7 +103,7 @@ jobs:
103
103
  - name: Checkout code
104
104
  uses: actions/checkout@v3
105
105
  with:
106
- ref: ${{ github.event.inputs.ref || github.ref }}
106
+ ref: ${{ inputs.ref || github.ref }}
107
107
 
108
108
  # Older versions of Safari can be installed, but not to the root, and it
109
109
  # can't replace the standard version, at least not on GitHub's VMs. If
@@ -213,7 +213,7 @@ jobs:
213
213
  - name: Checkout code
214
214
  uses: actions/checkout@v3
215
215
  with:
216
- ref: ${{ github.event.inputs.ref || github.ref }}
216
+ ref: ${{ inputs.ref || github.ref }}
217
217
 
218
218
  - name: Docker
219
219
  run: |
@@ -11,6 +11,12 @@ on:
11
11
  - app-engine/demo-version-index/**
12
12
  release:
13
13
  types: [published]
14
+ # NOTE: So long as releases are made without a personal access token (PAT),
15
+ # they will not activate this workflow's release trigger. For now, the
16
+ # schedule trigger will compensate for that by updating the index nightly.
17
+ schedule:
18
+ # Run every night at 10pm PST / 6am UTC.
19
+ - cron: '0 6 * * *'
14
20
 
15
21
  jobs:
16
22
  appspot:
@@ -8,6 +8,25 @@ on:
8
8
  pr:
9
9
  description: "A PR number to build and test in the lab. If empty, will build and test from main."
10
10
  required: false
11
+ test_filter:
12
+ description: "A regex filter to run a subset of the tests. If empty, all tests will run."
13
+ required: false
14
+ workflow_call:
15
+ # Allows for reuse from other workflows, such as "Update All Screenshots"
16
+ # workflow.
17
+ inputs:
18
+ pr:
19
+ description: "A PR number to build and test in the lab. If empty, will build and test from main."
20
+ required: false
21
+ type: string
22
+ test_filter:
23
+ description: "A regex filter to run a subset of the tests. If empty, all tests will run."
24
+ required: false
25
+ type: string
26
+ ignore_test_status:
27
+ description: "If true, ignore test success or failure, never set the commit status, and always upload screenshots."
28
+ required: false
29
+ type: boolean
11
30
  schedule:
12
31
  # Runs every night at 2am PST / 10am UTC, testing against the main branch.
13
32
  - cron: '0 10 * * *'
@@ -27,12 +46,12 @@ jobs:
27
46
  - name: Compute ref
28
47
  id: compute
29
48
  run: |
30
- if [[ "${{ github.event.inputs.pr }}" != "" ]]; then
31
- LAB_TEST_REF="refs/pull/${{ github.event.inputs.pr }}/head"
49
+ if [[ "${{ inputs.pr }}" != "" ]]; then
50
+ LAB_TEST_REF="refs/pull/${{ inputs.pr }}/head"
32
51
  else
33
52
  LAB_TEST_REF="main"
34
53
  fi
35
- echo "REF=$LAB_TEST_REF" >> $GITHUB_OUTPUT
54
+ echo "REF=$LAB_TEST_REF" | tee -a $GITHUB_OUTPUT
36
55
 
37
56
  # Configure the build matrix based on our grid's YAML config.
38
57
  # The matrix contents will be computed by this first job and deserialized
@@ -97,6 +116,7 @@ jobs:
97
116
  ref: ${{ needs.compute-ref.outputs.REF }}
98
117
 
99
118
  - name: Set commit status to pending
119
+ if: ${{ inputs.ignore_test_status == false }}
100
120
  uses: ./.github/workflows/custom-actions/set-commit-status
101
121
  with:
102
122
  context: Selenium / Build
@@ -114,8 +134,9 @@ jobs:
114
134
  retention-days: 1
115
135
 
116
136
  - name: Report final commit status
117
- # Will run on success or failure, but not if the workflow is cancelled.
118
- if: ${{ success() || failure() }}
137
+ # Will run on success or failure, but not if the workflow is cancelled
138
+ # or if we were asked to ignore the test status.
139
+ if: ${{ (success() || failure()) && inputs.ignore_test_status == false }}
119
140
  uses: ./.github/workflows/custom-actions/set-commit-status
120
141
  with:
121
142
  context: Selenium / Build
@@ -139,6 +160,7 @@ jobs:
139
160
  ref: ${{ needs.compute-ref.outputs.REF }}
140
161
 
141
162
  - name: Set commit status to pending
163
+ if: ${{ inputs.ignore_test_status == false }}
142
164
  uses: ./.github/workflows/custom-actions/set-commit-status
143
165
  with:
144
166
  context: Selenium / ${{ matrix.browser }}
@@ -182,15 +204,28 @@ jobs:
182
204
  # the container.
183
205
  - name: Test Player
184
206
  run: |
207
+ # Use of an array keeps elements intact, and allows an element to
208
+ # contain spaces without being expanded into multiple arguments in a
209
+ # shell command.
210
+ extra_flags=()
211
+
185
212
  # Generate a coverage report from uncompiled code on ChromeLinux.
186
213
  # It should be the uncompiled build, or else we won't execute any
187
214
  # coverage instrumentation on full-stack player integration tests.
188
215
  if [[ "${{ matrix.browser }}" == "ChromeLinux" ]]; then
189
- extra_flags="--html-coverage-report --uncompiled"
190
- else
191
- extra_flags=""
216
+ extra_flags+=(--html-coverage-report --uncompiled)
217
+ fi
218
+
219
+ if [[ "${{ inputs.test_filter }}" != "" ]]; then
220
+ echo "Adding filter: ${{ inputs.test_filter }}"
221
+ extra_flags+=(--filter "${{ inputs.test_filter }}")
192
222
  fi
193
223
 
224
+ # Do not automatically fail when a command fails. This allows us to
225
+ # implement the ignore_test_status input by capturing the exit code
226
+ # and examining it.
227
+ set +e
228
+ # Run the tests with any extra flags.
194
229
  python3 build/test.py \
195
230
  --no-build \
196
231
  --reporters spec --spec-hide-passed \
@@ -200,7 +235,18 @@ jobs:
200
235
  --grid-config build/shaka-lab.yaml \
201
236
  --grid-address selenium-grid.lab:4444 \
202
237
  --browsers ${{ matrix.browser }} \
203
- $extra_flags
238
+ "${extra_flags[@]}"
239
+ # Capture the test exit code immediately after running the tests.
240
+ # There cannot be any other command between test.py and here.
241
+ exit_code=$?
242
+
243
+ # If ignoring test status, treat this as an exit code of 0 (success).
244
+ if [[ "${{ inputs.ignore_test_status }}" == "true" ]]; then
245
+ exit_code=0
246
+ fi
247
+
248
+ # Report the captured (and possibly overridden) exit status.
249
+ exit $exit_code
204
250
 
205
251
  - name: Find coverage report (ChromeLinux only)
206
252
  id: coverage
@@ -241,9 +287,24 @@ jobs:
241
287
  # there.
242
288
  if-no-files-found: error
243
289
 
290
+ # Upload new screenshots and diffs on failure; ignore if missing
291
+ - name: Upload screenshots
292
+ uses: actions/upload-artifact@v3
293
+ if: ${{ failure() || inputs.ignore_test_status }}
294
+ with:
295
+ # In this workflow, "browser" is the selenium node name, which can
296
+ # contain both browser and OS, such as "ChromeLinux".
297
+ name: screenshots-${{ matrix.browser }}
298
+ path: |
299
+ test/test/assets/screenshots/*/*.png-new
300
+ test/test/assets/screenshots/*/*.png-diff
301
+ if-no-files-found: ignore
302
+ retention-days: 5
303
+
244
304
  - name: Report final commit status
245
- # Will run on success or failure, but not if the workflow is cancelled.
246
- if: ${{ success() || failure() }}
305
+ # Will run on success or failure, but not if the workflow is cancelled
306
+ # or if we were asked to ignore the test status.
307
+ if: ${{ (success() || failure()) && inputs.ignore_test_status == false }}
247
308
  uses: ./.github/workflows/custom-actions/set-commit-status
248
309
  with:
249
310
  context: Selenium / ${{ matrix.browser }}
@@ -0,0 +1,142 @@
1
+ name: Update All Screenshots
2
+ # Updates all screenshots on an existing PR, assuming permission has been given
3
+ # to maintainers to make edits.
4
+
5
+ on:
6
+ workflow_dispatch:
7
+ # Allows for manual triggering on PRs. They should be reviewed first, to
8
+ # avoid malicious code executing in the lab.
9
+ inputs:
10
+ pr:
11
+ description: "A PR number to build and test in the lab, then update all the screenshots."
12
+ required: true
13
+
14
+ jobs:
15
+ set-pending-status:
16
+ name: Set Pending Status
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v3
20
+ with:
21
+ ref: refs/pull/${{ inputs.pr }}/head
22
+
23
+ - name: Set commit status to pending
24
+ uses: ./.github/workflows/custom-actions/set-commit-status
25
+ with:
26
+ context: Update All Screenshots
27
+ state: pending
28
+ token: ${{ secrets.GITHUB_TOKEN }}
29
+
30
+ run-lab-tests:
31
+ name: Get Selenium Lab Screenshots
32
+ needs: [set-pending-status]
33
+ uses: ./.github/workflows/selenium-lab-tests.yaml
34
+ with:
35
+ pr: ${{ inputs.pr }}
36
+ test_filter: layout
37
+ ignore_test_status: true
38
+
39
+ update-pr:
40
+ name: Update PR
41
+ runs-on: ubuntu-latest
42
+ needs: [run-lab-tests]
43
+ steps:
44
+ - uses: actions/checkout@v3
45
+ with:
46
+ ref: refs/pull/${{ inputs.pr }}/head
47
+
48
+ - name: Set commit status to pending
49
+ uses: ./.github/workflows/custom-actions/set-commit-status
50
+ with:
51
+ context: Update All Screenshots
52
+ state: pending
53
+ token: ${{ secrets.GITHUB_TOKEN }}
54
+
55
+ - name: Get artifacts
56
+ uses: actions/download-artifact@v3
57
+ with:
58
+ path: new-screenshots
59
+
60
+ - name: Move screenshots
61
+ run: |
62
+ # The download-artifact action puts zip file contents into folders by
63
+ # the name of the artifact, so we can't have them downloaded directly
64
+ # to the screenshots folder. Here we move them into the correct
65
+ # locations.
66
+ cd new-screenshots
67
+
68
+ # "$i" is a folder for an artifact (eg "screenshots-ChromeAndroid"),
69
+ # and it contains a single folder with the name we use in our
70
+ # screenshots (eg "chrome-Android"). We want the contents of that
71
+ # inner folder to be copied to test/test/assets/screenshots/, where a
72
+ # folder with the same name (eg "chrome-Android") already exists.
73
+ for i in screenshots*; do
74
+ cp -a $i/* ../test/test/assets/screenshots/
75
+ done
76
+
77
+ - name: Update screenshots
78
+ run: |
79
+ # Install prerequisites.
80
+ npm ci
81
+
82
+ # Update the official screenshots for any that have visibly changed.
83
+ # This is not a byte-for-byte comparison, but based on pixel diffs.
84
+ ./build/updateScreenshots.py
85
+
86
+ # Emulate the actions bot.
87
+ git config user.name "github-actions[bot]"
88
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
89
+
90
+ # Commit the changes. Ignore failure, in case there are no changes.
91
+ git add test/test/assets/screenshots/*/*.png || true
92
+ git commit -m ':robot: Update all screenshots' || true
93
+
94
+ - name: Update PR
95
+ env:
96
+ GH_TOKEN: ${{ github.token }}
97
+ run: |
98
+ # Update the PR.
99
+ PR_API_URL="/repos/${{ github.repository }}/pulls/${{ inputs.pr }}"
100
+ REMOTE=$(gh api $PR_API_URL | jq -r .head.repo.html_url)
101
+ BRANCH=$(gh api $PR_API_URL | jq -r .head.ref)
102
+
103
+ # If there were no changes, this will do nothing, but succeed.
104
+ git push "$REMOTE" HEAD:"$BRANCH"
105
+
106
+ - name: Debug
107
+ uses: mxschmitt/action-tmate@v3.6
108
+ with:
109
+ limit-access-to-actor: true
110
+ if: failure()
111
+
112
+ set-final-status:
113
+ name: Set Final Status
114
+ runs-on: ubuntu-latest
115
+ needs: [run-lab-tests, update-pr]
116
+ # Will run on success or failure, but not if the workflow is cancelled.
117
+ if: ${{ success() || failure() }}
118
+ steps:
119
+ - uses: actions/checkout@v3
120
+ with:
121
+ ref: refs/pull/${{ inputs.pr }}/head
122
+
123
+ - name: Compute final status
124
+ id: compute
125
+ run: |
126
+ LAB_TEST_STATUS="${{ needs.run-lab-tests.status }}"
127
+ UPDATE_PR_STATUS="${{ needs.update-pr.status }}"
128
+
129
+ # If run-lab-tests succeeded, use the status of update-pr, otherwise
130
+ # use run-lab-tests (which is "failed" or "error").
131
+ if [ "$LAB_TEST_STATUS" == "success" ]; then
132
+ echo "status=$UPDATE_PR_STATUS" >> $GITHUB_OUTPUT
133
+ else
134
+ echo "status=$LAST_TEST_STATUS" >> $GITHUB_OUTPUT
135
+ fi
136
+
137
+ - name: Report final status
138
+ uses: ./.github/workflows/custom-actions/set-commit-status
139
+ with:
140
+ context: Update All Screenshots
141
+ state: ${{ steps.compute.outputs.status }}
142
+ token: ${{ secrets.GITHUB_TOKEN }}
package/CHANGELOG.md CHANGED
@@ -1,5 +1,46 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.3.5](https://github.com/shaka-project/shaka-player/compare/v4.3.4...v4.3.5) (2023-03-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **Ads:** Fix CS volume ad ([#5016](https://github.com/shaka-project/shaka-player/issues/5016)) ([c6e1315](https://github.com/shaka-project/shaka-player/commit/c6e1315afb9f72ab599b938e6fef564de2054e4c))
9
+ * **Ads:** Fix usage of EventManager on CS ([#5017](https://github.com/shaka-project/shaka-player/issues/5017)) ([7c408ed](https://github.com/shaka-project/shaka-player/commit/7c408ed36838dc85b6afb3e83e4fd11d475b67e9))
10
+ * **ads:** Fix VMAP ads stay muted on muted autoplay ([#4995](https://github.com/shaka-project/shaka-player/issues/4995)) ([2b9ead2](https://github.com/shaka-project/shaka-player/commit/2b9ead2c08787220f56ca4eaacba92c4e42d5cd6))
11
+ * Allow the playback of TS without mux.js ([#5041](https://github.com/shaka-project/shaka-player/issues/5041)) ([a347d25](https://github.com/shaka-project/shaka-player/commit/a347d250cfddd7ee6c645f3bba151ed1b1be9409))
12
+ * Caption can not turn off at iOS Safari ([#4978](https://github.com/shaka-project/shaka-player/issues/4978)) ([07c6cdb](https://github.com/shaka-project/shaka-player/commit/07c6cdb0959fd9af16c74c3a8b54525bd3afa267))
13
+ * **Demo:** Allow manifest type for DAI custom assets ([#4977](https://github.com/shaka-project/shaka-player/issues/4977)) ([d67ca2b](https://github.com/shaka-project/shaka-player/commit/d67ca2b3d190e7f0671f23f480fce8921efc0345))
14
+ * DrmEngine exception thrown when using FairPlay ([#4971](https://github.com/shaka-project/shaka-player/issues/4971)) ([ddc7f50](https://github.com/shaka-project/shaka-player/commit/ddc7f5043a2e0ad2807456c3387a2703cd0c2c02))
15
+ * Failed to set 'currentTime' property on 'HTMLMediaElement' on a Hisense TV ([#4962](https://github.com/shaka-project/shaka-player/issues/4962)) ([0559cf2](https://github.com/shaka-project/shaka-player/commit/0559cf2f99488eccda1d05d501d542f54df15699))
16
+ * Fallback to isTypeSupported when cast namespace is undefined ([#5012](https://github.com/shaka-project/shaka-player/issues/5012)) ([e95f8a6](https://github.com/shaka-project/shaka-player/commit/e95f8a6592e94da9a4d0b1735d7ec46427171e36))
17
+ * Fix duration error when HLS goes from LIVE to VOD ([#5001](https://github.com/shaka-project/shaka-player/issues/5001)) ([4f4f6e2](https://github.com/shaka-project/shaka-player/commit/4f4f6e2a7d2f093f1c47f22a4817acf6599677a0))
18
+ * Fix video/mp2t mimetype conversion. ([#5039](https://github.com/shaka-project/shaka-player/issues/5039)) ([09a81a7](https://github.com/shaka-project/shaka-player/commit/09a81a70381a5e0569d70616359d0c433e70bae9))
19
+ * **HLS:** Add `.tsa` and .`tsv` file extensions as valid MPEG2-TS. ([#5034](https://github.com/shaka-project/shaka-player/issues/5034)) ([938e6c1](https://github.com/shaka-project/shaka-player/commit/938e6c1846d37b4ed9116d9021adec64fdd3a449))
20
+ * Increase IndexedDB timeout ([#4984](https://github.com/shaka-project/shaka-player/issues/4984)) ([4bbcf6a](https://github.com/shaka-project/shaka-player/commit/4bbcf6ae93a201ca045bce6ea86e2f1cd1e90b2f))
21
+ * **MCap:** Remove robustness when robustness value is default ([#4953](https://github.com/shaka-project/shaka-player/issues/4953)) ([61c8a06](https://github.com/shaka-project/shaka-player/commit/61c8a067e461a7843395157e1effb75bf1c52665))
22
+ * Prevent content from being restarted after Postroll ads ([#4979](https://github.com/shaka-project/shaka-player/issues/4979)) ([68dae24](https://github.com/shaka-project/shaka-player/commit/68dae2401ad8e19463c5ce7415f522b7df4d16df)), closes [#4445](https://github.com/shaka-project/shaka-player/issues/4445)
23
+ * Reject TS content on Edge ([#5043](https://github.com/shaka-project/shaka-player/issues/5043)) ([2d6e8ee](https://github.com/shaka-project/shaka-player/commit/2d6e8ee4fa8d45ee7578c9541da6f22bd74030e4))
24
+ * **VTT:** Fix spacing between text lines ([#4961](https://github.com/shaka-project/shaka-player/issues/4961)) ([1194d74](https://github.com/shaka-project/shaka-player/commit/1194d74fa1861fe0335671800bd1980da9d57a0f))
25
+ * **WebVTT:** Tags in the WebVTT subtitle are not parsed ([#4960](https://github.com/shaka-project/shaka-player/issues/4960)) ([7f23b09](https://github.com/shaka-project/shaka-player/commit/7f23b09e83512a34966693a04947d20b8867f80d))
26
+
27
+ ## [4.3.4](https://github.com/shaka-project/shaka-player/compare/v4.3.3...v4.3.4) (2023-01-31)
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * Add mux.js to support.html ([#4923](https://github.com/shaka-project/shaka-player/issues/4923)) ([fde895e](https://github.com/shaka-project/shaka-player/commit/fde895e13c4a935b39aa9bf2bc0c5dce77add0b0))
33
+ * **DASH:** Fix dynamic manifests from edgeware ([#4914](https://github.com/shaka-project/shaka-player/issues/4914)) ([983dea3](https://github.com/shaka-project/shaka-player/commit/983dea3c87796384d9b7f876e73c47545d97e980))
34
+ * Fix MediaCapabilities polyfill on Hisense ([#4927](https://github.com/shaka-project/shaka-player/issues/4927)) ([d36677f](https://github.com/shaka-project/shaka-player/commit/d36677f0db52bff2fef967e787954e8f25889d2f))
35
+ * Fix WebVTT parser failure on REGION blocks ([#4915](https://github.com/shaka-project/shaka-player/issues/4915)) ([f57a954](https://github.com/shaka-project/shaka-player/commit/f57a9541cdff50de63f41247e258673fbed0cf78))
36
+ * **HLS:** Fix detection of WebVTT subtitles in HLS by extension ([#4928](https://github.com/shaka-project/shaka-player/issues/4928)) ([86c58ee](https://github.com/shaka-project/shaka-player/commit/86c58ee1d4f6e0fe56a5aaebf9771024193a9efe)), closes [#4929](https://github.com/shaka-project/shaka-player/issues/4929)
37
+ * **HLS:** IMSC1 subtitles not working in a HLS stream ([#4942](https://github.com/shaka-project/shaka-player/issues/4942)) ([8a9156f](https://github.com/shaka-project/shaka-player/commit/8a9156fa14cd6646900bdf534714ead775fccb15))
38
+ * **VTT:** Fix combining style selectors ([#4934](https://github.com/shaka-project/shaka-player/issues/4934)) ([bd04cf1](https://github.com/shaka-project/shaka-player/commit/bd04cf15223d026bb880ab0cca2a3e6332e8f485))
39
+ * **WebVTT:** Add support to  , ‎ and ‏ ([#4920](https://github.com/shaka-project/shaka-player/issues/4920)) ([d2e2d49](https://github.com/shaka-project/shaka-player/commit/d2e2d49da0593d2ee2e0e4da7e2ce9acae0798af))
40
+ * **WebVTT:** Add support to voice tag styles ([#4845](https://github.com/shaka-project/shaka-player/issues/4845)) ([4fb19fb](https://github.com/shaka-project/shaka-player/commit/4fb19fb075a89ae6a401c236b65c82d899a069d8))
41
+ * **WebVTT:** Fix horizontal positioning with cue box size ([#4949](https://github.com/shaka-project/shaka-player/issues/4949)) ([cefbe08](https://github.com/shaka-project/shaka-player/commit/cefbe083b684fc1295483e938a8576d9de81a359))
42
+ * **WebVTT:** Fix voices with styles and support to multiple styles ([#4922](https://github.com/shaka-project/shaka-player/issues/4922)) ([981bceb](https://github.com/shaka-project/shaka-player/commit/981bceb233b029b6e77499439627455913a1784d))
43
+
3
44
  ## [4.3.3](https://github.com/shaka-project/shaka-player/compare/v4.3.2...v4.3.3) (2023-01-13)
4
45
 
5
46
 
@@ -76,6 +76,8 @@ const ShakaDemoAssetInfo = class {
76
76
  /** @type {?string} */
77
77
  this.imaContentSrcId = null;
78
78
  /** @type {?string} */
79
+ this.imaManifestType = null;
80
+ /** @type {?string} */
79
81
  this.mimeType = null;
80
82
  /** @type {?string} */
81
83
  this.mediaPlaylistFullMimeType = null;
@@ -267,6 +269,19 @@ const ShakaDemoAssetInfo = class {
267
269
  return this;
268
270
  }
269
271
 
272
+ /**
273
+ * @param {string} type
274
+ * @return {!ShakaDemoAssetInfo}
275
+ */
276
+ setIMAManifestType(type) {
277
+ this.imaManifestType = type;
278
+ if (!this.features.includes(shakaAssets.Feature.ADS)) {
279
+ this.addFeature(shakaAssets.Feature.ADS);
280
+ }
281
+
282
+ return this;
283
+ }
284
+
270
285
  /**
271
286
  * @param {string} headerName
272
287
  * @param {string} headerValue
@@ -540,7 +540,8 @@ shakaAssets.testAssets = [
540
540
  .addFeature(shakaAssets.Feature.MP4)
541
541
  .addFeature(shakaAssets.Feature.OFFLINE)
542
542
  .setIMAContentSourceId('2528370')
543
- .setIMAVideoId('tears-of-steel'),
543
+ .setIMAVideoId('tears-of-steel')
544
+ .setIMAManifestType('HLS'),
544
545
  new ShakaDemoAssetInfo(
545
546
  /* name= */ 'Tears of Steel (live, DASH, Server Side ads)',
546
547
  /* iconUri= */ 'https://storage.googleapis.com/shaka-asset-icons/tears_of_steel.png',
@@ -550,7 +551,8 @@ shakaAssets.testAssets = [
550
551
  .addFeature(shakaAssets.Feature.MP4)
551
552
  .addFeature(shakaAssets.Feature.SUBTITLES)
552
553
  .addFeature(shakaAssets.Feature.LIVE)
553
- .setIMAAssetKey('PSzZMzAkSXCmlJOWDmRj8Q'),
554
+ .setIMAAssetKey('PSzZMzAkSXCmlJOWDmRj8Q')
555
+ .setIMAManifestType('DASH'),
554
556
  new ShakaDemoAssetInfo(
555
557
  /* name= */ 'Tears of Steel (multicodec, surround + stereo)',
556
558
  /* iconUri= */ 'https://storage.googleapis.com/shaka-asset-icons/tears_of_steel.png',
@@ -102,6 +102,7 @@ shakaDemo.MessageIds = {
102
102
  ADS_TAB: 'DEMO_ADS_TAB',
103
103
  IMA_ASSET_KEY: 'DEMO_IMA_ASSET_KEY',
104
104
  IMA_CONTENT_SRC_ID: 'DEMO_IMA_CONTENT_SRC_ID',
105
+ IMA_MANIFEST_TYPE: 'DEMO_IMA_MANIFEST_TYPE',
105
106
  IMA_VIDEO_ID: 'DEMO_IMA_VIDEO_ID',
106
107
  CANCEL_BUTTON: 'DEMO_CANCEL_BUTTON',
107
108
  CUSTOM_INTRO_ONE: 'DEMO_CUSTOM_INTRO_ONE',
package/demo/custom.js CHANGED
@@ -362,6 +362,25 @@ shakaDemo.Custom = class {
362
362
  this.makeField_(
363
363
  container, assetKeyName, assetKeySetup, assetKeyChange);
364
364
 
365
+ // Make the manifest type field.
366
+ const manifestTypeSetup = (input, container) => {
367
+ if (assetInProgress.imaManifestType) {
368
+ input.value = assetInProgress.imaManifestType;
369
+ }
370
+
371
+ this.manifestField_.required =
372
+ this.checkManifestRequired_(assetInProgress);
373
+ };
374
+ const manifestTypeChange = (input) => {
375
+ assetInProgress.imaManifestType = input.value;
376
+ this.manifestField_.required =
377
+ this.checkManifestRequired_(assetInProgress);
378
+ };
379
+ const manifestTypeName = shakaDemoMain.getLocalizedString(
380
+ shakaDemo.MessageIds.IMA_MANIFEST_TYPE);
381
+ this.makeField_(
382
+ container, manifestTypeName, manifestTypeSetup, manifestTypeChange);
383
+
365
384
  return adsDiv;
366
385
  }
367
386
 
@@ -105,6 +105,7 @@
105
105
  "DEMO_IGNORE_HLS_TEXT_FAILURES": "Ignore HLS Text Stream Failures",
106
106
  "DEMO_IMA_ASSET_KEY": "Asset key (for LIVE DAI Content)",
107
107
  "DEMO_IMA_CONTENT_SRC_ID": "Content source ID (for VOD DAI Content)",
108
+ "DEMO_IMA_MANIFEST_TYPE": "Manifest type (for DAI Content)",
108
109
  "DEMO_IMA_VIDEO_ID": "Video ID (for VOD DAI Content)",
109
110
  "DEMO_IGNORE_MANIFEST_PROGRAM_DATE_TIME": "Ignore Program Date Time from manifest",
110
111
  "DEMO_IGNORE_MIN_BUFFER_TIME": "Ignore Min Buffer Time",
@@ -423,6 +423,10 @@
423
423
  "description": "The label on a field that allows users to provide a content source id for a custom asset.",
424
424
  "message": "Asset key (for VOD DAI Content)"
425
425
  },
426
+ "DEMO_IMA_MANIFEST_TYPE": {
427
+ "description": "The label on a field that allows users to provide a manifest type for a custom asset.",
428
+ "message": "Manifest type (for DAI Content)"
429
+ },
426
430
  "DEMO_IMA_VIDEO_ID": {
427
431
  "description": "The label on a field that allows users to provide a video id for a custom asset.",
428
432
  "message": "Video ID (for VOD DAI Content)"
package/demo/main.js CHANGED
@@ -1561,6 +1561,20 @@ shakaDemo.Main = class {
1561
1561
  request.contentSourceId = asset.imaContentSrcId;
1562
1562
  request.videoId = asset.imaVideoId;
1563
1563
  }
1564
+ switch (asset.imaManifestType) {
1565
+ case 'DASH':
1566
+ case 'dash':
1567
+ case 'MPD':
1568
+ case 'mpd':
1569
+ request.format = google.ima.dai.api.StreamRequest.StreamFormat.DASH;
1570
+ break;
1571
+ case 'HLS':
1572
+ case 'hls':
1573
+ case 'M3U8':
1574
+ case 'm3u8':
1575
+ request.format = google.ima.dai.api.StreamRequest.StreamFormat.HLS;
1576
+ break;
1577
+ }
1564
1578
 
1565
1579
  const uri = await adManager.requestServerSideStream(
1566
1580
  request, /* backupUri= */ asset.manifestUri);