From c4398fb88c50d61562595c8283aec42a03338c1e Mon Sep 17 00:00:00 2001 From: Vanilagy <1696106+Vanilagy@users.noreply.github.com> Date: Wed, 4 Mar 2026 17:05:34 +0100 Subject: [PATCH] Add @mediabunny/aac-encoder extension package --- .github/workflows/release.yml | 23 +- .gitignore | 3 +- docs/.vitepress/config.mts | 1 + docs/api-config.json | 3 +- docs/guide/extensions/aac-encoder.md | 82 +++++ docs/guide/supported-formats-and-codecs.md | 22 +- eslint.config.mjs | 2 + package-lock.json | 19 ++ package.json | 2 +- packages/aac-encoder/.gitattributes | 1 + packages/aac-encoder/LICENSE | 373 +++++++++++++++++++++ packages/aac-encoder/README.md | 156 +++++++++ packages/aac-encoder/api-extractor.json | 37 ++ packages/aac-encoder/build/aac.js | Bin 0 -> 589600 bytes packages/aac-encoder/package.json | 55 +++ packages/aac-encoder/src/bridge.c | 190 +++++++++++ packages/aac-encoder/src/encode.worker.ts | 204 +++++++++++ packages/aac-encoder/src/encoder.ts | 306 +++++++++++++++++ packages/aac-encoder/src/index.ts | 20 ++ packages/aac-encoder/src/shared.ts | 66 ++++ packages/aac-encoder/tsconfig.json | 24 ++ packages/aac-encoder/tsdoc.json | 4 + packages/mp3-encoder/tsconfig.json | 1 - scripts/build.sh | 7 +- scripts/bundle.ts | 32 ++ scripts/check.sh | 6 +- shared/aac-misc.ts | 146 ++++++++ shared/bitstream.ts | 85 +++++ src/adts/adts-demuxer.ts | 3 +- src/adts/adts-misc.ts | 47 --- src/adts/adts-muxer.ts | 7 +- src/adts/adts-reader.ts | 2 +- src/codec-data.ts | 2 +- src/codec.ts | 102 +----- src/conversion.ts | 6 + src/flac/flac-demuxer.ts | 2 +- src/flac/flac-misc.ts | 3 +- src/flac/flac-muxer.ts | 2 +- src/isobmff/isobmff-boxes.ts | 2 +- src/isobmff/isobmff-demuxer.ts | 4 +- src/isobmff/isobmff-muxer.ts | 4 +- src/matroska/matroska-muxer.ts | 6 +- src/media-source.ts | 3 +- src/misc.ts | 81 +---- src/mpeg-ts/mpeg-ts-demuxer.ts | 5 +- src/mpeg-ts/mpeg-ts-muxer.ts | 7 +- test/node/aac-encoder-extension.test.ts | 82 +++++ tsconfig.vite.json | 1 + tsconfig.vitest.json | 3 +- vite.config.ts | 4 +- vitest.config.ts | 2 + 51 files changed, 1976 insertions(+), 274 deletions(-) create mode 100644 docs/guide/extensions/aac-encoder.md create mode 100644 packages/aac-encoder/.gitattributes create mode 100644 packages/aac-encoder/LICENSE create mode 100644 packages/aac-encoder/README.md create mode 100644 packages/aac-encoder/api-extractor.json create mode 100644 packages/aac-encoder/build/aac.js create mode 100644 packages/aac-encoder/package.json create mode 100644 packages/aac-encoder/src/bridge.c create mode 100644 packages/aac-encoder/src/encode.worker.ts create mode 100644 packages/aac-encoder/src/encoder.ts create mode 100644 packages/aac-encoder/src/index.ts create mode 100644 packages/aac-encoder/src/shared.ts create mode 100644 packages/aac-encoder/tsconfig.json create mode 100644 packages/aac-encoder/tsdoc.json create mode 100644 shared/aac-misc.ts create mode 100644 shared/bitstream.ts delete mode 100644 src/adts/adts-misc.ts create mode 100644 test/node/aac-encoder-extension.test.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 31b076b..441a113 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,7 +59,28 @@ jobs: - name: Upload build artifacts env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: gh release upload ${{ github.event.release.tag_name }} dist/bundles/mediabunny.cjs dist/bundles/mediabunny.min.cjs dist/bundles/mediabunny.mjs dist/bundles/mediabunny.min.mjs dist/mediabunny.d.ts packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.js packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.min.js packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.mjs packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.min.mjs packages/mp3-encoder/dist/mediabunny-mp3-encoder.d.ts packages/ac3/dist/bundles/mediabunny-ac3.js packages/ac3/dist/bundles/mediabunny-ac3.min.js packages/ac3/dist/bundles/mediabunny-ac3.mjs packages/ac3/dist/bundles/mediabunny-ac3.min.mjs packages/ac3/dist/mediabunny-ac3.d.ts + run: > + gh release upload ${{ github.event.release.tag_name }} + dist/bundles/mediabunny.cjs + dist/bundles/mediabunny.min.cjs + dist/bundles/mediabunny.mjs + dist/bundles/mediabunny.min.mjs + dist/mediabunny.d.ts + packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.js + packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.min.js + packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.mjs + packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.min.mjs + packages/mp3-encoder/dist/mediabunny-mp3-encoder.d.ts + packages/ac3/dist/bundles/mediabunny-ac3.js + packages/ac3/dist/bundles/mediabunny-ac3.min.js + packages/ac3/dist/bundles/mediabunny-ac3.mjs + packages/ac3/dist/bundles/mediabunny-ac3.min.mjs + packages/ac3/dist/mediabunny-ac3.d.ts + packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.js + packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.min.js + packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.mjs + packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.min.mjs + packages/aac-encoder/dist/mediabunny-aac-encoder.d.ts - name: Publish Mediabunny to npm run: npm publish --access public diff --git a/.gitignore b/.gitignore index 289f126..e4b72d3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ node_modules *.tsbuildinfo packages/mp3-encoder/dist -packages/ac3/dist \ No newline at end of file +packages/ac3/dist +packages/aac-encoder/dist \ No newline at end of file diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 7452915..a050b49 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -93,6 +93,7 @@ export default withMermaid({ text: 'Extensions', items: [ { text: 'mp3-encoder', link: '/guide/extensions/mp3-encoder' }, + { text: 'aac-encoder', link: '/guide/extensions/aac-encoder' }, { text: 'ac3', link: '/guide/extensions/ac3' }, ], }, diff --git a/docs/api-config.json b/docs/api-config.json index 202768f..53ba487 100644 --- a/docs/api-config.json +++ b/docs/api-config.json @@ -20,5 +20,6 @@ "Miscellaneous": "Whatever's left.", "@mediabunny/mp3-encoder": "Adds MP3 encoder support to Mediabunny.", - "@mediabunny/ac3": "Adds AC-3/E-AC-3 decoder and encoder support to Mediabunny." + "@mediabunny/ac3": "Adds AC-3/E-AC-3 decoder and encoder support to Mediabunny.", + "@mediabunny/aac-encoder": "Adds AAC encoder support to Mediabunny." } diff --git a/docs/guide/extensions/aac-encoder.md b/docs/guide/extensions/aac-encoder.md new file mode 100644 index 0000000..a8b3488 --- /dev/null +++ b/docs/guide/extensions/aac-encoder.md @@ -0,0 +1,82 @@ +# @mediabunny/aac-encoder + +Some browsers lack support for AAC encoding in their WebCodecs implementations. This extension package provides a reliable AAC-LC encoder for use with Mediabunny. It is implemented using Mediabunny's [custom coder API](../supported-formats-and-codecs#custom-coders) and uses a fast, size-optimized WASM build of [FFmpeg](https://ffmpeg.org/)'s AAC encoder under the hood. + + + GitHub page + + + +## Installation + +This library peer-depends on Mediabunny. Install both using npm: +```bash +npm install mediabunny @mediabunny/aac-encoder +``` + +Alternatively, directly include them using a script tag: +```html + + +``` + +This will expose the global objects `Mediabunny` and `MediabunnyAacEncoder`. Use `mediabunny-aac-encoder.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). + +## Usage + +```ts +import { registerAacEncoder } from '@mediabunny/aac-encoder'; + +registerAacEncoder(); +``` +That's it - Mediabunny now uses the registered AAC encoder automatically. + +If you want to be more correct, check for native browser support first: +```ts +import { canEncodeAudio } from 'mediabunny'; +import { registerAacEncoder } from '@mediabunny/aac-encoder'; + +if (!(await canEncodeAudio('aac'))) { + registerAacEncoder(); +} +``` + +## Example + +Here, we convert an input file to an MP4 with AAC audio: + +```ts +import { + Input, + ALL_FORMATS, + BlobSource, + Output, + BufferTarget, + Mp4OutputFormat, + canEncodeAudio, + Conversion, +} from 'mediabunny'; +import { registerAacEncoder } from '@mediabunny/aac-encoder'; + +if (!(await canEncodeAudio('aac'))) { + // Only register the custom encoder if there's no native support + registerAacEncoder(); +} + +const input = new Input({ + source: new BlobSource(file), // From a file picker, for example + formats: ALL_FORMATS, +}); +const output = new Output({ + format: new Mp4OutputFormat(), + target: new BufferTarget(), +}); + +const conversion = await Conversion.init({ + input, + output, +}); +await conversion.execute(); + +output.target.buffer; // => ArrayBuffer containing the MP4 file +``` diff --git a/docs/guide/supported-formats-and-codecs.md b/docs/guide/supported-formats-and-codecs.md index dbaf533..1e2f5c3 100644 --- a/docs/guide/supported-formats-and-codecs.md +++ b/docs/guide/supported-formats-and-codecs.md @@ -37,13 +37,13 @@ Mediabunny ships with built-in decoders and encoders for all audio PCM codecs, m ### Audio codecs -- `'aac'` - Advanced Audio Coding (AAC) +- `'aac'` - Advanced Audio Coding (AAC) [^1] - `'opus'` - Opus -- `'mp3'` - MP3 +- `'mp3'` - MP3 [^2] - `'vorbis'` - Vorbis - `'flac'` - Free Lossless Audio Codec (FLAC) -- `'ac3'` - Dolby Digital (AC-3) [^1] -- `'eac3'` - Dolby Digital Plus (E-AC-3) [^1] +- `'ac3'` - Dolby Digital (AC-3) [^3] +- `'eac3'` - Dolby Digital Plus (E-AC-3) [^3] - `'pcm-u8'` - 8-bit unsigned PCM - `'pcm-s8'` - 8-bit signed PCM - `'pcm-s16'` - 16-bit little-endian signed PCM @@ -59,8 +59,6 @@ Mediabunny ships with built-in decoders and encoders for all audio PCM codecs, m - `'ulaw'` - μ-law PCM - `'alaw'` - A-law PCM -[^1]: AC-3 and E-AC-3 are not natively supported by WebCodecs. To encode or decode these codecs, you can use the [`@mediabunny/ac3`](./extensions/ac3) extension package, or provide your own [custom coder](#custom-coders). - ### Subtitle codecs - `'webvtt'` - WebVTT @@ -69,7 +67,7 @@ Mediabunny ships with built-in decoders and encoders for all audio PCM codecs, m Not all codecs can be used with all containers. The following table specifies the supported codec-container combinations: -| | .mp4 | .mov | .mkv | .webm[^2] | .ogg | .mp3 | .wav | .aac | .flac | .ts | +| | .mp4 | .mov | .mkv | .webm[^4] | .ogg | .mp3 | .wav | .aac | .flac | .ts | |:--------------:|:--------:|:-----:|:-----:|:---------:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | `'avc'` | ✓ | ✓ | ✓ | | | | | | | ✓ | | `'hevc'` | ✓ | ✓ | ✓ | | | | | | | ✓ | @@ -97,11 +95,13 @@ Not all codecs can be used with all containers. The following table specifies th | `'pcm-f64be'` | ✓ | ✓ | | | | | | | | | | `'ulaw'` | | ✓ | | | | | ✓ | | | | | `'alaw'` | | ✓ | | | | | ✓ | | | | -| `'webvtt'`[^3] | (✓) | | (✓) | (✓) | | | | | | | +| `'webvtt'`[^5] | (✓) | | (✓) | (✓) | | | | | | | - -[^2]: WebM only supports a small subset of the codecs supported by Matroska. However, this library can technically read all codecs from a WebM that are supported by Matroska. -[^3]: WebVTT can only be written, not read. +[^1]: In some browsers, AAC encoding is not supported by WebCodecs. You can polyfill it with the [`@mediabunny/aac-encoder`](./extensions/aac-encoder) extension package, or provide your own [custom coder](#custom-coders). +[^2]: MP3 encoding is not supported by WebCodecs. You can polyfill it with the [`@mediabunny/mp3-encoder`](./extensions/mp3-encoder) extension package, or provide your own [custom coder](#custom-coders). +[^3]: AC-3 and E-AC-3 are not natively supported by WebCodecs. To encode or decode these codecs, you can use the [`@mediabunny/ac3`](./extensions/ac3) extension package, or provide your own [custom coder](#custom-coders). +[^4]: WebM only supports a small subset of the codecs supported by Matroska. However, this library can technically read all codecs from a WebM that are supported by Matroska. +[^5]: WebVTT can only be written, not read. ## Querying codec encodability diff --git a/eslint.config.mjs b/eslint.config.mjs index fa924e2..95f80b1 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -40,6 +40,8 @@ export default tseslint.config( 'packages/mp3-encoder/build', 'packages/ac3/dist', 'packages/ac3/build', + 'packages/aac-encoder/dist', + 'packages/aac-encoder/build', 'eslint.config.mjs', 'docs/.vitepress/cache', 'test/public', diff --git a/package-lock.json b/package-lock.json index 7fb6a76..4cdbc8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1413,6 +1413,10 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mediabunny/aac-encoder": { + "resolved": "packages/aac-encoder", + "link": true + }, "node_modules/@mediabunny/ac3": { "resolved": "packages/ac3", "link": true @@ -12067,6 +12071,21 @@ "url": "https://github.com/sponsors/wooorm" } }, + "packages/aac-encoder": { + "name": "@mediabunny/aac-encoder", + "version": "1.35.0", + "license": "MPL-2.0", + "devDependencies": { + "@types/emscripten": "^1.40.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/Vanilagy" + }, + "peerDependencies": { + "mediabunny": "^1.0.0" + } + }, "packages/ac3": { "name": "@mediabunny/ac3", "version": "1.35.1", diff --git a/package.json b/package.json index 15fe549..536af7e 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "docs:dev": "vitepress dev docs", "docs:build": "npm run build && npm run docs:generate && vitepress build docs && npm run examples:build && cp dist/mediabunny.d.ts dist-docs/", "docs:preview": "vitepress preview docs", - "docs:generate": "tsx scripts/generate-api-docs.ts src/index.ts packages/mp3-encoder/src/index.ts packages/ac3/src/index.ts docs/api-config.json", + "docs:generate": "tsx scripts/generate-api-docs.ts src/index.ts packages/mp3-encoder/src/index.ts packages/ac3/src/index.ts packages/aac-encoder/src/index.ts docs/api-config.json", "dev": "vite", "examples:build": "vite build", "fix-build-import-paths": "tsx scripts/add-import-extensions.ts", diff --git a/packages/aac-encoder/.gitattributes b/packages/aac-encoder/.gitattributes new file mode 100644 index 0000000..72ef19a --- /dev/null +++ b/packages/aac-encoder/.gitattributes @@ -0,0 +1 @@ +build/* linguist-generated diff --git a/packages/aac-encoder/LICENSE b/packages/aac-encoder/LICENSE new file mode 100644 index 0000000..d0a1fa1 --- /dev/null +++ b/packages/aac-encoder/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/packages/aac-encoder/README.md b/packages/aac-encoder/README.md new file mode 100644 index 0000000..69062c2 --- /dev/null +++ b/packages/aac-encoder/README.md @@ -0,0 +1,156 @@ +# @mediabunny/aac-encoder + +[![](https://img.shields.io/npm/v/@mediabunny/aac-encoder)](https://www.npmjs.com/package/@mediabunny/aac-encoder) +[![](https://img.shields.io/bundlephobia/minzip/@mediabunny/aac-encoder)](https://bundlephobia.com/package/@mediabunny/aac-encoder) +[![](https://img.shields.io/npm/dm/@mediabunny/aac-encoder)](https://www.npmjs.com/package/@mediabunny/aac-encoder) +[![](https://img.shields.io/discord/1390044844285497344?logo=discord&label=Discord)](https://discord.gg/hmpkyYuS4U) + +
+ +
+ +Some browsers lack support for AAC encoding in their WebCodecs implementations. This extension package provides a reliable AAC-LC encoder for use with [Mediabunny](https://github.com/Vanilagy/mediabunny). It is implemented using Mediabunny's [custom coder API](https://mediabunny.dev/guide/supported-formats-and-codecs#custom-coders) and uses a fast, size-optimized WASM build of [FFmpeg](https://ffmpeg.org/)'s AAC encoder under the hood. + +> This package, like the rest of Mediabunny, is enabled by its [sponsors](https://mediabunny.dev/#sponsors) and their donations. If you've derived value from this package, please consider [leaving a donation](https://github.com/sponsors/Vanilagy)! 💘 + +## Installation + +This library peer-depends on Mediabunny. Install both using npm: +```bash +npm install mediabunny @mediabunny/aac-encoder +``` + +Alternatively, directly include them using a script tag: +```html + + +``` + +This will expose the global objects `Mediabunny` and `MediabunnyAacEncoder`. Use `mediabunny-aac-encoder.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). + +## Usage + +```ts +import { registerAacEncoder } from '@mediabunny/aac-encoder'; + +registerAacEncoder(); +``` +That's it - Mediabunny now uses the registered AAC encoder automatically. + +If you want to be more correct, check for native browser support first: +```ts +import { canEncodeAudio } from 'mediabunny'; +import { registerAacEncoder } from '@mediabunny/aac-encoder'; + +if (!(await canEncodeAudio('aac'))) { + registerAacEncoder(); +} +``` + +## Example + +Here, we convert an input file to an MP4 with AAC audio: + +```ts +import { + Input, + ALL_FORMATS, + BlobSource, + Output, + BufferTarget, + Mp4OutputFormat, + canEncodeAudio, + Conversion, +} from 'mediabunny'; +import { registerAacEncoder } from '@mediabunny/aac-encoder'; + +if (!(await canEncodeAudio('aac'))) { + // Only register the custom encoder if there's no native support + registerAacEncoder(); +} + +const input = new Input({ + source: new BlobSource(file), // From a file picker, for example + formats: ALL_FORMATS, +}); +const output = new Output({ + format: new Mp4OutputFormat(), + target: new BufferTarget(), +}); + +const conversion = await Conversion.init({ + input, + output, +}); +await conversion.execute(); + +output.target.buffer; // => ArrayBuffer containing the MP4 file +``` + +For more ways of using Mediabunny, refer to its [guide](https://mediabunny.dev/guide/introduction). + +## Building and development + +For simplicity, all built WASM artifacts are included in the repo, since these rarely change. However, here are the instructions for building them from scratch: + +[Install Emscripten](https://emscripten.org/docs/getting_started/downloads.html) and clone [FFmpeg](https://github.com/FFmpeg/FFmpeg). Then, from the Mediabunny root and with Emscripten sourced in: + +```bash +export FFMPEG_PATH=/path/to/ffmpeg +export MEDIABUNNY_ROOT=$PWD + +# Build FFmpeg +cd $FFMPEG_PATH +emmake make distclean +emconfigure ./configure \ + --target-os=none \ + --arch=x86_32 \ + --enable-cross-compile \ + --disable-asm \ + --disable-x86asm \ + --disable-inline-asm \ + --disable-programs \ + --disable-doc \ + --disable-debug \ + --disable-all \ + --disable-everything \ + --disable-autodetect \ + --disable-pthreads \ + --disable-runtime-cpudetect \ + --enable-avcodec \ + --enable-encoder=aac \ + --cc="emcc" \ + --cxx=em++ \ + --ar=emar \ + --ranlib=emranlib \ + --extra-cflags="-DNDEBUG -Oz -flto -msimd128" \ + --extra-ldflags="-Oz -flto" +emmake make + +# Compile the bridge between JavaScript and FFmpeg's API +cd $MEDIABUNNY_ROOT/packages/aac-encoder +emcc src/bridge.c \ + $FFMPEG_PATH/libavcodec/libavcodec.a \ + $FFMPEG_PATH/libavutil/libavutil.a \ + -I$FFMPEG_PATH \ + -s MODULARIZE=1 \ + -s EXPORT_ES6=1 \ + -s SINGLE_FILE=1 \ + -s ALLOW_MEMORY_GROWTH=1 \ + -s ENVIRONMENT=web,worker \ + -s FILESYSTEM=0 \ + -s MALLOC=emmalloc \ + -s SUPPORT_LONGJMP=0 \ + -s EXPORTED_RUNTIME_METHODS=cwrap,HEAPU8 \ + -s EXPORTED_FUNCTIONS=_malloc,_free \ + -msimd128 \ + -flto \ + -Oz \ + -o build/aac.js +``` + +This generates `build/aac.js`, which contains both the JavaScript "glue code" as well as the compiled WASM inlined. + +### Building the package + +Then, the complete JavaScript package can be built alongside the rest of Mediabunny by running `npm run build` in Mediabunny's root. diff --git a/packages/aac-encoder/api-extractor.json b/packages/aac-encoder/api-extractor.json new file mode 100644 index 0000000..6908bb7 --- /dev/null +++ b/packages/aac-encoder/api-extractor.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "mainEntryPointFilePath": "dist/modules/src/index.d.ts", + "bundledPackages": [], + "compiler": {}, + "apiReport": { + "enabled": false + }, + "docModel": { + "enabled": false + }, + "dtsRollup": { + "enabled": true, + "untrimmedFilePath": "dist/mediabunny-aac-encoder.d.ts" + }, + "tsdocMetadata": { + "enabled": false + }, + "messages": { + "compilerMessageReporting": { + "default": { + "logLevel": "warning" + } + }, + "extractorMessageReporting": { + "default": { + "logLevel": "warning" + } + }, + "tsdocMessageReporting": { + "default": { + "logLevel": "warning" + } + } + }, + "newlineKind": "lf" +} diff --git a/packages/aac-encoder/build/aac.js b/packages/aac-encoder/build/aac.js new file mode 100644 index 0000000000000000000000000000000000000000..9bd7d8d5b7ec0bfe1856801aa10329b6d93b77b3 GIT binary patch literal 589600 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 z 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 MZ5ys^`TzO<0MVLfv;Y7A literal 0 HcmV?d00001 diff --git a/packages/aac-encoder/package.json b/packages/aac-encoder/package.json new file mode 100644 index 0000000..5f7560f --- /dev/null +++ b/packages/aac-encoder/package.json @@ -0,0 +1,55 @@ +{ + "name": "@mediabunny/aac-encoder", + "author": "Vanilagy", + "version": "1.35.1", + "description": "AAC encoder extension for Mediabunny, based on FFmpeg.", + "main": "./dist/bundles/mediabunny-aac-encoder.mjs", + "module": "./dist/bundles/mediabunny-aac-encoder.mjs", + "types": "./dist/modules/src/index.d.ts", + "exports": { + "types": "./dist/modules/src/index.d.ts", + "import": "./dist/bundles/mediabunny-aac-encoder.mjs", + "require": "./dist/bundles/mediabunny-aac-encoder.mjs" + }, + "files": [ + "README.md", + "package.json", + "LICENSE", + "dist", + "src" + ], + "browser": { + "worker_threads": false + }, + "sideEffects": false, + "license": "MPL-2.0", + "repository": { + "type": "git", + "url": "git+https://github.com/Vanilagy/mediabunny.git", + "directory": "packages/aac-encoder" + }, + "bugs": { + "url": "https://github.com/Vanilagy/mediabunny/issues" + }, + "homepage": "https://mediabunny.dev/guide/extensions/aac-encoder", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/Vanilagy" + }, + "peerDependencies": { + "mediabunny": "^1.0.0" + }, + "devDependencies": { + "@types/emscripten": "^1.40.1" + }, + "keywords": [ + "aac", + "encoding", + "codec", + "mediabunny", + "ffmpeg", + "browser", + "wasm", + "polyfill" + ] +} diff --git a/packages/aac-encoder/src/bridge.c b/packages/aac-encoder/src/bridge.c new file mode 100644 index 0000000..0306e38 --- /dev/null +++ b/packages/aac-encoder/src/bridge.c @@ -0,0 +1,190 @@ +/*! + * Copyright (c) 2026-present, Vanilagy and contributors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +#include +#include +#include +#include "libavcodec/avcodec.h" +#include "libavutil/opt.h" +#include "libavutil/channel_layout.h" +#include "libavutil/log.h" + +typedef struct { + AVCodecContext *codec_ctx; + AVPacket *packet; + AVFrame *frame; + float *input_buffer; + int input_buffer_size; + int encoded_pts; + int encoded_duration; +} EncoderContext; + +EMSCRIPTEN_KEEPALIVE +EncoderContext *init_encoder(int channels, int sample_rate, int bitrate) { + av_log_set_level(AV_LOG_ERROR); + + const AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_AAC); + if (!codec) return NULL; + + AVCodecContext *codec_ctx = avcodec_alloc_context3(codec); + if (!codec_ctx) return NULL; + + codec_ctx->sample_fmt = AV_SAMPLE_FMT_FLTP; + codec_ctx->sample_rate = sample_rate; + codec_ctx->bit_rate = bitrate; + codec_ctx->time_base = (AVRational){1, sample_rate}; + + AVChannelLayout layout; + av_channel_layout_default(&layout, channels); + av_channel_layout_copy(&codec_ctx->ch_layout, &layout); + av_channel_layout_uninit(&layout); + + if (avcodec_open2(codec_ctx, codec, NULL) < 0) { + avcodec_free_context(&codec_ctx); + return NULL; + } + + AVPacket *packet = av_packet_alloc(); + if (!packet) { + avcodec_free_context(&codec_ctx); + return NULL; + } + + AVFrame *frame = av_frame_alloc(); + if (!frame) { + av_packet_free(&packet); + avcodec_free_context(&codec_ctx); + return NULL; + } + + frame->format = AV_SAMPLE_FMT_FLTP; + frame->sample_rate = sample_rate; + frame->nb_samples = codec_ctx->frame_size; + av_channel_layout_copy(&frame->ch_layout, &codec_ctx->ch_layout); + + if (av_frame_get_buffer(frame, 0) < 0) { + av_frame_free(&frame); + av_packet_free(&packet); + avcodec_free_context(&codec_ctx); + return NULL; + } + + EncoderContext *ctx = malloc(sizeof(EncoderContext)); + if (!ctx) { + av_frame_free(&frame); + av_packet_free(&packet); + avcodec_free_context(&codec_ctx); + return NULL; + } + + ctx->codec_ctx = codec_ctx; + ctx->packet = packet; + ctx->frame = frame; + ctx->input_buffer = NULL; + ctx->input_buffer_size = 0; + ctx->encoded_pts = 0; + ctx->encoded_duration = 0; + + return ctx; +} + +EMSCRIPTEN_KEEPALIVE +int get_encoder_frame_size(EncoderContext *ctx) { + return ctx->codec_ctx->frame_size; +} + +EMSCRIPTEN_KEEPALIVE +uint8_t *get_encoder_extradata(EncoderContext *ctx) { + return ctx->codec_ctx->extradata; +} + +EMSCRIPTEN_KEEPALIVE +int get_encoder_extradata_size(EncoderContext *ctx) { + return ctx->codec_ctx->extradata_size; +} + +EMSCRIPTEN_KEEPALIVE +float *get_encode_input_ptr(EncoderContext *ctx, int size) { + if (ctx->input_buffer_size < size) { + free(ctx->input_buffer); + ctx->input_buffer = malloc(size); + if (!ctx->input_buffer) { + ctx->input_buffer_size = 0; + return NULL; + } + ctx->input_buffer_size = size; + } + return ctx->input_buffer; +} + +EMSCRIPTEN_KEEPALIVE +int send_frame(EncoderContext *ctx, int pts) { + int channels = ctx->codec_ctx->ch_layout.nb_channels; + int frame_size = ctx->frame->nb_samples; + + ctx->frame->pts = pts; + + // Deinterleave f32 input into the frame's f32-planar planes + float *input = ctx->input_buffer; + for (int ch = 0; ch < channels; ch++) { + float *plane = (float *)ctx->frame->data[ch]; + for (int i = 0; i < frame_size; i++) { + plane[i] = input[i * channels + ch]; + } + } + + return avcodec_send_frame(ctx->codec_ctx, ctx->frame); +} + +EMSCRIPTEN_KEEPALIVE +int receive_packet(EncoderContext *ctx) { + int ret = avcodec_receive_packet(ctx->codec_ctx, ctx->packet); + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { + return 0; + } + if (ret < 0) return ret; + + ctx->encoded_pts = ctx->packet->pts; + ctx->encoded_duration = ctx->packet->duration; + + return ctx->packet->size; +} + +EMSCRIPTEN_KEEPALIVE +void flush_encoder_start(EncoderContext *ctx) { + avcodec_send_frame(ctx->codec_ctx, NULL); +} + +EMSCRIPTEN_KEEPALIVE +void reset_encoder(EncoderContext *ctx) { + avcodec_flush_buffers(ctx->codec_ctx); +} + +EMSCRIPTEN_KEEPALIVE +uint8_t *get_encoded_data(EncoderContext *ctx) { + return ctx->packet->data; +} + +EMSCRIPTEN_KEEPALIVE +int get_encoded_pts(EncoderContext *ctx) { + return ctx->encoded_pts; +} + +EMSCRIPTEN_KEEPALIVE +int get_encoded_duration(EncoderContext *ctx) { + return ctx->encoded_duration; +} + +EMSCRIPTEN_KEEPALIVE +void close_encoder(EncoderContext *ctx) { + free(ctx->input_buffer); + av_frame_free(&ctx->frame); + av_packet_free(&ctx->packet); + avcodec_free_context(&ctx->codec_ctx); + free(ctx); +} diff --git a/packages/aac-encoder/src/encode.worker.ts b/packages/aac-encoder/src/encode.worker.ts new file mode 100644 index 0000000..d109920 --- /dev/null +++ b/packages/aac-encoder/src/encode.worker.ts @@ -0,0 +1,204 @@ +/*! + * Copyright (c) 2026-present, Vanilagy and contributors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +import createModule from '../build/aac'; +import type { WorkerCommand, WorkerResponse, WorkerResponseData } from './shared'; + +type ExtendedEmscriptenModule = EmscriptenModule & { + cwrap: typeof cwrap; +}; + +let module: ExtendedEmscriptenModule; +let modulePromise: Promise | null = null; + +let initEncoderFn: (channels: number, sampleRate: number, bitrate: number) => number; +let getEncoderFrameSize: (ctx: number) => number; +let getEncoderExtradata: (ctx: number) => number; +let getEncoderExtradataSize: (ctx: number) => number; +let getEncodeInputPtr: (ctx: number, size: number) => number; +let sendFrameFn: (ctx: number, pts: number) => number; +let receivePacketFn: (ctx: number) => number; +let flushEncoderStartFn: (ctx: number) => void; +let resetEncoderFn: (ctx: number) => void; +let getEncodedData: (ctx: number) => number; +let getEncodedPts: (ctx: number) => number; +let getEncodedDuration: (ctx: number) => number; +let closeEncoderFn: (ctx: number) => void; + +const ensureModule = async () => { + if (!module) { + if (modulePromise) { + return modulePromise; + } + + modulePromise = createModule() as Promise; + module = await modulePromise; + modulePromise = null; + + initEncoderFn = module.cwrap('init_encoder', 'number', ['number', 'number', 'number']); + getEncoderFrameSize = module.cwrap('get_encoder_frame_size', 'number', ['number']); + getEncoderExtradata = module.cwrap('get_encoder_extradata', 'number', ['number']); + getEncoderExtradataSize = module.cwrap('get_encoder_extradata_size', 'number', ['number']); + getEncodeInputPtr = module.cwrap('get_encode_input_ptr', 'number', ['number', 'number']); + sendFrameFn = module.cwrap('send_frame', 'number', ['number', 'number']); + receivePacketFn = module.cwrap('receive_packet', 'number', ['number']); + flushEncoderStartFn = module.cwrap('flush_encoder_start', null, ['number']); + resetEncoderFn = module.cwrap('reset_encoder', null, ['number']); + getEncodedData = module.cwrap('get_encoded_data', 'number', ['number']); + getEncodedPts = module.cwrap('get_encoded_pts', 'number', ['number']); + getEncodedDuration = module.cwrap('get_encoded_duration', 'number', ['number']); + closeEncoderFn = module.cwrap('close_encoder', null, ['number']); + } +}; + +const initEncoder = async ( + numberOfChannels: number, + sampleRate: number, + bitrate: number, +) => { + await ensureModule(); + + const ctx = initEncoderFn(numberOfChannels, sampleRate, bitrate); + if (ctx === 0) { + throw new Error('Failed to initialize AAC encoder.'); + } + + const frameSize = getEncoderFrameSize(ctx); + + const extradataPtr = getEncoderExtradata(ctx); + const extradataSize = getEncoderExtradataSize(ctx); + const extradata = module.HEAPU8.slice(extradataPtr, extradataPtr + extradataSize).buffer; + + return { ctx, frameSize, extradata }; +}; + +type PacketInfo = { encodedData: ArrayBuffer; pts: number; duration: number }; + +const drainPackets = (ctx: number) => { + const packets: PacketInfo[] = []; + + let size: number; + while ((size = receivePacketFn(ctx)) > 0) { + const ptr = getEncodedData(ctx); + const encodedData = module.HEAPU8.slice(ptr, ptr + size).buffer; + const pts = getEncodedPts(ctx); + const duration = getEncodedDuration(ctx); + packets.push({ encodedData, pts, duration }); + } + + return packets; +}; + +const encode = (ctx: number, audioData: ArrayBuffer, timestamp: number) => { + const audioBytes = new Uint8Array(audioData); + + const inputPtr = getEncodeInputPtr(ctx, audioBytes.length); + if (inputPtr === 0) { + throw new Error('Failed to allocate encoder input buffer.'); + } + module.HEAPU8.set(audioBytes, inputPtr); + + const ret = sendFrameFn(ctx, timestamp); + if (ret < 0) { + throw new Error(`Encode failed with error code ${ret}.`); + } + + return drainPackets(ctx); +}; + +const onMessage = (data: { id: number; command: WorkerCommand }) => { + const { id, command } = data; + + const handleCommand = async (): Promise => { + try { + let result: WorkerResponseData; + const transferables: Transferable[] = []; + + switch (command.type) { + case 'init': { + const { ctx, frameSize, extradata } = await initEncoder( + command.data.numberOfChannels, + command.data.sampleRate, + command.data.bitrate, + ); + result = { type: command.type, ctx, frameSize, extradata }; + transferables.push(extradata); + }; break; + + case 'encode': { + const packets = encode( + command.data.ctx, + command.data.audioData, + command.data.timestamp, + ); + for (const p of packets) { + transferables.push(p.encodedData); + } + result = { type: command.type, packets }; + }; break; + + case 'flush': { + flushEncoderStartFn(command.data.ctx); + const packets = drainPackets(command.data.ctx); + for (const p of packets) { + transferables.push(p.encodedData); + } + resetEncoderFn(command.data.ctx); + result = { type: command.type, packets }; + }; break; + + case 'close': { + closeEncoderFn(command.data.ctx); + result = { type: command.type }; + }; break; + } + + const response: WorkerResponse = { + id, + success: true, + data: result, + }; + sendMessage(response, transferables); + } catch (error: unknown) { + const response: WorkerResponse = { + id, + success: false, + error, + }; + sendMessage(response); + } + }; + + void handleCommand(); +}; + +const sendMessage = (data: unknown, transferables?: Transferable[]) => { + if (parentPort) { + parentPort.postMessage(data, transferables ?? []); + } else { + self.postMessage(data, { transfer: transferables ?? [] }); + } +}; + +let parentPort: { + postMessage: (data: unknown, transferables?: Transferable[]) => void; + on: (event: string, listener: (data: never) => void) => void; +} | null = null; + +if (typeof self === 'undefined') { + const workerModule = 'worker_threads'; + // eslint-disable-next-line @stylistic/max-len + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-member-access + parentPort = require(workerModule).parentPort; +} + +if (parentPort) { + parentPort.on('message', onMessage); +} else { + self.addEventListener('message', event => onMessage(event.data as { id: number; command: WorkerCommand })); +} diff --git a/packages/aac-encoder/src/encoder.ts b/packages/aac-encoder/src/encoder.ts new file mode 100644 index 0000000..6f2d681 --- /dev/null +++ b/packages/aac-encoder/src/encoder.ts @@ -0,0 +1,306 @@ +/*! + * Copyright (c) 2026-present, Vanilagy and contributors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +import { + type AdtsHeaderTemplate, + buildAdtsHeaderTemplate, + parseAacAudioSpecificConfig, + writeAdtsFrameLength, +} from '../../../shared/aac-misc'; +import { + CustomAudioEncoder, + AudioCodec, + AudioSample, + EncodedPacket, + registerEncoder, +} from 'mediabunny'; +import type { WorkerCommand, WorkerResponse, WorkerResponseData } from './shared'; +// @ts-expect-error An esbuild plugin handles this, TypeScript doesn't need to understand +import createWorker from './encode.worker'; + +const AAC_SAMPLE_RATES = [ + 96000, 88200, 64000, 48000, 44100, 32000, + 24000, 22050, 16000, 12000, 11025, 8000, 7350, +]; + +class AacEncoder extends CustomAudioEncoder { + private worker: Worker | null = null; + private nextMessageId = 0; + private pendingMessages = new Map void; + reject: (reason?: unknown) => void; + }>(); + + private ctx = 0; + private encoderFrameSize = 0; + private sampleRate = 0; + private numberOfChannels = 0; + private chunkMetadata: EncodedAudioChunkMetadata = {}; + private useAdts = false; + private adtsHeaderTemplate: AdtsHeaderTemplate | null = null; + private description: Uint8Array | null = null; + + // Accumulate interleaved f32 samples until we have a full frame + private pendingBuffer = new Float32Array(2 ** 16); + private pendingFrames = 0; + private nextSampleTimestampInSamples: number | null = null; + private nextPacketTimestampInSamples: number | null = null; + + static override supports(codec: AudioCodec, config: AudioEncoderConfig): boolean { + return codec === 'aac' + && config.numberOfChannels >= 1 + && config.numberOfChannels <= 8 + && AAC_SAMPLE_RATES.includes(config.sampleRate) + && config.bitrate !== undefined; + } + + async init() { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + this.worker = (await createWorker()) as Worker; + + const onMessage = (data: WorkerResponse) => { + const pending = this.pendingMessages.get(data.id); + assert(pending !== undefined); + + this.pendingMessages.delete(data.id); + if (data.success) { + pending.resolve(data.data); + } else { + pending.reject(data.error); + } + }; + + if (this.worker.addEventListener) { + this.worker.addEventListener('message', event => onMessage(event.data as WorkerResponse)); + } else { + const nodeWorker = this.worker as unknown as { + on: (event: string, listener: (data: never) => void) => void; + }; + nodeWorker.on('message', onMessage); + } + + assert(this.config.bitrate !== undefined); + this.sampleRate = this.config.sampleRate; + this.numberOfChannels = this.config.numberOfChannels; + + const result = await this.sendCommand({ + type: 'init', + data: { + numberOfChannels: this.config.numberOfChannels, + sampleRate: this.config.sampleRate, + bitrate: this.config.bitrate, + }, + }); + + this.ctx = result.ctx; + this.encoderFrameSize = result.frameSize; + + // The ffmpeg encoder provides an AudioSpecificConfig as extradata after init + const description = new Uint8Array(result.extradata); + + const aacConfig = (this.config as { aac?: { format?: 'aac' | 'adts' } }).aac; + this.useAdts = aacConfig?.format === 'adts'; + + if (this.useAdts) { + const audioSpecificConfig = parseAacAudioSpecificConfig(description); + this.adtsHeaderTemplate = buildAdtsHeaderTemplate(audioSpecificConfig); + } + + this.description = this.useAdts ? null : description; + this.resetInternalState(); + } + + private resetInternalState() { + this.pendingFrames = 0; + this.nextSampleTimestampInSamples = null; + this.nextPacketTimestampInSamples = null; + + this.chunkMetadata = { + decoderConfig: { + codec: 'mp4a.40.2', + numberOfChannels: this.config.numberOfChannels, + sampleRate: this.config.sampleRate, + ...(this.description ? { description: this.description } : {}), + }, + }; + } + + async encode(audioSample: AudioSample) { + if (this.nextSampleTimestampInSamples === null) { + this.nextSampleTimestampInSamples = Math.round(audioSample.timestamp * this.sampleRate); + this.nextPacketTimestampInSamples = this.nextSampleTimestampInSamples; + } + + const channels = this.numberOfChannels; + const incomingFrames = audioSample.numberOfFrames; + + // Extract interleaved f32 data + const totalBytes = audioSample.allocationSize({ format: 'f32', planeIndex: 0 }); + const audioBytes = new Uint8Array(totalBytes); + audioSample.copyTo(audioBytes, { format: 'f32', planeIndex: 0 }); + const incomingData = new Float32Array(audioBytes.buffer); + + const requiredSamples = (this.pendingFrames + incomingFrames) * channels; + if (requiredSamples > this.pendingBuffer.length) { + let newSize = this.pendingBuffer.length; + while (newSize < requiredSamples) { + newSize *= 2; + } + const newBuffer = new Float32Array(newSize); + newBuffer.set(this.pendingBuffer.subarray(0, this.pendingFrames * channels)); + this.pendingBuffer = newBuffer; + } + this.pendingBuffer.set(incomingData, this.pendingFrames * channels); + this.pendingFrames += incomingFrames; + + while (this.pendingFrames >= this.encoderFrameSize) { + await this.encodeOneFrame(); + } + } + + async flush() { + // Pad remaining samples with silence to fill a full frame + if (this.pendingFrames > 0) { + const channels = this.numberOfChannels; + const frameSize = this.encoderFrameSize; + const usedSamples = this.pendingFrames * channels; + const frameSamples = frameSize * channels; + + this.pendingBuffer.fill(0, usedSamples, frameSamples); + this.pendingFrames = frameSize; + + await this.encodeOneFrame(); + } + + const result = await this.sendCommand({ type: 'flush', data: { ctx: this.ctx } }); + this.emitPackets(result.packets); + + this.resetInternalState(); + } + + close() { + void this.sendCommand({ type: 'close', data: { ctx: this.ctx } }); + this.worker?.terminate(); + } + + private async encodeOneFrame() { + assert(this.nextSampleTimestampInSamples !== null); + assert(this.nextPacketTimestampInSamples !== null); + + const channels = this.numberOfChannels; + const frameSize = this.encoderFrameSize; + const frameSamples = frameSize * channels; + + const frameData = this.pendingBuffer.slice(0, frameSamples); + + // Shift remaining using copyWithin + this.pendingFrames -= frameSize; + if (this.pendingFrames > 0) { + this.pendingBuffer.copyWithin(0, frameSamples, frameSamples + this.pendingFrames * channels); + } + + const audioData = frameData.buffer; + const result = await this.sendCommand({ + type: 'encode', + data: { + ctx: this.ctx, + audioData, + timestamp: this.nextSampleTimestampInSamples, + }, + }, [audioData]); + + this.nextSampleTimestampInSamples += frameSize; + + this.emitPackets(result.packets); + } + + private emitPackets(packets: Array<{ encodedData: ArrayBuffer; pts: number; duration: number }>) { + assert(this.nextPacketTimestampInSamples !== null); + + for (const p of packets) { + let data = new Uint8Array(p.encodedData); + + if (this.useAdts) { + assert(this.adtsHeaderTemplate !== null); + const { header, bitstream } = this.adtsHeaderTemplate; + const frameLength = header.byteLength + data.byteLength; + writeAdtsFrameLength(bitstream, frameLength); + + const adtsFrame = new Uint8Array(frameLength); + adtsFrame.set(header, 0); + adtsFrame.set(data, header.byteLength); + data = adtsFrame; + } + + const packet = new EncodedPacket( + data, + 'key', + this.nextPacketTimestampInSamples / this.sampleRate, + p.duration / this.sampleRate, + ); + + this.nextPacketTimestampInSamples += p.duration; + + this.onPacket( + packet, + this.chunkMetadata, + ); + + this.chunkMetadata = {}; + } + } + + private sendCommand( + command: WorkerCommand & { type: T }, + transferables?: Transferable[], + ) { + return new Promise((resolve, reject) => { + const id = this.nextMessageId++; + this.pendingMessages.set(id, { + resolve: resolve as (value: WorkerResponseData) => void, + reject, + }); + + assert(this.worker); + + if (transferables) { + this.worker.postMessage({ id, command }, transferables); + } else { + this.worker.postMessage({ id, command }); + } + }); + } +} + +/** + * Registers the AAC encoder, which Mediabunny will then use automatically when applicable. Make sure to call this + * function before starting any encoding task. + * + * Preferably, wrap the call in a condition to avoid overriding any native AAC encoder: + * + * ```ts + * import { canEncodeAudio } from 'mediabunny'; + * import { registerAacEncoder } from '@mediabunny/aac-encoder'; + * + * if (!(await canEncodeAudio('aac'))) { + * registerAacEncoder(); + * } + * ``` + * + * @group \@mediabunny/aac-encoder + * @public + */ +export const registerAacEncoder = () => { + registerEncoder(AacEncoder); +}; + +function assert(x: unknown): asserts x { + if (!x) { + throw new Error('Assertion failed.'); + } +} diff --git a/packages/aac-encoder/src/index.ts b/packages/aac-encoder/src/index.ts new file mode 100644 index 0000000..d0bed47 --- /dev/null +++ b/packages/aac-encoder/src/index.ts @@ -0,0 +1,20 @@ +/*! + * Copyright (c) 2026-present, Vanilagy and contributors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +const AAC_ENCODER_LOADED_SYMBOL = Symbol.for('@mediabunny/aac-encoder loaded'); +if ((globalThis as Record)[AAC_ENCODER_LOADED_SYMBOL]) { + console.error( + '[WARNING]\n@mediabunny/aac-encoder was loaded twice.' + + ' This will likely cause the encoder not to work correctly.' + + ' Check if multiple dependencies are importing different versions of @mediabunny/aac-encoder,' + + ' or if something is being bundled incorrectly.', + ); +} +(globalThis as Record)[AAC_ENCODER_LOADED_SYMBOL] = true; + +export { registerAacEncoder } from './encoder'; diff --git a/packages/aac-encoder/src/shared.ts b/packages/aac-encoder/src/shared.ts new file mode 100644 index 0000000..ce5513d --- /dev/null +++ b/packages/aac-encoder/src/shared.ts @@ -0,0 +1,66 @@ +/*! + * Copyright (c) 2026-present, Vanilagy and contributors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +export type WorkerCommand = { + type: 'init'; + data: { + numberOfChannels: number; + sampleRate: number; + bitrate: number; + }; +} | { + type: 'encode'; + data: { + ctx: number; + audioData: ArrayBuffer; + timestamp: number; + }; +} | { + type: 'flush'; + data: { + ctx: number; + }; +} | { + type: 'close'; + data: { + ctx: number; + }; +}; + +export type WorkerResponseData = { + type: 'init'; + ctx: number; + frameSize: number; + extradata: ArrayBuffer; +} | { + type: 'encode'; + packets: Array<{ + encodedData: ArrayBuffer; + pts: number; + duration: number; + }>; +} | { + type: 'flush'; + packets: Array<{ + encodedData: ArrayBuffer; + pts: number; + duration: number; + }>; +} | { + type: 'close'; +}; + +export type WorkerResponse = { + id: number; +} & ({ + success: true; + data: WorkerResponseData; +} | { + success: false; + error: unknown; +}); diff --git a/packages/aac-encoder/tsconfig.json b/packages/aac-encoder/tsconfig.json new file mode 100644 index 0000000..27a7ef1 --- /dev/null +++ b/packages/aac-encoder/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist/modules", + "declaration": true, + "declarationMap": true, + "stripInternal": true, + "noEmit": false, + "moduleResolution": "nodenext", + "module": "nodenext", + "allowJs": true, + "paths": { + "mediabunny": ["../../src/index.ts"], + }, + }, + "include": [ + "./src/**/*", + "./build/**/*", + ], + "references": [ + { "path": "../../src" } + ] +} diff --git a/packages/aac-encoder/tsdoc.json b/packages/aac-encoder/tsdoc.json new file mode 100644 index 0000000..51d29d3 --- /dev/null +++ b/packages/aac-encoder/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/packages/mp3-encoder/tsconfig.json b/packages/mp3-encoder/tsconfig.json index bf2e94f..27a7ef1 100644 --- a/packages/mp3-encoder/tsconfig.json +++ b/packages/mp3-encoder/tsconfig.json @@ -17,7 +17,6 @@ "include": [ "./src/**/*", "./build/**/*", - "../../shared/**/*", ], "references": [ { "path": "../../src" } diff --git a/scripts/build.sh b/scripts/build.sh index c0595fe..e448138 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -7,6 +7,7 @@ set -e rm -rf dist rm -rf packages/mp3-encoder/dist rm -rf packages/ac3/dist +rm -rf packages/aac-encoder/dist # Ensure license headers on all source files tsx scripts/ensure-license-headers.ts @@ -15,6 +16,7 @@ tsx scripts/ensure-license-headers.ts tsc -p src tsc -p packages/mp3-encoder tsc -p packages/ac3 +tsc -p packages/aac-encoder # So that the resulting files use valid ESM imports with file extension. This only runs for the core Mediabunny as only # it ships the individual files to npm (for tree shaking, because it's large) @@ -27,11 +29,13 @@ tsx scripts/bundle.ts api-extractor run api-extractor run -c packages/mp3-encoder/api-extractor.json api-extractor run -c packages/ac3/api-extractor.json +api-extractor run -c packages/aac-encoder/api-extractor.json # Checks that all symbols are documented tsx scripts/check-docblocks.ts dist/mediabunny.d.ts tsx scripts/check-docblocks.ts packages/mp3-encoder/dist/mediabunny-mp3-encoder.d.ts tsx scripts/check-docblocks.ts packages/ac3/dist/mediabunny-ac3.d.ts +tsx scripts/check-docblocks.ts packages/aac-encoder/dist/mediabunny-aac-encoder.d.ts # Checks that API docs are generatable npm run docs:generate -- --dry @@ -39,4 +43,5 @@ npm run docs:generate -- --dry # Appends stuff to the declaration files to register the global variables these libraries expose echo 'export as namespace Mediabunny;' >> dist/mediabunny.d.ts echo 'export as namespace MediabunnyMp3Encoder;' >> packages/mp3-encoder/dist/mediabunny-mp3-encoder.d.ts -echo 'export as namespace MediabunnyAc3;' >> packages/ac3/dist/mediabunny-ac3.d.ts \ No newline at end of file +echo 'export as namespace MediabunnyAc3;' >> packages/ac3/dist/mediabunny-ac3.d.ts +echo 'export as namespace MediabunnyAacEncoder;' >> packages/aac-encoder/dist/mediabunny-aac-encoder.d.ts \ No newline at end of file diff --git a/scripts/bundle.ts b/scripts/bundle.ts index c1a23d2..b94106f 100644 --- a/scripts/bundle.ts +++ b/scripts/bundle.ts @@ -144,10 +144,42 @@ const ac3Variants = await createVariants( }, ); +const aacEncoderVariants = await createVariants( + 'packages/aac-encoder/src/index.ts', + 'MediabunnyAacEncoder', + 'packages/aac-encoder/dist/bundles/mediabunny-aac-encoder', + 'js', // The bundles are purely for the browser, not for Node (due to the peer dependecy) + { + plugins: [ + PluginExternalGlobal.externalGlobalPlugin({ + mediabunny: 'Mediabunny', + }), + inlineWorkerPlugin({ + define: { + 'import.meta.url': '""', + }, + legalComments: 'none', + }), + ], + }, + { + external: ['mediabunny'], + plugins: [ + inlineWorkerPlugin({ + define: { + 'import.meta.url': '""', + }, + legalComments: 'none', + }), + ], + }, +); + const contexts = [ ...mediabunnyVariants, ...mp3EncoderVariants, ...ac3Variants, + ...aacEncoderVariants, ]; if (process.argv[2] === '--watch') { diff --git a/scripts/check.sh b/scripts/check.sh index 41aaef3..6b1c4db 100755 --- a/scripts/check.sh +++ b/scripts/check.sh @@ -4,11 +4,15 @@ set -e rm -rf dist/modules tsc -p src --stripInternal false -tsc -p packages/mp3-encoder --noEmit +rm -rf packages/mp3-encoder/dist/modules +tsc -p packages/mp3-encoder rm -rf packages/ac3/dist/modules tsc -p packages/ac3 +rm -rf packages/aac-encoder/dist/modules +tsc -p packages/aac-encoder + tsc -p tsconfig.vitest.json --noEmit tsc -p scripts --noEmit diff --git a/shared/aac-misc.ts b/shared/aac-misc.ts new file mode 100644 index 0000000..5c0fc71 --- /dev/null +++ b/shared/aac-misc.ts @@ -0,0 +1,146 @@ +/*! + * Copyright (c) 2026-present, Vanilagy and contributors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +import { Bitstream } from './bitstream'; + +export type AacAudioSpecificConfig = { + objectType: number; + frequencyIndex: number; + sampleRate: number | null; + channelConfiguration: number; + numberOfChannels: number | null; +}; + +export const aacFrequencyTable = [ + 96000, 88200, 64000, 48000, 44100, 32000, + 24000, 22050, 16000, 12000, 11025, 8000, 7350, +]; + +export const aacChannelMap = [-1, 1, 2, 3, 4, 5, 6, 8]; + +export const parseAacAudioSpecificConfig = (bytes: Uint8Array | null): AacAudioSpecificConfig => { + if (!bytes || bytes.byteLength < 2) { + throw new TypeError('AAC description must be at least 2 bytes long.'); + } + + const bitstream = new Bitstream(bytes); + + let objectType = bitstream.readBits(5); + if (objectType === 31) { + objectType = 32 + bitstream.readBits(6); + } + + const frequencyIndex = bitstream.readBits(4); + let sampleRate: number | null = null; + if (frequencyIndex === 15) { + sampleRate = bitstream.readBits(24); + } else { + if (frequencyIndex < aacFrequencyTable.length) { + sampleRate = aacFrequencyTable[frequencyIndex]!; + } + } + + const channelConfiguration = bitstream.readBits(4); + let numberOfChannels: number | null = null; + if (channelConfiguration >= 1 && channelConfiguration <= 7) { + numberOfChannels = aacChannelMap[channelConfiguration]!; + } + + return { + objectType, + frequencyIndex, + sampleRate, + channelConfiguration, + numberOfChannels, + }; +}; + +export const buildAacAudioSpecificConfig = (config: { + objectType: number; + sampleRate: number; + numberOfChannels: number; +}) => { + let frequencyIndex = aacFrequencyTable.indexOf(config.sampleRate); + let customSampleRate: number | null = null; + + if (frequencyIndex === -1) { + frequencyIndex = 15; + customSampleRate = config.sampleRate; + } + + const channelConfiguration = aacChannelMap.indexOf(config.numberOfChannels); + if (channelConfiguration === -1) { + throw new TypeError(`Unsupported number of channels: ${config.numberOfChannels}`); + } + + let bitCount = 5 + 4 + 4; + if (config.objectType >= 32) { + bitCount += 6; + } + if (frequencyIndex === 15) { + bitCount += 24; + } + + const byteCount = Math.ceil(bitCount / 8); + const bytes = new Uint8Array(byteCount); + const bitstream = new Bitstream(bytes); + + if (config.objectType < 32) { + bitstream.writeBits(5, config.objectType); + } else { + bitstream.writeBits(5, 31); + bitstream.writeBits(6, config.objectType - 32); + } + + bitstream.writeBits(4, frequencyIndex); + + if (frequencyIndex === 15) { + bitstream.writeBits(24, customSampleRate!); + } + + bitstream.writeBits(4, channelConfiguration); + + return bytes; +}; + +export type AdtsHeaderTemplate = { + header: Uint8Array; + bitstream: Bitstream; +}; + +export const buildAdtsHeaderTemplate = (config: AacAudioSpecificConfig): AdtsHeaderTemplate => { + const header = new Uint8Array(7); + const bitstream = new Bitstream(header); + + const { objectType, frequencyIndex, channelConfiguration } = config; + const profile = objectType - 1; + + bitstream.writeBits(12, 0b1111_11111111); // Syncword + bitstream.writeBits(1, 0); // MPEG Version + bitstream.writeBits(2, 0); // Layer + bitstream.writeBits(1, 1); // Protection absence + bitstream.writeBits(2, profile); // Profile + bitstream.writeBits(4, frequencyIndex); // MPEG-4 Sampling Frequency Index + bitstream.writeBits(1, 0); // Private bit + bitstream.writeBits(3, channelConfiguration); // MPEG-4 Channel Configuration + bitstream.writeBits(1, 0); // Originality + bitstream.writeBits(1, 0); // Home + bitstream.writeBits(1, 0); // Copyright ID bit + bitstream.writeBits(1, 0); // Copyright ID start + bitstream.skipBits(13); // Frame length (to be filled per packet) + bitstream.writeBits(11, 0x7ff); // Buffer fullness + bitstream.writeBits(2, 0); // Number of AAC frames minus 1 + // Omit CRC check + + return { header, bitstream }; +}; + +export const writeAdtsFrameLength = (bitstream: Bitstream, frameLength: number) => { + bitstream.pos = 30; + bitstream.writeBits(13, frameLength); +}; diff --git a/shared/bitstream.ts b/shared/bitstream.ts new file mode 100644 index 0000000..f2d2590 --- /dev/null +++ b/shared/bitstream.ts @@ -0,0 +1,85 @@ +/*! + * Copyright (c) 2026-present, Vanilagy and contributors + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +export class Bitstream { + /** Current offset in bits. */ + pos = 0; + + constructor(public bytes: Uint8Array) {} + + seekToByte(byteOffset: number) { + this.pos = 8 * byteOffset; + } + + private readBit() { + const byteIndex = Math.floor(this.pos / 8); + const byte = this.bytes[byteIndex] ?? 0; + const bitIndex = 0b111 - (this.pos & 0b111); + const bit = (byte & (1 << bitIndex)) >> bitIndex; + + this.pos++; + return bit; + } + + readBits(n: number) { + if (n === 1) { + return this.readBit(); + } + + let result = 0; + + for (let i = 0; i < n; i++) { + result <<= 1; + result |= this.readBit(); + } + + return result; + } + + writeBits(n: number, value: number) { + const end = this.pos + n; + + for (let i = this.pos; i < end; i++) { + const byteIndex = Math.floor(i / 8); + let byte = this.bytes[byteIndex]!; + const bitIndex = 0b111 - (i & 0b111); + + byte &= ~(1 << bitIndex); + byte |= ((value & (1 << (end - i - 1))) >> (end - i - 1)) << bitIndex; + this.bytes[byteIndex] = byte; + } + + this.pos = end; + }; + + readAlignedByte() { + if (this.pos % 8 !== 0) { + throw new Error('Bitstream is not byte-aligned.'); + } + + const byteIndex = this.pos / 8; + const byte = this.bytes[byteIndex] ?? 0; + + this.pos += 8; + return byte; + } + + skipBits(n: number) { + this.pos += n; + } + + getBitsLeft() { + return this.bytes.length * 8 - this.pos; + } + + clone() { + const clone = new Bitstream(this.bytes); + clone.pos = this.pos; + return clone; + } +} diff --git a/src/adts/adts-demuxer.ts b/src/adts/adts-demuxer.ts index 18af576..0539e86 100644 --- a/src/adts/adts-demuxer.ts +++ b/src/adts/adts-demuxer.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { aacChannelMap, aacFrequencyTable, AudioCodec } from '../codec'; +import { aacChannelMap, aacFrequencyTable } from '../../shared/aac-misc'; +import { AudioCodec } from '../codec'; import { Demuxer } from '../demuxer'; import { ID3_V2_HEADER_SIZE, diff --git a/src/adts/adts-misc.ts b/src/adts/adts-misc.ts deleted file mode 100644 index c736703..0000000 --- a/src/adts/adts-misc.ts +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Copyright (c) 2026-present, Vanilagy and contributors - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. - */ - -import { AacAudioSpecificConfig } from '../codec'; -import { Bitstream } from '../misc'; - -export type AdtsHeaderTemplate = { - header: Uint8Array; - bitstream: Bitstream; -}; - -export const buildAdtsHeaderTemplate = (config: AacAudioSpecificConfig): AdtsHeaderTemplate => { - const header = new Uint8Array(7); - const bitstream = new Bitstream(header); - - const { objectType, frequencyIndex, channelConfiguration } = config; - const profile = objectType - 1; - - bitstream.writeBits(12, 0b1111_11111111); // Syncword - bitstream.writeBits(1, 0); // MPEG Version - bitstream.writeBits(2, 0); // Layer - bitstream.writeBits(1, 1); // Protection absence - bitstream.writeBits(2, profile); // Profile - bitstream.writeBits(4, frequencyIndex); // MPEG-4 Sampling Frequency Index - bitstream.writeBits(1, 0); // Private bit - bitstream.writeBits(3, channelConfiguration); // MPEG-4 Channel Configuration - bitstream.writeBits(1, 0); // Originality - bitstream.writeBits(1, 0); // Home - bitstream.writeBits(1, 0); // Copyright ID bit - bitstream.writeBits(1, 0); // Copyright ID start - bitstream.skipBits(13); // Frame length (to be filled per packet) - bitstream.writeBits(11, 0x7ff); // Buffer fullness - bitstream.writeBits(2, 0); // Number of AAC frames minus 1 - // Omit CRC check - - return { header, bitstream }; -}; - -export const writeAdtsFrameLength = (bitstream: Bitstream, frameLength: number) => { - bitstream.pos = 30; - bitstream.writeBits(13, frameLength); -}; diff --git a/src/adts/adts-muxer.ts b/src/adts/adts-muxer.ts index f004ae3..bc0c55b 100644 --- a/src/adts/adts-muxer.ts +++ b/src/adts/adts-muxer.ts @@ -6,16 +6,17 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { parseAacAudioSpecificConfig, validateAudioChunkMetadata } from '../codec'; +import { buildAdtsHeaderTemplate, parseAacAudioSpecificConfig, writeAdtsFrameLength } from '../../shared/aac-misc'; +import { Bitstream } from '../../shared/bitstream'; +import { validateAudioChunkMetadata } from '../codec'; import { Id3V2Writer } from '../id3'; import { metadataTagsAreEmpty } from '../metadata'; -import { assert, Bitstream, toUint8Array } from '../misc'; +import { assert, toUint8Array } from '../misc'; import { Muxer } from '../muxer'; import { Output, OutputAudioTrack } from '../output'; import { AdtsOutputFormat } from '../output-format'; import { EncodedPacket } from '../packet'; import { Writer } from '../writer'; -import { buildAdtsHeaderTemplate, writeAdtsFrameLength } from './adts-misc'; export class AdtsMuxer extends Muxer { private format: AdtsOutputFormat; diff --git a/src/adts/adts-reader.ts b/src/adts/adts-reader.ts index c6803e9..672e727 100644 --- a/src/adts/adts-reader.ts +++ b/src/adts/adts-reader.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Bitstream } from '../misc'; +import { Bitstream } from '../../shared/bitstream'; import { FileSlice, readBytes } from '../reader'; export const MIN_ADTS_FRAME_HEADER_SIZE = 7; diff --git a/src/codec-data.ts b/src/codec-data.ts index 0cb5135..235c080 100644 --- a/src/codec-data.ts +++ b/src/codec-data.ts @@ -11,7 +11,6 @@ import { assert, assertNever, base64ToBytes, - Bitstream, bytesToBase64, keyValueIterator, getUint24, @@ -30,6 +29,7 @@ import { import { PacketType } from './packet'; import { MetadataTags } from './metadata'; import { AC3_SAMPLE_RATES, EAC3_REDUCED_SAMPLE_RATES } from '../shared/ac3-misc'; +import { Bitstream } from '../shared/bitstream'; // References for AVC/HEVC code: // ISO 14496-15 diff --git a/src/codec.ts b/src/codec.ts index b7086f6..4c7d1ff 100644 --- a/src/codec.ts +++ b/src/codec.ts @@ -6,6 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +import { parseAacAudioSpecificConfig } from '../shared/aac-misc'; import { Av1CodecInfo, AvcDecoderConfigurationRecord, @@ -13,7 +14,6 @@ import { Vp9CodecInfo, } from './codec-data'; import { - Bitstream, COLOR_PRIMARIES_MAP, MATRIX_COEFFICIENTS_MAP, TRANSFER_CHARACTERISTICS_MAP, @@ -590,106 +590,6 @@ export const extractAudioCodecString = (trackInfo: { throw new TypeError(`Unhandled codec '${codec}'.`); }; -export type AacAudioSpecificConfig = { - objectType: number; - frequencyIndex: number; - sampleRate: number | null; - channelConfiguration: number; - numberOfChannels: number | null; -}; - -export const aacFrequencyTable = [ - 96000, 88200, 64000, 48000, 44100, 32000, - 24000, 22050, 16000, 12000, 11025, 8000, 7350, -]; - -export const aacChannelMap = [-1, 1, 2, 3, 4, 5, 6, 8]; - -export const parseAacAudioSpecificConfig = (bytes: Uint8Array | null): AacAudioSpecificConfig => { - if (!bytes || bytes.byteLength < 2) { - throw new TypeError('AAC description must be at least 2 bytes long.'); - } - - const bitstream = new Bitstream(bytes); - - let objectType = bitstream.readBits(5); - if (objectType === 31) { - objectType = 32 + bitstream.readBits(6); - } - - const frequencyIndex = bitstream.readBits(4); - let sampleRate: number | null = null; - if (frequencyIndex === 15) { - sampleRate = bitstream.readBits(24); - } else { - if (frequencyIndex < aacFrequencyTable.length) { - sampleRate = aacFrequencyTable[frequencyIndex]!; - } - } - - const channelConfiguration = bitstream.readBits(4); - let numberOfChannels: number | null = null; - if (channelConfiguration >= 1 && channelConfiguration <= 7) { - numberOfChannels = aacChannelMap[channelConfiguration]!; - } - - return { - objectType, - frequencyIndex, - sampleRate, - channelConfiguration, - numberOfChannels, - }; -}; - -export const buildAacAudioSpecificConfig = (config: { - objectType: number; - sampleRate: number; - numberOfChannels: number; -}) => { - let frequencyIndex = aacFrequencyTable.indexOf(config.sampleRate); - let customSampleRate: number | null = null; - - if (frequencyIndex === -1) { - frequencyIndex = 15; - customSampleRate = config.sampleRate; - } - - const channelConfiguration = aacChannelMap.indexOf(config.numberOfChannels); - if (channelConfiguration === -1) { - throw new TypeError(`Unsupported number of channels: ${config.numberOfChannels}`); - } - - let bitCount = 5 + 4 + 4; - if (config.objectType >= 32) { - bitCount += 6; - } - if (frequencyIndex === 15) { - bitCount += 24; - } - - const byteCount = Math.ceil(bitCount / 8); - const bytes = new Uint8Array(byteCount); - const bitstream = new Bitstream(bytes); - - if (config.objectType < 32) { - bitstream.writeBits(5, config.objectType); - } else { - bitstream.writeBits(5, 31); - bitstream.writeBits(6, config.objectType - 32); - } - - bitstream.writeBits(4, frequencyIndex); - - if (frequencyIndex === 15) { - bitstream.writeBits(24, customSampleRate!); - } - - bitstream.writeBits(4, channelConfiguration); - - return bytes; -}; - export const OPUS_SAMPLE_RATE = 48_000; const PCM_CODEC_REGEX = /^pcm-([usf])(\d+)+(be)?$/; diff --git a/src/conversion.ts b/src/conversion.ts index 14bc516..cda03c8 100644 --- a/src/conversion.ts +++ b/src/conversion.ts @@ -774,6 +774,12 @@ export class Conversion { ); } + if (codecs.includes('aac')) { + elements.push( + '\nThe @mediabunny/aac-encoder extension package provides support for encoding AAC.', + ); + } + if (codecs.includes('ac3') || codecs.includes('eac3')) { elements.push( '\nThe @mediabunny/ac3 extension package provides support' diff --git a/src/flac/flac-demuxer.ts b/src/flac/flac-demuxer.ts index 4547c4b..adffadf 100644 --- a/src/flac/flac-demuxer.ts +++ b/src/flac/flac-demuxer.ts @@ -15,7 +15,6 @@ import { assert, AsyncMutex, binarySearchLessOrEqual, - Bitstream, textDecoder, UNDETERMINED_LANGUAGE, } from '../misc'; @@ -37,6 +36,7 @@ import { readSampleRate, getSampleRateOrUncommon, } from './flac-misc'; +import { Bitstream } from '../../shared/bitstream'; type FlacAudioInfo = { numberOfChannels: number; diff --git a/src/flac/flac-misc.ts b/src/flac/flac-misc.ts index 1cc78b2..f440d3d 100644 --- a/src/flac/flac-misc.ts +++ b/src/flac/flac-misc.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { assert, assertNever, Bitstream } from '../misc'; +import { Bitstream } from '../../shared/bitstream'; +import { assert, assertNever } from '../misc'; import { FileSlice, readBytes, readU16Be, readU8 } from '../reader'; type BlockSizeOrUncommon = number | 'uncommon-u16' | 'uncommon-u8'; diff --git a/src/flac/flac-muxer.ts b/src/flac/flac-muxer.ts index 01bbd7c..dad7a61 100644 --- a/src/flac/flac-muxer.ts +++ b/src/flac/flac-muxer.ts @@ -10,7 +10,6 @@ import { validateAudioChunkMetadata } from '../codec'; import { createVorbisComments, FlacBlockType } from '../codec-data'; import { assert, - Bitstream, textEncoder, toDataView, toUint8Array, @@ -27,6 +26,7 @@ import { getBlockSizeOrUncommon, readCodedNumber, } from './flac-misc'; +import { Bitstream } from '../../shared/bitstream'; const FLAC_HEADER = /* #__PURE__ */ new Uint8Array([0x66, 0x4c, 0x61, 0x43]); // 'fLaC' const STREAMINFO_SIZE = 38; diff --git a/src/isobmff/isobmff-boxes.ts b/src/isobmff/isobmff-boxes.ts index 040f00b..7115b1c 100644 --- a/src/isobmff/isobmff-boxes.ts +++ b/src/isobmff/isobmff-boxes.ts @@ -20,7 +20,6 @@ import { UNDETERMINED_LANGUAGE, assertNever, keyValueIterator, - Bitstream, } from '../misc'; import { AudioCodec, @@ -46,6 +45,7 @@ import { } from './isobmff-muxer'; import { parseAc3SyncFrame, parseEac3SyncFrame, parseOpusIdentificationHeader } from '../codec-data'; import { MetadataTags, RichImageData } from '../metadata'; +import { Bitstream } from '../../shared/bitstream'; export class IsobmffBoxWriter { private helper = new Uint8Array(8); diff --git a/src/isobmff/isobmff-demuxer.ts b/src/isobmff/isobmff-demuxer.ts index df68ff9..e247193 100644 --- a/src/isobmff/isobmff-demuxer.ts +++ b/src/isobmff/isobmff-demuxer.ts @@ -6,6 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +import { parseAacAudioSpecificConfig } from '../../shared/aac-misc'; import { AacCodecInfo, AudioCodec, @@ -13,7 +14,6 @@ import { extractVideoCodecString, MediaCodec, OPUS_SAMPLE_RATE, - parseAacAudioSpecificConfig, parsePcmCodec, PCM_AUDIO_CODECS, PcmAudioCodec, @@ -47,7 +47,6 @@ import { assert, binarySearchExact, binarySearchLessOrEqual, - Bitstream, COLOR_PRIMARIES_MAP_INVERSE, findLastIndex, isIso639Dash2LanguageCode, @@ -92,6 +91,7 @@ import { } from '../reader'; import { DEFAULT_TRACK_DISPOSITION, MetadataTags, RichImageData, TrackDisposition } from '../metadata'; import { AC3_SAMPLE_RATES } from '../../shared/ac3-misc'; +import { Bitstream } from '../../shared/bitstream'; type InternalTrack = { id: number; diff --git a/src/isobmff/isobmff-muxer.ts b/src/isobmff/isobmff-muxer.ts index 7c56b7c..4256f53 100644 --- a/src/isobmff/isobmff-muxer.ts +++ b/src/isobmff/isobmff-muxer.ts @@ -13,10 +13,8 @@ import { BufferTargetWriter, Writer } from '../writer'; import { assert, computeRationalApproximation, last, promiseWithResolvers, Rational, simplifyRational } from '../misc'; import { IsobmffOutputFormatOptions, IsobmffOutputFormat, MovOutputFormat } from '../output-format'; import { inlineTimestampRegex, SubtitleConfig, SubtitleCue, SubtitleMetadata } from '../subtitles'; +import { aacChannelMap, aacFrequencyTable, buildAacAudioSpecificConfig } from '../../shared/aac-misc'; import { - aacChannelMap, - aacFrequencyTable, - buildAacAudioSpecificConfig, parsePcmCodec, PCM_AUDIO_CODECS, PcmAudioCodec, diff --git a/src/matroska/matroska-muxer.ts b/src/matroska/matroska-muxer.ts index 6554f20..fb1e6b1 100644 --- a/src/matroska/matroska-muxer.ts +++ b/src/matroska/matroska-muxer.ts @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +import { Bitstream } from '../../shared/bitstream'; import { - Bitstream, COLOR_PRIMARIES_MAP, MATRIX_COEFFICIENTS_MAP, TRANSFER_CHARACTERISTICS_MAP, @@ -49,10 +49,8 @@ import { inlineTimestampRegex, parseSubtitleTimestamp, } from '../subtitles'; +import { aacChannelMap, aacFrequencyTable, buildAacAudioSpecificConfig } from '../../shared/aac-misc'; import { - aacChannelMap, - aacFrequencyTable, - buildAacAudioSpecificConfig, OPUS_SAMPLE_RATE, PCM_AUDIO_CODECS, PcmAudioCodec, diff --git a/src/media-source.ts b/src/media-source.ts index faf6243..3580a14 100644 --- a/src/media-source.ts +++ b/src/media-source.ts @@ -6,11 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +import { buildAacAudioSpecificConfig, parseAacAudioSpecificConfig } from '../shared/aac-misc'; import { AUDIO_CODECS, AudioCodec, - buildAacAudioSpecificConfig, - parseAacAudioSpecificConfig, parsePcmCodec, PCM_AUDIO_CODECS, PcmAudioCodec, diff --git a/src/misc.ts b/src/misc.ts index 72b33df..b963ae7 100644 --- a/src/misc.ts +++ b/src/misc.ts @@ -6,6 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +import { Bitstream } from '../shared/bitstream'; + export function assert(x: unknown): asserts x { if (!x) { throw new Error('Assertion failed.'); @@ -39,85 +41,6 @@ export const isU32 = (value: number) => { return value >= 0 && value < 2 ** 32; }; -export class Bitstream { - /** Current offset in bits. */ - pos = 0; - - constructor(public bytes: Uint8Array) {} - - seekToByte(byteOffset: number) { - this.pos = 8 * byteOffset; - } - - private readBit() { - const byteIndex = Math.floor(this.pos / 8); - const byte = this.bytes[byteIndex] ?? 0; - const bitIndex = 0b111 - (this.pos & 0b111); - const bit = (byte & (1 << bitIndex)) >> bitIndex; - - this.pos++; - return bit; - } - - readBits(n: number) { - if (n === 1) { - return this.readBit(); - } - - let result = 0; - - for (let i = 0; i < n; i++) { - result <<= 1; - result |= this.readBit(); - } - - return result; - } - - writeBits(n: number, value: number) { - const end = this.pos + n; - - for (let i = this.pos; i < end; i++) { - const byteIndex = Math.floor(i / 8); - let byte = this.bytes[byteIndex]!; - const bitIndex = 0b111 - (i & 0b111); - - byte &= ~(1 << bitIndex); - byte |= ((value & (1 << (end - i - 1))) >> (end - i - 1)) << bitIndex; - this.bytes[byteIndex] = byte; - } - - this.pos = end; - }; - - readAlignedByte() { - // Ensure we're byte-aligned - if (this.pos % 8 !== 0) { - throw new Error('Bitstream is not byte-aligned.'); - } - - const byteIndex = this.pos / 8; - const byte = this.bytes[byteIndex] ?? 0; - - this.pos += 8; - return byte; - } - - skipBits(n: number) { - this.pos += n; - } - - getBitsLeft() { - return this.bytes.length * 8 - this.pos; - } - - clone() { - const clone = new Bitstream(this.bytes); - clone.pos = this.pos; - return clone; - } -} - /** Reads an exponential-Golomb universal code from a Bitstream. */ export const readExpGolomb = (bitstream: Bitstream) => { let leadingZeroBits = 0; diff --git a/src/mpeg-ts/mpeg-ts-demuxer.ts b/src/mpeg-ts/mpeg-ts-demuxer.ts index 562ee45..253e8de 100644 --- a/src/mpeg-ts/mpeg-ts-demuxer.ts +++ b/src/mpeg-ts/mpeg-ts-demuxer.ts @@ -8,10 +8,9 @@ import { SAMPLES_PER_AAC_FRAME } from '../adts/adts-demuxer'; import { MAX_ADTS_FRAME_HEADER_SIZE, readAdtsFrameHeader } from '../adts/adts-reader'; +import { aacChannelMap, aacFrequencyTable } from '../../shared/aac-misc'; import { - aacChannelMap, AacCodecInfo, - aacFrequencyTable, AudioCodec, extractAudioCodecString, extractVideoCodecString, @@ -54,7 +53,6 @@ import { assert, binarySearchExact, binarySearchLessOrEqual, - Bitstream, COLOR_PRIMARIES_MAP_INVERSE, findLastIndex, floorToMultiple, @@ -71,6 +69,7 @@ import { EncodedPacket, PacketType, PLACEHOLDER_DATA } from '../packet'; import { FileSlice, readBytes, Reader, readU16Be, readU32Be, readU8 } from '../reader'; import { buildMpegTsMimeType, MpegTsStreamType, TIMESCALE, TS_PACKET_SIZE } from './mpeg-ts-misc'; import { AC3_SAMPLE_RATES } from '../../shared/ac3-misc'; +import { Bitstream } from '../../shared/bitstream'; // Resources: // ISO/IEC 13818-1 diff --git a/src/mpeg-ts/mpeg-ts-muxer.ts b/src/mpeg-ts/mpeg-ts-muxer.ts index e4977cc..102843a 100644 --- a/src/mpeg-ts/mpeg-ts-muxer.ts +++ b/src/mpeg-ts/mpeg-ts-muxer.ts @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { parseAacAudioSpecificConfig, validateAudioChunkMetadata, validateVideoChunkMetadata } from '../codec'; -import { buildAdtsHeaderTemplate, writeAdtsFrameLength } from '../adts/adts-misc'; +import { buildAdtsHeaderTemplate, parseAacAudioSpecificConfig, writeAdtsFrameLength } from '../../shared/aac-misc'; +import { validateAudioChunkMetadata, validateVideoChunkMetadata } from '../codec'; import { AC3_REGISTRATION_DESCRIPTOR, AvcDecoderConfigurationRecord, @@ -23,7 +23,8 @@ import { iterateNalUnitsInAnnexB, iterateNalUnitsInLengthPrefixed, } from '../codec-data'; -import { assert, Bitstream, promiseWithResolvers, setUint24, toDataView, toUint8Array } from '../misc'; +import { Bitstream } from '../../shared/bitstream'; +import { assert, promiseWithResolvers, setUint24, toDataView, toUint8Array } from '../misc'; import { Muxer } from '../muxer'; import { Output, OutputAudioTrack, OutputTrack, OutputVideoTrack } from '../output'; import { MpegTsOutputFormat } from '../output-format'; diff --git a/test/node/aac-encoder-extension.test.ts b/test/node/aac-encoder-extension.test.ts new file mode 100644 index 0000000..9a1bb0c --- /dev/null +++ b/test/node/aac-encoder-extension.test.ts @@ -0,0 +1,82 @@ +import { expect, test } from 'vitest'; +import { Input } from '../../src/input.js'; +import { BufferSource } from '../../src/source.js'; +import { ALL_FORMATS } from '../../src/input-format.js'; +import { Output } from '../../src/output.js'; +import { BufferTarget } from '../../src/target.js'; +import { canEncode } from '../../src/encode.js'; +import { AudioSampleSource } from '../../src/media-source.js'; +import { EncodedPacketSink } from '../../src/media-sink.js'; +import { Mp4OutputFormat } from '../../src/output-format.js'; +import { AudioSample } from '../../src/sample.js'; +import { registerAacEncoder } from '@mediabunny/aac-encoder'; + +const createSineWave = (sampleRate: number, channels: number, durationSeconds: number) => { + const totalFrames = sampleRate * durationSeconds; + const data = new Float32Array(totalFrames * channels); + + for (let i = 0; i < totalFrames; i++) { + const value = Math.sin(2 * Math.PI * 440 * i / sampleRate); + for (let ch = 0; ch < channels; ch++) { + data[i * channels + ch] = value; + } + } + + return data; +}; + +test('Custom coder registration', async () => { + expect(await canEncode('aac')).toBe(false); + + registerAacEncoder(); + + expect(await canEncode('aac')).toBe(true); +}); + +test('AAC encoding', async () => { + registerAacEncoder(); + + const sampleRate = 48000; + const channels = 2; + const durationSeconds = 2; + const data = createSineWave(sampleRate, channels, durationSeconds); + + const output = new Output({ + format: new Mp4OutputFormat(), + target: new BufferTarget(), + }); + + const audioSource = new AudioSampleSource({ codec: 'aac', bitrate: 128000 }); + output.addAudioTrack(audioSource); + + await output.start(); + await audioSource.add(new AudioSample({ + data, + format: 'f32', + numberOfChannels: channels, + sampleRate, + timestamp: 0, + })); + audioSource.close(); + await output.finalize(); + + using input = new Input({ + source: new BufferSource(output.target.buffer!), + formats: ALL_FORMATS, + }); + + const track = (await input.getPrimaryAudioTrack())!; + expect(track.codec).toBe('aac'); + expect(track.sampleRate).toBe(sampleRate); + expect(track.numberOfChannels).toBe(channels); + + const sink = new EncodedPacketSink(track); + let packetCount = 0; + for await (const packet of sink.packets()) { + expect(packet.type).toBe('key'); + packetCount++; + } + expect(packetCount).toBeGreaterThan(durationSeconds * sampleRate / 1024); + + expect(await track.computeDuration()).toBeCloseTo(2, 1); +}); diff --git a/tsconfig.vite.json b/tsconfig.vite.json index 18c8e14..07743b0 100644 --- a/tsconfig.vite.json +++ b/tsconfig.vite.json @@ -8,6 +8,7 @@ "paths": { "mediabunny": ["./src/index.ts"], "@mediabunny/ac3": ["./packages/ac3/src/index.ts"], + "@mediabunny/aac-encoder": ["./packages/aac-encoder/src/index.ts"], }, "types": ["vite/client"] }, diff --git a/tsconfig.vitest.json b/tsconfig.vitest.json index 7101888..e4ac060 100644 --- a/tsconfig.vitest.json +++ b/tsconfig.vitest.json @@ -8,9 +8,10 @@ "paths": { "mediabunny": ["./src/index.ts"], "@mediabunny/ac3": ["./packages/ac3/src/index.ts"], + "@mediabunny/aac-encoder": ["./packages/aac-encoder/src/index.ts"], }, }, "include": ["vitest.config.ts", "./test/**/*"], "exclude": ["./test/public/**/*"], - "references": [{ "path": "./src" }, { "path": "./packages/ac3" }] + "references": [{ "path": "./src" }, { "path": "./packages/ac3" }, { "path": "./packages/aac-encoder" }] } diff --git a/vite.config.ts b/vite.config.ts index 6b460b0..c376f06 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -20,7 +20,9 @@ const rollupInput = Object.fromEntries( export default defineConfig({ resolve: { alias: { - mediabunny: path.resolve(__dirname, './dist/bundles/mediabunny.mjs'), + 'mediabunny': path.resolve(__dirname, './dist/bundles/mediabunny.mjs'), + '@mediabunny/aac-encoder': + path.resolve(__dirname, './packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.mjs'), }, }, plugins: [ diff --git a/vitest.config.ts b/vitest.config.ts index 3623ed8..d73adc9 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -8,6 +8,8 @@ export default defineConfig({ alias: { 'mediabunny': path.resolve(__dirname, './src/index.ts'), '@mediabunny/ac3': path.resolve(__dirname, './packages/ac3/dist/bundles/mediabunny-ac3.mjs'), + '@mediabunny/aac-encoder': + path.resolve(__dirname, './packages/aac-encoder/dist/bundles/mediabunny-aac-encoder.mjs'), }, }, test: {

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