From 9547d363532a9f1ddd6759bfcef8057015abed70 Mon Sep 17 00:00:00 2001 From: Vanilagy <1696106+Vanilagy@users.noreply.github.com> Date: Wed, 1 Jul 2026 13:50:48 +0200 Subject: [PATCH 1/2] Add workaround for https://issues.chromium.org/issues/529852980 --- src/conversion.ts | 8 ++++++-- src/media-source.ts | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/conversion.ts b/src/conversion.ts index 8349fde..9b4aab4 100644 --- a/src/conversion.ts +++ b/src/conversion.ts @@ -1329,9 +1329,13 @@ export class Conversion { firstSample.close(); await tempOutput.finalize(); } catch (error) { - Logging._info('Error when probing encoder support. Falling back to rerender path.', error); - needsRerender = true; + Logging._warn( + 'An error occurred when probing encoder support. Falling back to rerender path.', error, + ); void tempOutput.cancel(); + + needsRerender = true; + encodingConfig.transform.force = true; } } else { await tempOutput.cancel(); diff --git a/src/media-source.ts b/src/media-source.ts index 223a7f7..59167d2 100644 --- a/src/media-source.ts +++ b/src/media-source.ts @@ -36,6 +36,7 @@ import { setUint24, toUint8Array, UnthrottledTimerHandle, + wait, } from './misc'; import { Muxer } from './muxer'; import { SubtitleParser } from './subtitles'; @@ -878,6 +879,9 @@ class VideoEncoderWrapper { // These are wired in series, therefore they must also be flushed in series await this.encoder.flush(); await this.alphaEncoder?.flush(); + + // Workaround for https://issues.chromium.org/issues/529852980 to give it time for errors to surface + await wait(25); } if (this.encoder.state !== 'closed') { From 0480ecbd3a91b6849895206bafb9b1ccc0ef6f3d Mon Sep 17 00:00:00 2001 From: Vanilagy <1696106+Vanilagy@users.noreply.github.com> Date: Wed, 1 Jul 2026 15:27:36 +0200 Subject: [PATCH 2/2] Bump TurboRes version, mention response headers in README, bump patch --- docs/guide/extensions/prores.md | 19 +++++++++++++++++++ package-lock.json | 24 ++++++++++++------------ package.json | 2 +- packages/aac-encoder/package.json | 2 +- packages/ac3/package.json | 2 +- packages/flac-encoder/package.json | 2 +- packages/mp3-encoder/package.json | 2 +- packages/prores/README.md | 19 +++++++++++++++++++ packages/prores/package.json | 8 ++------ packages/server/package.json | 2 +- 10 files changed, 58 insertions(+), 24 deletions(-) diff --git a/docs/guide/extensions/prores.md b/docs/guide/extensions/prores.md index c1bf689..3d1cf0f 100644 --- a/docs/guide/extensions/prores.md +++ b/docs/guide/extensions/prores.md @@ -26,6 +26,25 @@ Alternatively, directly include them using a script tag: This will expose the global objects `Mediabunny` and `MediabunnyProres`. Use `mediabunny-prores.d.ts` to provide types for these globals. You can download the built distribution files from the [releases page](https://github.com/Vanilagy/mediabunny/releases). +## Setup + +`@mediabunny/prores` can make use of shared-memory multithreading to achieve maximum performance. To enable this in browsers, your website must be cross-origin isolated by setting the following response headers: +``` +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp +``` + +Alternatively, you can use: +``` +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: credentialless +``` +which is generally more permissive but is not supported in Safari (of course). + +--- + +If you cannot enable cross-origin isolation, `@mediabunny/prores` will fall back to a slower multithreading algorithm. + ## Usage ```ts diff --git a/package-lock.json b/package-lock.json index 79464d6..6cdbf0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mediabunny", - "version": "1.50.0", + "version": "1.50.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mediabunny", - "version": "1.50.0", + "version": "1.50.1", "license": "MPL-2.0", "workspaces": [ ".", @@ -10963,9 +10963,9 @@ "optional": true }, "node_modules/turbores": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/turbores/-/turbores-1.1.1.tgz", - "integrity": "sha512-uC2bBqMgMzeE/K4/zeUJd3IwvDm9+0JtNXkiBuc7Sg1L8OaeAhk+VCgoiqDgDdwVaqF3/lztEjrSgt8k15XyYw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/turbores/-/turbores-1.1.2.tgz", + "integrity": "sha512-6k3XH+sG8uOCJEBamKhAXFwIAfLqz7LAQr2mmEx2UBl6zC+4XAGQtp1fGEugnVl2w8Ec5GOUvD+b0tyxUJvmHg==", "license": "MPL-2.0", "funding": { "type": "individual", @@ -12894,7 +12894,7 @@ }, "packages/aac-encoder": { "name": "@mediabunny/aac-encoder", - "version": "1.50.0", + "version": "1.50.1", "license": "MPL-2.0", "devDependencies": { "@types/emscripten": "^1.40.1" @@ -12909,7 +12909,7 @@ }, "packages/ac3": { "name": "@mediabunny/ac3", - "version": "1.50.0", + "version": "1.50.1", "license": "MPL-2.0", "devDependencies": { "@types/emscripten": "^1.40.1" @@ -12924,7 +12924,7 @@ }, "packages/flac-encoder": { "name": "@mediabunny/flac-encoder", - "version": "1.50.0", + "version": "1.50.1", "license": "MPL-2.0", "devDependencies": { "@types/emscripten": "^1.40.1" @@ -12939,7 +12939,7 @@ }, "packages/mp3-encoder": { "name": "@mediabunny/mp3-encoder", - "version": "1.50.0", + "version": "1.50.1", "license": "MPL-2.0", "devDependencies": { "@types/emscripten": "^1.40.1" @@ -12954,10 +12954,10 @@ }, "packages/prores": { "name": "@mediabunny/prores", - "version": "1.50.0", + "version": "1.50.1", "license": "MPL-2.0", "dependencies": { - "turbores": "^1.1.1" + "turbores": "^1.1.2" }, "funding": { "type": "individual", @@ -12969,7 +12969,7 @@ }, "packages/server": { "name": "@mediabunny/server", - "version": "1.50.0", + "version": "1.50.1", "license": "MPL-2.0", "dependencies": { "@mediabunny/prores": "^1.50.0", diff --git a/package.json b/package.json index 0468804..4fd085c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mediabunny", "author": "Vanilagy", - "version": "1.50.0", + "version": "1.50.1", "description": "Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.", "type": "module", "workspaces": [ diff --git a/packages/aac-encoder/package.json b/packages/aac-encoder/package.json index 4ea08df..0829417 100644 --- a/packages/aac-encoder/package.json +++ b/packages/aac-encoder/package.json @@ -1,7 +1,7 @@ { "name": "@mediabunny/aac-encoder", "author": "Vanilagy", - "version": "1.50.0", + "version": "1.50.1", "description": "AAC encoder extension for Mediabunny, based on FFmpeg.", "main": "./dist/bundles/mediabunny-aac-encoder.mjs", "module": "./dist/bundles/mediabunny-aac-encoder.mjs", diff --git a/packages/ac3/package.json b/packages/ac3/package.json index 111a5ef..dd9cc9f 100644 --- a/packages/ac3/package.json +++ b/packages/ac3/package.json @@ -1,7 +1,7 @@ { "name": "@mediabunny/ac3", "author": "Vanilagy", - "version": "1.50.0", + "version": "1.50.1", "description": "AC-3 and E-AC-3 (Dolby Digital) decoder and encoder extension for Mediabunny, based on FFmpeg.", "main": "./dist/bundles/mediabunny-ac3.mjs", "module": "./dist/bundles/mediabunny-ac3.mjs", diff --git a/packages/flac-encoder/package.json b/packages/flac-encoder/package.json index f0ccc27..88cdd3d 100644 --- a/packages/flac-encoder/package.json +++ b/packages/flac-encoder/package.json @@ -1,7 +1,7 @@ { "name": "@mediabunny/flac-encoder", "author": "Vanilagy", - "version": "1.50.0", + "version": "1.50.1", "description": "FLAC encoder extension for Mediabunny, based on libFLAC.", "main": "./dist/bundles/mediabunny-flac-encoder.mjs", "module": "./dist/bundles/mediabunny-flac-encoder.mjs", diff --git a/packages/mp3-encoder/package.json b/packages/mp3-encoder/package.json index 39922b9..3c277bf 100644 --- a/packages/mp3-encoder/package.json +++ b/packages/mp3-encoder/package.json @@ -1,7 +1,7 @@ { "name": "@mediabunny/mp3-encoder", "author": "Vanilagy", - "version": "1.50.0", + "version": "1.50.1", "description": "MP3 encoder extension for Mediabunny, based on LAME.", "main": "./dist/bundles/mediabunny-mp3-encoder.mjs", "module": "./dist/bundles/mediabunny-mp3-encoder.mjs", diff --git a/packages/prores/README.md b/packages/prores/README.md index ee71c31..ff714d4 100644 --- a/packages/prores/README.md +++ b/packages/prores/README.md @@ -28,6 +28,25 @@ Alternatively, directly include them using a script tag: This will expose the global objects `Mediabunny` and `MediabunnyProres`. Use `mediabunny-prores.d.ts` to provide types for these globals. You can download the built distribution files from the [releases page](https://github.com/Vanilagy/mediabunny/releases). +## Setup + +`@mediabunny/prores` can make use of shared-memory multithreading to achieve maximum performance. To enable this in browsers, your website must be cross-origin isolated by setting the following response headers: +``` +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp +``` + +Alternatively, you can use: +``` +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: credentialless +``` +which is generally more permissive but is not supported in Safari (of course). + +--- + +If you cannot enable cross-origin isolation, `@mediabunny/prores` will fall back to a slower multithreading algorithm. + ## Usage ```ts diff --git a/packages/prores/package.json b/packages/prores/package.json index 0e97798..af543d7 100644 --- a/packages/prores/package.json +++ b/packages/prores/package.json @@ -1,7 +1,7 @@ { "name": "@mediabunny/prores", "author": "Vanilagy", - "version": "1.50.0", + "version": "1.50.1", "description": "Apple ProRes decoder extension for Mediabunny, based on TurboRes.", "main": "./dist/bundles/mediabunny-prores.mjs", "module": "./dist/bundles/mediabunny-prores.mjs", @@ -19,10 +19,6 @@ "src" ], "sideEffects": false, - "browser": { - "node:worker_threads": false, - "node:os": false - }, "license": "MPL-2.0", "repository": { "type": "git", @@ -38,7 +34,7 @@ "url": "https://github.com/sponsors/Vanilagy" }, "dependencies": { - "turbores": "^1.1.1" + "turbores": "^1.1.2" }, "peerDependencies": { "mediabunny": "^1.49.0" diff --git a/packages/server/package.json b/packages/server/package.json index 9e321de..7bcc449 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@mediabunny/server", "author": "Vanilagy", - "version": "1.50.0", + "version": "1.50.1", "description": "Adds full video and audio decoder and encoder support to Mediabunny for use in server-side environments (Node, Bun, Deno). Based on NodeAV.", "main": "./dist/bundles/mediabunny-server.cjs", "module": "./dist/bundles/mediabunny-server.mjs",