webcodecs-node 0.7.5 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -4
- package/dist/backends/node-av/HardwarePipeline.d.ts +36 -0
- package/dist/backends/node-av/HardwarePipeline.d.ts.map +1 -0
- package/dist/backends/node-av/HardwarePipeline.js +203 -0
- package/dist/backends/node-av/HardwarePipeline.js.map +1 -0
- package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts +46 -0
- package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts.map +1 -0
- package/dist/backends/node-av/audio/NodeAvAudioDecoder.js +277 -0
- package/dist/backends/node-av/audio/NodeAvAudioDecoder.js.map +1 -0
- package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts +47 -0
- package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts.map +1 -0
- package/dist/backends/node-av/audio/NodeAvAudioEncoder.js +363 -0
- package/dist/backends/node-av/audio/NodeAvAudioEncoder.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/channel-layout.d.ts +12 -0
- package/dist/backends/node-av/audio/decoder/channel-layout.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/channel-layout.js +24 -0
- package/dist/backends/node-av/audio/decoder/channel-layout.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts +9 -0
- package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/codec-mapping.js +40 -0
- package/dist/backends/node-av/audio/decoder/codec-mapping.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/constants.d.ts +6 -0
- package/dist/backends/node-av/audio/decoder/constants.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/constants.js +6 -0
- package/dist/backends/node-av/audio/decoder/constants.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/index.d.ts +8 -0
- package/dist/backends/node-av/audio/decoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/index.js +8 -0
- package/dist/backends/node-av/audio/decoder/index.js.map +1 -0
- package/dist/backends/node-av/audio/decoder/sample-format.d.ts +14 -0
- package/dist/backends/node-av/audio/decoder/sample-format.d.ts.map +1 -0
- package/dist/backends/node-av/audio/decoder/sample-format.js +54 -0
- package/dist/backends/node-av/audio/decoder/sample-format.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/channel-layout.d.ts +12 -0
- package/dist/backends/node-av/audio/encoder/channel-layout.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/channel-layout.js +24 -0
- package/dist/backends/node-av/audio/encoder/channel-layout.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/codec-description.d.ts +33 -0
- package/dist/backends/node-av/audio/encoder/codec-description.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/codec-description.js +137 -0
- package/dist/backends/node-av/audio/encoder/codec-description.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts +12 -0
- package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/codec-mapping.js +61 -0
- package/dist/backends/node-av/audio/encoder/codec-mapping.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/constants.d.ts +6 -0
- package/dist/backends/node-av/audio/encoder/constants.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/constants.js +6 -0
- package/dist/backends/node-av/audio/encoder/constants.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/drain.d.ts +32 -0
- package/dist/backends/node-av/audio/encoder/drain.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/drain.js +51 -0
- package/dist/backends/node-av/audio/encoder/drain.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/index.d.ts +20 -0
- package/dist/backends/node-av/audio/encoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/index.js +20 -0
- package/dist/backends/node-av/audio/encoder/index.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/options.d.ts +40 -0
- package/dist/backends/node-av/audio/encoder/options.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/options.js +127 -0
- package/dist/backends/node-av/audio/encoder/options.js.map +1 -0
- package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts +40 -0
- package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts.map +1 -0
- package/dist/backends/node-av/audio/encoder/sample-format-convert.js +152 -0
- package/dist/backends/node-av/audio/encoder/sample-format-convert.js.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts +10 -0
- package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/capabilities.js +45 -0
- package/dist/backends/node-av/hardware-pipeline/capabilities.js.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/index.d.ts +6 -0
- package/dist/backends/node-av/hardware-pipeline/index.d.ts.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/index.js +5 -0
- package/dist/backends/node-av/hardware-pipeline/index.js.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/types.d.ts +13 -0
- package/dist/backends/node-av/hardware-pipeline/types.d.ts.map +1 -0
- package/dist/backends/node-av/hardware-pipeline/types.js +5 -0
- package/dist/backends/node-av/hardware-pipeline/types.js.map +1 -0
- package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts +95 -0
- package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts.map +1 -0
- package/dist/backends/node-av/image/NodeAvImageDecoder.js +383 -0
- package/dist/backends/node-av/image/NodeAvImageDecoder.js.map +1 -0
- package/dist/backends/node-av/image/WebPImageDecoder.d.ts +57 -0
- package/dist/backends/node-av/image/WebPImageDecoder.d.ts.map +1 -0
- package/dist/backends/node-av/image/WebPImageDecoder.js +178 -0
- package/dist/backends/node-av/image/WebPImageDecoder.js.map +1 -0
- package/dist/backends/node-av/image/decoder/constants.d.ts +14 -0
- package/dist/backends/node-av/image/decoder/constants.d.ts.map +1 -0
- package/dist/backends/node-av/image/decoder/constants.js +24 -0
- package/dist/backends/node-av/image/decoder/constants.js.map +1 -0
- package/dist/backends/node-av/image/decoder/index.d.ts +7 -0
- package/dist/backends/node-av/image/decoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/image/decoder/index.js +6 -0
- package/dist/backends/node-av/image/decoder/index.js.map +1 -0
- package/dist/backends/node-av/image/decoder/probe.d.ts +12 -0
- package/dist/backends/node-av/image/decoder/probe.d.ts.map +1 -0
- package/dist/backends/node-av/image/decoder/probe.js +57 -0
- package/dist/backends/node-av/image/decoder/probe.js.map +1 -0
- package/dist/backends/node-av/image/decoder/types.d.ts +25 -0
- package/dist/backends/node-av/image/decoder/types.d.ts.map +1 -0
- package/dist/backends/node-av/image/decoder/types.js +5 -0
- package/dist/backends/node-av/image/decoder/types.js.map +1 -0
- package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts +44 -0
- package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts.map +1 -0
- package/dist/backends/node-av/video/NodeAvVideoDecoder.js +326 -0
- package/dist/backends/node-av/video/NodeAvVideoDecoder.js.map +1 -0
- package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts +49 -0
- package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts.map +1 -0
- package/dist/backends/node-av/video/NodeAvVideoEncoder.js +317 -0
- package/dist/backends/node-av/video/NodeAvVideoEncoder.js.map +1 -0
- package/dist/backends/node-av/video/decoder/codec-mapping.d.ts +9 -0
- package/dist/backends/node-av/video/decoder/codec-mapping.d.ts.map +1 -0
- package/dist/backends/node-av/video/decoder/codec-mapping.js +25 -0
- package/dist/backends/node-av/video/decoder/codec-mapping.js.map +1 -0
- package/dist/backends/node-av/video/decoder/constants.d.ts +13 -0
- package/dist/backends/node-av/video/decoder/constants.d.ts.map +1 -0
- package/dist/backends/node-av/video/decoder/constants.js +13 -0
- package/dist/backends/node-av/video/decoder/constants.js.map +1 -0
- package/dist/backends/node-av/video/decoder/index.d.ts +7 -0
- package/dist/backends/node-av/video/decoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/video/decoder/index.js +7 -0
- package/dist/backends/node-av/video/decoder/index.js.map +1 -0
- package/dist/backends/node-av/video/decoder/pixel-format.d.ts +13 -0
- package/dist/backends/node-av/video/decoder/pixel-format.d.ts.map +1 -0
- package/dist/backends/node-av/video/decoder/pixel-format.js +88 -0
- package/dist/backends/node-av/video/decoder/pixel-format.js.map +1 -0
- package/dist/backends/node-av/video/encoder/codec-description.d.ts +26 -0
- package/dist/backends/node-av/video/encoder/codec-description.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/codec-description.js +86 -0
- package/dist/backends/node-av/video/encoder/codec-description.js.map +1 -0
- package/dist/backends/node-av/video/encoder/drain.d.ts +34 -0
- package/dist/backends/node-av/video/encoder/drain.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/drain.js +51 -0
- package/dist/backends/node-av/video/encoder/drain.js.map +1 -0
- package/dist/backends/node-av/video/encoder/filters.d.ts +37 -0
- package/dist/backends/node-av/video/encoder/filters.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/filters.js +71 -0
- package/dist/backends/node-av/video/encoder/filters.js.map +1 -0
- package/dist/backends/node-av/video/encoder/gpu-filters.d.ts +9 -0
- package/dist/backends/node-av/video/encoder/gpu-filters.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/gpu-filters.js +26 -0
- package/dist/backends/node-av/video/encoder/gpu-filters.js.map +1 -0
- package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts +12 -0
- package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/hardware-constraints.js +31 -0
- package/dist/backends/node-av/video/encoder/hardware-constraints.js.map +1 -0
- package/dist/backends/node-av/video/encoder/index.d.ts +28 -0
- package/dist/backends/node-av/video/encoder/index.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/index.js +28 -0
- package/dist/backends/node-av/video/encoder/index.js.map +1 -0
- package/dist/backends/node-av/video/encoder/options.d.ts +39 -0
- package/dist/backends/node-av/video/encoder/options.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/options.js +195 -0
- package/dist/backends/node-av/video/encoder/options.js.map +1 -0
- package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts +42 -0
- package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/pixel-format-config.js +122 -0
- package/dist/backends/node-av/video/encoder/pixel-format-config.js.map +1 -0
- package/dist/backends/node-av/video/encoder/pixel-format.d.ts +13 -0
- package/dist/backends/node-av/video/encoder/pixel-format.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/pixel-format.js +68 -0
- package/dist/backends/node-av/video/encoder/pixel-format.js.map +1 -0
- package/dist/backends/node-av/video/encoder/setup.d.ts +33 -0
- package/dist/backends/node-av/video/encoder/setup.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/setup.js +62 -0
- package/dist/backends/node-av/video/encoder/setup.js.map +1 -0
- package/dist/backends/node-av/video/encoder/software-encoders.d.ts +8 -0
- package/dist/backends/node-av/video/encoder/software-encoders.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/software-encoders.js +17 -0
- package/dist/backends/node-av/video/encoder/software-encoders.js.map +1 -0
- package/dist/backends/node-av/video/encoder/timestamp.d.ts +34 -0
- package/dist/backends/node-av/video/encoder/timestamp.d.ts.map +1 -0
- package/dist/backends/node-av/video/encoder/timestamp.js +39 -0
- package/dist/backends/node-av/video/encoder/timestamp.js.map +1 -0
- package/dist/backends/types.d.ts +44 -0
- package/dist/backends/types.d.ts.map +1 -1
- package/dist/backends/types.js.map +1 -1
- package/dist/codec-utils/formats.d.ts.map +1 -1
- package/dist/codec-utils/formats.js +78 -0
- package/dist/codec-utils/formats.js.map +1 -1
- package/dist/codec-utils/types.d.ts +1 -1
- package/dist/codecs/aac.d.ts +10 -0
- package/dist/codecs/aac.d.ts.map +1 -0
- package/dist/codecs/aac.js +10 -0
- package/dist/codecs/aac.js.map +1 -0
- package/dist/codecs/avc.d.ts +11 -0
- package/dist/codecs/avc.d.ts.map +1 -0
- package/dist/codecs/avc.js +11 -0
- package/dist/codecs/avc.js.map +1 -0
- package/dist/codecs/hevc.d.ts +11 -0
- package/dist/codecs/hevc.d.ts.map +1 -0
- package/dist/codecs/hevc.js +11 -0
- package/dist/codecs/hevc.js.map +1 -0
- package/dist/codecs/index.d.ts +10 -0
- package/dist/codecs/index.d.ts.map +1 -0
- package/dist/codecs/index.js +14 -0
- package/dist/codecs/index.js.map +1 -0
- package/dist/codecs/validation/audio.d.ts +19 -0
- package/dist/codecs/validation/audio.d.ts.map +1 -0
- package/dist/codecs/validation/audio.js +111 -0
- package/dist/codecs/validation/audio.js.map +1 -0
- package/dist/codecs/validation/config.d.ts +27 -0
- package/dist/codecs/validation/config.d.ts.map +1 -0
- package/dist/codecs/validation/config.js +154 -0
- package/dist/codecs/validation/config.js.map +1 -0
- package/dist/codecs/validation/index.d.ts +9 -0
- package/dist/codecs/validation/index.d.ts.map +1 -0
- package/dist/codecs/validation/index.js +12 -0
- package/dist/codecs/validation/index.js.map +1 -0
- package/dist/codecs/validation/video.d.ts +24 -0
- package/dist/codecs/validation/video.d.ts.map +1 -0
- package/dist/codecs/validation/video.js +196 -0
- package/dist/codecs/validation/video.js.map +1 -0
- package/dist/containers/NodeAvMuxer.d.ts +7 -0
- package/dist/containers/NodeAvMuxer.d.ts.map +1 -1
- package/dist/containers/NodeAvMuxer.js +127 -7
- package/dist/containers/NodeAvMuxer.js.map +1 -1
- package/dist/core/AudioData.d.ts.map +1 -1
- package/dist/core/AudioData.js +54 -12
- package/dist/core/AudioData.js.map +1 -1
- package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
- package/dist/core/EncodedAudioChunk.js +74 -6
- package/dist/core/EncodedAudioChunk.js.map +1 -1
- package/dist/core/EncodedVideoChunk.d.ts +2 -0
- package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
- package/dist/core/EncodedVideoChunk.js +70 -2
- package/dist/core/EncodedVideoChunk.js.map +1 -1
- package/dist/core/VideoFrame.d.ts +16 -10
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +238 -129
- package/dist/core/VideoFrame.js.map +1 -1
- package/dist/core/video-frame/layout.d.ts +10 -0
- package/dist/core/video-frame/layout.d.ts.map +1 -0
- package/dist/core/video-frame/layout.js +97 -0
- package/dist/core/video-frame/layout.js.map +1 -0
- package/dist/core/video-frame/orientation.d.ts +23 -0
- package/dist/core/video-frame/orientation.d.ts.map +1 -0
- package/dist/core/video-frame/orientation.js +49 -0
- package/dist/core/video-frame/orientation.js.map +1 -0
- package/dist/core/video-frame/transfer.d.ts +19 -0
- package/dist/core/video-frame/transfer.d.ts.map +1 -0
- package/dist/core/video-frame/transfer.js +78 -0
- package/dist/core/video-frame/transfer.js.map +1 -0
- package/dist/core/video-frame/validation.d.ts +28 -0
- package/dist/core/video-frame/validation.d.ts.map +1 -0
- package/dist/core/video-frame/validation.js +76 -0
- package/dist/core/video-frame/validation.js.map +1 -0
- package/dist/decoders/AudioDecoder.d.ts +2 -19
- package/dist/decoders/AudioDecoder.d.ts.map +1 -1
- package/dist/decoders/AudioDecoder.js +27 -11
- package/dist/decoders/AudioDecoder.js.map +1 -1
- package/dist/decoders/ImageDecoder.d.ts +34 -41
- package/dist/decoders/ImageDecoder.d.ts.map +1 -1
- package/dist/decoders/ImageDecoder.js +158 -266
- package/dist/decoders/ImageDecoder.js.map +1 -1
- package/dist/decoders/VideoDecoder.d.ts +2 -38
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +120 -120
- package/dist/decoders/VideoDecoder.js.map +1 -1
- package/dist/decoders/audio/config.d.ts +23 -0
- package/dist/decoders/audio/config.d.ts.map +1 -0
- package/dist/decoders/audio/config.js +112 -0
- package/dist/decoders/audio/config.js.map +1 -0
- package/dist/decoders/audio/constants.d.ts +6 -0
- package/dist/decoders/audio/constants.d.ts.map +1 -0
- package/dist/decoders/audio/constants.js +6 -0
- package/dist/decoders/audio/constants.js.map +1 -0
- package/dist/decoders/audio/types.d.ts +21 -0
- package/dist/decoders/audio/types.d.ts.map +1 -0
- package/dist/decoders/audio/types.js +5 -0
- package/dist/decoders/audio/types.js.map +1 -0
- package/dist/decoders/image/orientation.d.ts +16 -0
- package/dist/decoders/image/orientation.d.ts.map +1 -0
- package/dist/decoders/image/orientation.js +170 -0
- package/dist/decoders/image/orientation.js.map +1 -0
- package/dist/decoders/image/stream.d.ts +12 -0
- package/dist/decoders/image/stream.d.ts.map +1 -0
- package/dist/decoders/image/stream.js +41 -0
- package/dist/decoders/image/stream.js.map +1 -0
- package/dist/decoders/image/tracks.d.ts +76 -0
- package/dist/decoders/image/tracks.d.ts.map +1 -0
- package/dist/decoders/image/tracks.js +136 -0
- package/dist/decoders/image/tracks.js.map +1 -0
- package/dist/decoders/image/types.d.ts +36 -0
- package/dist/decoders/image/types.d.ts.map +1 -0
- package/dist/decoders/image/types.js +5 -0
- package/dist/decoders/image/types.js.map +1 -0
- package/dist/decoders/video/codec-specific.d.ts +19 -0
- package/dist/decoders/video/codec-specific.d.ts.map +1 -0
- package/dist/decoders/video/codec-specific.js +62 -0
- package/dist/decoders/video/codec-specific.js.map +1 -0
- package/dist/decoders/video/config.d.ts +17 -0
- package/dist/decoders/video/config.d.ts.map +1 -0
- package/dist/decoders/video/config.js +91 -0
- package/dist/decoders/video/config.js.map +1 -0
- package/dist/decoders/video/constants.d.ts +8 -0
- package/dist/decoders/video/constants.d.ts.map +1 -0
- package/dist/decoders/video/constants.js +13 -0
- package/dist/decoders/video/constants.js.map +1 -0
- package/dist/decoders/video/queue.d.ts +9 -0
- package/dist/decoders/video/queue.d.ts.map +1 -0
- package/dist/decoders/video/queue.js +17 -0
- package/dist/decoders/video/queue.js.map +1 -0
- package/dist/decoders/video/types.d.ts +41 -0
- package/dist/decoders/video/types.d.ts.map +1 -0
- package/dist/decoders/video/types.js +5 -0
- package/dist/decoders/video/types.js.map +1 -0
- package/dist/demos/demo-audio-visualizer.js +74 -48
- package/dist/demos/demo-audio-visualizer.js.map +1 -1
- package/dist/demos/demo-dvd-logo.js +26 -23
- package/dist/demos/demo-dvd-logo.js.map +1 -1
- package/dist/demos/demo-flow-field.d.ts +11 -0
- package/dist/demos/demo-flow-field.d.ts.map +1 -0
- package/dist/demos/demo-flow-field.js +305 -0
- package/dist/demos/demo-flow-field.js.map +1 -0
- package/dist/demos/demo-four-corners.js +56 -120
- package/dist/demos/demo-four-corners.js.map +1 -1
- package/dist/demos/demo-image.js +24 -19
- package/dist/demos/demo-image.js.map +1 -1
- package/dist/demos/demo-matrix-rain.d.ts +11 -0
- package/dist/demos/demo-matrix-rain.d.ts.map +1 -0
- package/dist/demos/demo-matrix-rain.js +246 -0
- package/dist/demos/demo-matrix-rain.js.map +1 -0
- package/dist/demos/demo-pipeline.js +56 -51
- package/dist/demos/demo-pipeline.js.map +1 -1
- package/dist/demos/demo-samples.js +56 -402
- package/dist/demos/demo-samples.js.map +1 -1
- package/dist/encoders/AudioEncoder.d.ts +2 -28
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +80 -20
- package/dist/encoders/AudioEncoder.js.map +1 -1
- package/dist/encoders/VideoEncoder.d.ts +25 -46
- package/dist/encoders/VideoEncoder.d.ts.map +1 -1
- package/dist/encoders/VideoEncoder.js +180 -88
- package/dist/encoders/VideoEncoder.js.map +1 -1
- package/dist/encoders/audio/config.d.ts +30 -0
- package/dist/encoders/audio/config.d.ts.map +1 -0
- package/dist/encoders/audio/config.js +169 -0
- package/dist/encoders/audio/config.js.map +1 -0
- package/dist/encoders/audio/constants.d.ts +8 -0
- package/dist/encoders/audio/constants.d.ts.map +1 -0
- package/dist/encoders/audio/constants.js +8 -0
- package/dist/encoders/audio/constants.js.map +1 -0
- package/dist/encoders/audio/types.d.ts +70 -0
- package/dist/encoders/audio/types.d.ts.map +1 -0
- package/dist/encoders/audio/types.js +5 -0
- package/dist/encoders/audio/types.js.map +1 -0
- package/dist/encoders/video/config.d.ts +25 -0
- package/dist/encoders/video/config.d.ts.map +1 -0
- package/dist/encoders/video/config.js +132 -0
- package/dist/encoders/video/config.js.map +1 -0
- package/dist/encoders/video/constants.d.ts +8 -0
- package/dist/encoders/video/constants.d.ts.map +1 -0
- package/dist/encoders/video/constants.js +8 -0
- package/dist/encoders/video/constants.js.map +1 -0
- package/dist/encoders/video/queue.d.ts +9 -0
- package/dist/encoders/video/queue.d.ts.map +1 -0
- package/dist/encoders/video/queue.js +17 -0
- package/dist/encoders/video/queue.js.map +1 -0
- package/dist/encoders/video/types.d.ts +104 -0
- package/dist/encoders/video/types.d.ts.map +1 -0
- package/dist/encoders/video/types.js +5 -0
- package/dist/encoders/video/types.js.map +1 -0
- package/dist/formats/color-space/convert.d.ts +27 -0
- package/dist/formats/color-space/convert.d.ts.map +1 -0
- package/dist/formats/color-space/convert.js +91 -0
- package/dist/formats/color-space/convert.js.map +1 -0
- package/dist/formats/color-space/extract.d.ts +32 -0
- package/dist/formats/color-space/extract.d.ts.map +1 -0
- package/dist/formats/color-space/extract.js +116 -0
- package/dist/formats/color-space/extract.js.map +1 -0
- package/dist/formats/color-space/index.d.ts +10 -0
- package/dist/formats/color-space/index.d.ts.map +1 -0
- package/dist/formats/color-space/index.js +14 -0
- package/dist/formats/color-space/index.js.map +1 -0
- package/dist/formats/color-space/maps.d.ts +70 -0
- package/dist/formats/color-space/maps.d.ts.map +1 -0
- package/dist/formats/color-space/maps.js +70 -0
- package/dist/formats/color-space/maps.js.map +1 -0
- package/dist/formats/color-space/types.d.ts +68 -0
- package/dist/formats/color-space/types.d.ts.map +1 -0
- package/dist/formats/color-space/types.js +49 -0
- package/dist/formats/color-space/types.js.map +1 -0
- package/dist/formats/color-space.d.ts +4 -124
- package/dist/formats/color-space.d.ts.map +1 -1
- package/dist/formats/color-space.js +5 -108
- package/dist/formats/color-space.js.map +1 -1
- package/dist/formats/conversions/frame-converter.d.ts +8 -3
- package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
- package/dist/formats/conversions/frame-converter.js +16 -12
- package/dist/formats/conversions/frame-converter.js.map +1 -1
- package/dist/formats/pixel-format/helpers.d.ts +49 -0
- package/dist/formats/pixel-format/helpers.d.ts.map +1 -0
- package/dist/formats/pixel-format/helpers.js +117 -0
- package/dist/formats/pixel-format/helpers.js.map +1 -0
- package/dist/formats/pixel-format/index.d.ts +9 -0
- package/dist/formats/pixel-format/index.d.ts.map +1 -0
- package/dist/formats/pixel-format/index.js +10 -0
- package/dist/formats/pixel-format/index.js.map +1 -0
- package/dist/formats/pixel-format/sizes.d.ts +17 -0
- package/dist/formats/pixel-format/sizes.d.ts.map +1 -0
- package/dist/formats/pixel-format/sizes.js +159 -0
- package/dist/formats/pixel-format/sizes.js.map +1 -0
- package/dist/formats/pixel-format/types.d.ts +13 -0
- package/dist/formats/pixel-format/types.d.ts.map +1 -0
- package/dist/formats/pixel-format/types.js +5 -0
- package/dist/formats/pixel-format/types.js.map +1 -0
- package/dist/formats/pixel-formats.d.ts +4 -53
- package/dist/formats/pixel-formats.d.ts.map +1 -1
- package/dist/formats/pixel-formats.js +5 -179
- package/dist/formats/pixel-formats.js.map +1 -1
- package/dist/hardware/types.d.ts.map +1 -1
- package/dist/hardware/types.js +8 -2
- package/dist/hardware/types.js.map +1 -1
- package/dist/transfer/detach.d.ts +42 -0
- package/dist/transfer/detach.d.ts.map +1 -0
- package/dist/transfer/detach.js +93 -0
- package/dist/transfer/detach.js.map +1 -0
- package/dist/transfer/index.d.ts +9 -0
- package/dist/transfer/index.d.ts.map +1 -0
- package/dist/transfer/index.js +11 -0
- package/dist/transfer/index.js.map +1 -0
- package/dist/transfer/validate.d.ts +45 -0
- package/dist/transfer/validate.d.ts.map +1 -0
- package/dist/transfer/validate.js +98 -0
- package/dist/transfer/validate.js.map +1 -0
- package/dist/types/video.d.ts +16 -0
- package/dist/types/video.d.ts.map +1 -1
- package/dist/utils/codec-validation.d.ts +3 -28
- package/dist/utils/codec-validation.d.ts.map +1 -1
- package/dist/utils/codec-validation.js +4 -248
- package/dist/utils/codec-validation.js.map +1 -1
- package/docs/api.md +4 -2
- package/docs/architecture-refactor-plan.md +149 -0
- package/docs/architecture.md +258 -0
- package/package.json +6 -4
- package/dist/config/ffmpeg-quality.d.ts +0 -23
- package/dist/config/ffmpeg-quality.d.ts.map +0 -1
- package/dist/config/ffmpeg-quality.js +0 -15
- package/dist/config/ffmpeg-quality.js.map +0 -1
- package/dist/containers/FFmpegSpawnMuxer.d.ts +0 -42
- package/dist/containers/FFmpegSpawnMuxer.d.ts.map +0 -1
- package/dist/containers/FFmpegSpawnMuxer.js +0 -311
- package/dist/containers/FFmpegSpawnMuxer.js.map +0 -1
- package/dist/containers/FallbackMuxer.d.ts +0 -42
- package/dist/containers/FallbackMuxer.d.ts.map +0 -1
- package/dist/containers/FallbackMuxer.js +0 -311
- package/dist/containers/FallbackMuxer.js.map +0 -1
- package/dist/containers/MuxerWithFallback.d.ts +0 -110
- package/dist/containers/MuxerWithFallback.d.ts.map +0 -1
- package/dist/containers/MuxerWithFallback.js +0 -239
- package/dist/containers/MuxerWithFallback.js.map +0 -1
- package/dist/demos/demo-audio-visualizer-mediabunny.d.ts +0 -10
- package/dist/demos/demo-audio-visualizer-mediabunny.d.ts.map +0 -1
- package/dist/demos/demo-audio-visualizer-mediabunny.js +0 -357
- package/dist/demos/demo-audio-visualizer-mediabunny.js.map +0 -1
- package/dist/demos/demo-audio-visualizer-nodeav.d.ts +0 -10
- package/dist/demos/demo-audio-visualizer-nodeav.d.ts.map +0 -1
- package/dist/demos/demo-audio-visualizer-nodeav.js +0 -318
- package/dist/demos/demo-audio-visualizer-nodeav.js.map +0 -1
- package/dist/demos/demo-muxer-fallback.d.ts +0 -8
- package/dist/demos/demo-muxer-fallback.d.ts.map +0 -1
- package/dist/demos/demo-muxer-fallback.js +0 -165
- package/dist/demos/demo-muxer-fallback.js.map +0 -1
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +0 -72
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +0 -1
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +0 -293
- package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +0 -1
- package/dist/polyfills/ImageDataPolyfill.d.ts +0 -12
- package/dist/polyfills/ImageDataPolyfill.d.ts.map +0 -1
- package/dist/polyfills/ImageDataPolyfill.js +0 -22
- package/dist/polyfills/ImageDataPolyfill.js.map +0 -1
- package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +0 -16
- package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +0 -1
- package/dist/polyfills/OffscreenCanvasPolyfill.js +0 -46
- package/dist/polyfills/OffscreenCanvasPolyfill.js.map +0 -1
- package/dist/polyfills/VideoFramePolyfill.d.ts +0 -44
- package/dist/polyfills/VideoFramePolyfill.d.ts.map +0 -1
- package/dist/polyfills/VideoFramePolyfill.js +0 -98
- package/dist/polyfills/VideoFramePolyfill.js.map +0 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sample format mapping utilities for audio decoding
|
|
3
|
+
*/
|
|
4
|
+
import { AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8P, } from 'node-av/constants';
|
|
5
|
+
/**
|
|
6
|
+
* Map WebCodecs AudioSampleFormat to FFmpeg AVSampleFormat
|
|
7
|
+
*/
|
|
8
|
+
export function mapSampleFormat(format) {
|
|
9
|
+
switch (format) {
|
|
10
|
+
case 'u8':
|
|
11
|
+
return AV_SAMPLE_FMT_U8;
|
|
12
|
+
case 'u8-planar':
|
|
13
|
+
return AV_SAMPLE_FMT_U8P;
|
|
14
|
+
case 's16':
|
|
15
|
+
return AV_SAMPLE_FMT_S16;
|
|
16
|
+
case 's16-planar':
|
|
17
|
+
return AV_SAMPLE_FMT_S16P;
|
|
18
|
+
case 's32':
|
|
19
|
+
return AV_SAMPLE_FMT_S32;
|
|
20
|
+
case 's32-planar':
|
|
21
|
+
return AV_SAMPLE_FMT_S32P;
|
|
22
|
+
case 'f32':
|
|
23
|
+
return AV_SAMPLE_FMT_FLT;
|
|
24
|
+
case 'f32-planar':
|
|
25
|
+
return AV_SAMPLE_FMT_FLTP;
|
|
26
|
+
default:
|
|
27
|
+
return AV_SAMPLE_FMT_FLT;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Map AVSampleFormat to FFmpeg format name string
|
|
32
|
+
*/
|
|
33
|
+
export function sampleFormatToFFmpegName(fmt) {
|
|
34
|
+
switch (fmt) {
|
|
35
|
+
case AV_SAMPLE_FMT_U8:
|
|
36
|
+
return 'u8';
|
|
37
|
+
case AV_SAMPLE_FMT_U8P:
|
|
38
|
+
return 'u8p';
|
|
39
|
+
case AV_SAMPLE_FMT_S16:
|
|
40
|
+
return 's16';
|
|
41
|
+
case AV_SAMPLE_FMT_S16P:
|
|
42
|
+
return 's16p';
|
|
43
|
+
case AV_SAMPLE_FMT_S32:
|
|
44
|
+
return 's32';
|
|
45
|
+
case AV_SAMPLE_FMT_S32P:
|
|
46
|
+
return 's32p';
|
|
47
|
+
case AV_SAMPLE_FMT_FLTP:
|
|
48
|
+
return 'fltp';
|
|
49
|
+
case AV_SAMPLE_FMT_FLT:
|
|
50
|
+
default:
|
|
51
|
+
return 'flt';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=sample-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sample-format.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/decoder/sample-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAyB;IACvD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,IAAI;YACP,OAAO,gBAAgB,CAAC;QAC1B,KAAK,WAAW;YACd,OAAO,iBAAiB,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,iBAAiB,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,kBAAkB,CAAC;QAC5B,KAAK,KAAK;YACR,OAAO,iBAAiB,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,kBAAkB,CAAC;QAC5B,KAAK,KAAK;YACR,OAAO,iBAAiB,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,kBAAkB,CAAC;QAC5B;YACE,OAAO,iBAAiB,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAmB;IAC1D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,gBAAgB;YACnB,OAAO,IAAI,CAAC;QACd,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC;QACf,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC;QACf,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC;QAChB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC;QACf,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC;QAChB,KAAK,kBAAkB;YACrB,OAAO,MAAM,CAAC;QAChB,KAAK,iBAAiB,CAAC;QACvB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel layout utilities for audio encoding
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get channel layout for the given number of channels
|
|
6
|
+
*/
|
|
7
|
+
export declare function getChannelLayout(numChannels: number): {
|
|
8
|
+
nbChannels: number;
|
|
9
|
+
order: number;
|
|
10
|
+
mask: bigint;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=channel-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-layout.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/channel-layout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAezG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel layout utilities for audio encoding
|
|
3
|
+
*/
|
|
4
|
+
import { AV_CHANNEL_ORDER_NATIVE, AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_5POINT1, AV_CH_LAYOUT_7POINT1, } from 'node-av/constants';
|
|
5
|
+
/**
|
|
6
|
+
* Get channel layout for the given number of channels
|
|
7
|
+
*/
|
|
8
|
+
export function getChannelLayout(numChannels) {
|
|
9
|
+
// Standard channel layouts as ChannelLayout objects
|
|
10
|
+
// Order 1 = AV_CHANNEL_ORDER_NATIVE (required for FFmpeg)
|
|
11
|
+
switch (numChannels) {
|
|
12
|
+
case 1:
|
|
13
|
+
return { nbChannels: 1, order: AV_CHANNEL_ORDER_NATIVE, mask: AV_CH_LAYOUT_MONO };
|
|
14
|
+
case 2:
|
|
15
|
+
return { nbChannels: 2, order: AV_CHANNEL_ORDER_NATIVE, mask: AV_CH_LAYOUT_STEREO };
|
|
16
|
+
case 6:
|
|
17
|
+
return { nbChannels: 6, order: AV_CHANNEL_ORDER_NATIVE, mask: AV_CH_LAYOUT_5POINT1 };
|
|
18
|
+
case 8:
|
|
19
|
+
return { nbChannels: 8, order: AV_CHANNEL_ORDER_NATIVE, mask: AV_CH_LAYOUT_7POINT1 };
|
|
20
|
+
default:
|
|
21
|
+
return { nbChannels: numChannels, order: AV_CHANNEL_ORDER_NATIVE, mask: BigInt((1 << numChannels) - 1) };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=channel-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-layout.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/channel-layout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,oDAAoD;IACpD,0DAA0D;IAC1D,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,CAAC;YACJ,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QACpF,KAAK,CAAC;YACJ,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;QACtF,KAAK,CAAC;YACJ,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;QACvF,KAAK,CAAC;YACJ,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;QACvF;YACE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAC7G,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio codec description utilities
|
|
3
|
+
*
|
|
4
|
+
* Extracts and generates codec-specific description data (extradata)
|
|
5
|
+
* for AAC, Opus, FLAC, and Vorbis codecs.
|
|
6
|
+
*/
|
|
7
|
+
import type { Encoder } from 'node-av/api';
|
|
8
|
+
/**
|
|
9
|
+
* Generate OpusHead (Identification Header) per RFC 7845 Section 5.1
|
|
10
|
+
* Used when FFmpeg doesn't provide extradata for Opus encoding
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateOpusHead(channels: number, inputSampleRate: number): Buffer;
|
|
13
|
+
/**
|
|
14
|
+
* Build FLAC description from extradata
|
|
15
|
+
* Prepends 'fLaC' magic and STREAMINFO block header
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildFlacDescription(extraData: Uint8Array): Buffer;
|
|
18
|
+
export interface CodecDescriptionContext {
|
|
19
|
+
codec: string;
|
|
20
|
+
numberOfChannels: number;
|
|
21
|
+
inputSampleRate: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extract codec description (extradata) from encoder
|
|
25
|
+
*
|
|
26
|
+
* Different codecs have different description formats:
|
|
27
|
+
* - AAC: AudioSpecificConfig
|
|
28
|
+
* - Opus: OpusHead (Identification Header)
|
|
29
|
+
* - FLAC: fLaC magic + STREAMINFO block
|
|
30
|
+
* - Vorbis: identification + comment + setup headers
|
|
31
|
+
*/
|
|
32
|
+
export declare function extractCodecDescription(encoder: Encoder, context: CodecDescriptionContext): Buffer | null;
|
|
33
|
+
//# sourceMappingURL=codec-description.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-description.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/codec-description.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAK3C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAmER;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAKlE;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,uBAAuB,GAC/B,MAAM,GAAG,IAAI,CAkDf"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio codec description utilities
|
|
3
|
+
*
|
|
4
|
+
* Extracts and generates codec-specific description data (extradata)
|
|
5
|
+
* for AAC, Opus, FLAC, and Vorbis codecs.
|
|
6
|
+
*/
|
|
7
|
+
import { createLogger } from '../../../../utils/logger.js';
|
|
8
|
+
const logger = createLogger('audio-codec-description');
|
|
9
|
+
/**
|
|
10
|
+
* Generate OpusHead (Identification Header) per RFC 7845 Section 5.1
|
|
11
|
+
* Used when FFmpeg doesn't provide extradata for Opus encoding
|
|
12
|
+
*/
|
|
13
|
+
export function generateOpusHead(channels, inputSampleRate) {
|
|
14
|
+
const sampleRate = inputSampleRate || 48000;
|
|
15
|
+
// OpusHead structure:
|
|
16
|
+
// - Magic Signature: "OpusHead" (8 bytes)
|
|
17
|
+
// - Version: 1 (1 byte)
|
|
18
|
+
// - Channel Count (1 byte)
|
|
19
|
+
// - Pre-skip: samples to skip at start (2 bytes, LE) - 312 is typical for 48kHz
|
|
20
|
+
// - Input Sample Rate (4 bytes, LE) - original sample rate
|
|
21
|
+
// - Output Gain: 0 dB (2 bytes, LE)
|
|
22
|
+
// - Channel Mapping Family (1 byte) - 0 for mono/stereo
|
|
23
|
+
const preSkip = 312;
|
|
24
|
+
const outputGain = 0;
|
|
25
|
+
const mappingFamily = channels <= 2 ? 0 : 1;
|
|
26
|
+
let headerSize = 19; // Base header size for mapping family 0
|
|
27
|
+
if (mappingFamily > 0) {
|
|
28
|
+
headerSize += 2 + channels;
|
|
29
|
+
}
|
|
30
|
+
const header = Buffer.alloc(headerSize);
|
|
31
|
+
let offset = 0;
|
|
32
|
+
// Magic Signature
|
|
33
|
+
header.write('OpusHead', offset);
|
|
34
|
+
offset += 8;
|
|
35
|
+
// Version
|
|
36
|
+
header.writeUInt8(1, offset);
|
|
37
|
+
offset += 1;
|
|
38
|
+
// Channel Count
|
|
39
|
+
header.writeUInt8(channels, offset);
|
|
40
|
+
offset += 1;
|
|
41
|
+
// Pre-skip (little-endian)
|
|
42
|
+
header.writeUInt16LE(preSkip, offset);
|
|
43
|
+
offset += 2;
|
|
44
|
+
// Input Sample Rate (little-endian)
|
|
45
|
+
header.writeUInt32LE(sampleRate, offset);
|
|
46
|
+
offset += 4;
|
|
47
|
+
// Output Gain (little-endian)
|
|
48
|
+
header.writeInt16LE(outputGain, offset);
|
|
49
|
+
offset += 2;
|
|
50
|
+
// Channel Mapping Family
|
|
51
|
+
header.writeUInt8(mappingFamily, offset);
|
|
52
|
+
offset += 1;
|
|
53
|
+
// For mapping family > 0, add stream info and channel mapping
|
|
54
|
+
if (mappingFamily > 0) {
|
|
55
|
+
const streamCount = channels > 2 ? Math.ceil(channels / 2) : 1;
|
|
56
|
+
const coupledCount = channels > 2 ? Math.floor(channels / 2) : 0;
|
|
57
|
+
header.writeUInt8(streamCount, offset);
|
|
58
|
+
offset += 1;
|
|
59
|
+
header.writeUInt8(coupledCount, offset);
|
|
60
|
+
offset += 1;
|
|
61
|
+
// Channel mapping (identity mapping)
|
|
62
|
+
for (let i = 0; i < channels; i++) {
|
|
63
|
+
header.writeUInt8(i, offset);
|
|
64
|
+
offset += 1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return header;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Build FLAC description from extradata
|
|
71
|
+
* Prepends 'fLaC' magic and STREAMINFO block header
|
|
72
|
+
*/
|
|
73
|
+
export function buildFlacDescription(extraData) {
|
|
74
|
+
const magic = Buffer.from('fLaC');
|
|
75
|
+
// STREAMINFO block header: type (0x00) | last-block flag (0x80)
|
|
76
|
+
const blockHeader = Buffer.from([0x80, 0x00, 0x00, extraData.length]);
|
|
77
|
+
return Buffer.concat([magic, blockHeader, Buffer.from(extraData)]);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Extract codec description (extradata) from encoder
|
|
81
|
+
*
|
|
82
|
+
* Different codecs have different description formats:
|
|
83
|
+
* - AAC: AudioSpecificConfig
|
|
84
|
+
* - Opus: OpusHead (Identification Header)
|
|
85
|
+
* - FLAC: fLaC magic + STREAMINFO block
|
|
86
|
+
* - Vorbis: identification + comment + setup headers
|
|
87
|
+
*/
|
|
88
|
+
export function extractCodecDescription(encoder, context) {
|
|
89
|
+
const codecBase = context.codec.split('.')[0].toLowerCase();
|
|
90
|
+
try {
|
|
91
|
+
const ctx = encoder.getCodecContext();
|
|
92
|
+
if (!ctx)
|
|
93
|
+
return null;
|
|
94
|
+
const extraData = ctx.extraData;
|
|
95
|
+
if (codecBase === 'mp4a' || codecBase === 'aac') {
|
|
96
|
+
if (!extraData || extraData.length === 0)
|
|
97
|
+
return null;
|
|
98
|
+
// AAC: extradata contains AudioSpecificConfig
|
|
99
|
+
const description = Buffer.from(extraData);
|
|
100
|
+
logger.debug(`AAC description from extradata: ${description.length} bytes`);
|
|
101
|
+
return description;
|
|
102
|
+
}
|
|
103
|
+
if (codecBase === 'opus') {
|
|
104
|
+
// Opus: extradata contains OpusHead structure
|
|
105
|
+
if (extraData && extraData.length > 0) {
|
|
106
|
+
const description = Buffer.from(extraData);
|
|
107
|
+
logger.debug(`Opus description from extradata: ${description.length} bytes`);
|
|
108
|
+
return description;
|
|
109
|
+
}
|
|
110
|
+
// Generate OpusHead manually if FFmpeg didn't provide it
|
|
111
|
+
const description = generateOpusHead(context.numberOfChannels, context.inputSampleRate);
|
|
112
|
+
logger.debug(`Opus description generated: ${description.length} bytes`);
|
|
113
|
+
return description;
|
|
114
|
+
}
|
|
115
|
+
if (codecBase === 'flac') {
|
|
116
|
+
if (!extraData || extraData.length === 0)
|
|
117
|
+
return null;
|
|
118
|
+
const description = buildFlacDescription(extraData);
|
|
119
|
+
logger.debug(`FLAC description: ${description.length} bytes`);
|
|
120
|
+
return description;
|
|
121
|
+
}
|
|
122
|
+
if (codecBase === 'vorbis') {
|
|
123
|
+
if (!extraData || extraData.length === 0)
|
|
124
|
+
return null;
|
|
125
|
+
// Vorbis: extradata contains all three headers
|
|
126
|
+
const description = Buffer.from(extraData);
|
|
127
|
+
logger.debug(`Vorbis description: ${description.length} bytes`);
|
|
128
|
+
return description;
|
|
129
|
+
}
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
logger.debug(`Failed to extract codec description: ${err}`);
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=codec-description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-description.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/codec-description.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio codec name mapping utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get FFmpeg encoder name from WebCodecs codec string
|
|
6
|
+
*/
|
|
7
|
+
export declare function getEncoderName(codec: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Get FFmpeg encoder codec from WebCodecs codec string
|
|
10
|
+
*/
|
|
11
|
+
export declare function getEncoderCodec(codec: string): string;
|
|
12
|
+
//# sourceMappingURL=codec-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-mapping.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/codec-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgCrD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio codec name mapping utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get FFmpeg encoder name from WebCodecs codec string
|
|
6
|
+
*/
|
|
7
|
+
export function getEncoderName(codec) {
|
|
8
|
+
const codecLower = codec.toLowerCase();
|
|
9
|
+
if (codecLower.startsWith('mp4a') || codecLower === 'aac') {
|
|
10
|
+
return 'aac';
|
|
11
|
+
}
|
|
12
|
+
else if (codecLower === 'opus') {
|
|
13
|
+
return 'libopus';
|
|
14
|
+
}
|
|
15
|
+
else if (codecLower === 'vorbis') {
|
|
16
|
+
return 'libvorbis';
|
|
17
|
+
}
|
|
18
|
+
else if (codecLower === 'flac') {
|
|
19
|
+
return 'flac';
|
|
20
|
+
}
|
|
21
|
+
else if (codecLower === 'mp3') {
|
|
22
|
+
return 'libmp3lame';
|
|
23
|
+
}
|
|
24
|
+
return 'aac';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get FFmpeg encoder codec from WebCodecs codec string
|
|
28
|
+
*/
|
|
29
|
+
export function getEncoderCodec(codec) {
|
|
30
|
+
const codecBase = codec.split('.')[0].toLowerCase();
|
|
31
|
+
switch (codecBase) {
|
|
32
|
+
case 'opus':
|
|
33
|
+
return 'libopus';
|
|
34
|
+
case 'mp3':
|
|
35
|
+
return 'libmp3lame';
|
|
36
|
+
case 'flac':
|
|
37
|
+
return 'flac';
|
|
38
|
+
case 'mp4a':
|
|
39
|
+
case 'aac':
|
|
40
|
+
return 'aac';
|
|
41
|
+
case 'vorbis':
|
|
42
|
+
return 'libvorbis';
|
|
43
|
+
case 'pcm-s16':
|
|
44
|
+
return 'pcm_s16le';
|
|
45
|
+
case 'pcm-s24':
|
|
46
|
+
return 'pcm_s24le';
|
|
47
|
+
case 'pcm-s32':
|
|
48
|
+
return 'pcm_s32le';
|
|
49
|
+
case 'pcm-u8':
|
|
50
|
+
return 'pcm_u8';
|
|
51
|
+
case 'ulaw':
|
|
52
|
+
return 'pcm_mulaw';
|
|
53
|
+
case 'alaw':
|
|
54
|
+
return 'pcm_alaw';
|
|
55
|
+
case 'pcm-f32':
|
|
56
|
+
return 'pcm_f32le';
|
|
57
|
+
default:
|
|
58
|
+
return 'aac';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=codec-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-mapping.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/codec-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,WAAW,CAAC;IACrB,CAAC;SAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAChC,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEpD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,UAAU,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio packet drain utilities
|
|
3
|
+
*
|
|
4
|
+
* Handles draining encoded packets from the audio encoder
|
|
5
|
+
* and converting them to EncodedFrame output format.
|
|
6
|
+
*/
|
|
7
|
+
import type { Encoder } from 'node-av/api';
|
|
8
|
+
import type { EncodedFrame } from '../../../types.js';
|
|
9
|
+
export interface AudioDrainContext {
|
|
10
|
+
/** Codec description (AAC AudioSpecificConfig, OpusHead, etc.) */
|
|
11
|
+
codecDescription: Buffer | null;
|
|
12
|
+
/** Encoder sample rate for duration calculation */
|
|
13
|
+
encoderSampleRate: number;
|
|
14
|
+
/** Fallback frame index for timestamp */
|
|
15
|
+
frameIndex: number;
|
|
16
|
+
/** Whether this is the first frame (for attaching description) */
|
|
17
|
+
firstFrame: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface AudioDrainResult {
|
|
20
|
+
/** Encoded frames extracted from packets */
|
|
21
|
+
frames: EncodedFrame[];
|
|
22
|
+
/** Whether first frame was emitted */
|
|
23
|
+
firstFrameEmitted: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Drain all available packets from the audio encoder
|
|
27
|
+
*
|
|
28
|
+
* Converts packets to EncodedFrame format, attaching codec description
|
|
29
|
+
* to the first frame.
|
|
30
|
+
*/
|
|
31
|
+
export declare function drainAudioPackets(encoder: Encoder, context: AudioDrainContext): Promise<AudioDrainResult>;
|
|
32
|
+
//# sourceMappingURL=drain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/drain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,sCAAsC;IACtC,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA0C3B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio packet drain utilities
|
|
3
|
+
*
|
|
4
|
+
* Handles draining encoded packets from the audio encoder
|
|
5
|
+
* and converting them to EncodedFrame output format.
|
|
6
|
+
*/
|
|
7
|
+
import { AV_PKT_FLAG_KEY } from 'node-av/constants';
|
|
8
|
+
import { createLogger } from '../../../../utils/logger.js';
|
|
9
|
+
const logger = createLogger('audio-encoder-drain');
|
|
10
|
+
/**
|
|
11
|
+
* Drain all available packets from the audio encoder
|
|
12
|
+
*
|
|
13
|
+
* Converts packets to EncodedFrame format, attaching codec description
|
|
14
|
+
* to the first frame.
|
|
15
|
+
*/
|
|
16
|
+
export async function drainAudioPackets(encoder, context) {
|
|
17
|
+
const frames = [];
|
|
18
|
+
let firstFrameEmitted = !context.firstFrame;
|
|
19
|
+
let packet = await encoder.receive();
|
|
20
|
+
while (packet) {
|
|
21
|
+
if (packet.data) {
|
|
22
|
+
const timestamp = packet.pts !== undefined ? Number(packet.pts) : context.frameIndex;
|
|
23
|
+
const keyFrame = (packet.flags & AV_PKT_FLAG_KEY) === AV_PKT_FLAG_KEY || packet.isKeyframe;
|
|
24
|
+
// Get actual duration from packet (in timebase units), convert to samples
|
|
25
|
+
let durationSamples;
|
|
26
|
+
if (packet.duration !== undefined && packet.duration > 0n) {
|
|
27
|
+
const tb = packet.timeBase;
|
|
28
|
+
if (tb && tb.den > 0) {
|
|
29
|
+
// duration_samples = duration * (tb.num / tb.den) * sampleRate
|
|
30
|
+
durationSamples = Number((packet.duration * BigInt(tb.num) * BigInt(context.encoderSampleRate)) / BigInt(tb.den));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const frameData = {
|
|
34
|
+
data: Buffer.from(packet.data),
|
|
35
|
+
timestamp,
|
|
36
|
+
keyFrame,
|
|
37
|
+
durationSamples,
|
|
38
|
+
};
|
|
39
|
+
// Include codec description on the first frame
|
|
40
|
+
if (!firstFrameEmitted && context.codecDescription) {
|
|
41
|
+
frameData.description = context.codecDescription;
|
|
42
|
+
firstFrameEmitted = true;
|
|
43
|
+
}
|
|
44
|
+
frames.push(frameData);
|
|
45
|
+
}
|
|
46
|
+
packet.unref();
|
|
47
|
+
packet = await encoder.receive();
|
|
48
|
+
}
|
|
49
|
+
return { frames, firstFrameEmitted };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=drain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drain.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/drain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAoBnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAgB,EAChB,OAA0B;IAE1B,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,iBAAiB,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;IAE5C,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,OAAO,MAAM,EAAE,CAAC;QACd,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;YACrF,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,eAAe,IAAK,MAAc,CAAC,UAAU,CAAC;YAEpG,0EAA0E;YAC1E,IAAI,eAAmC,CAAC;YACxC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC;gBAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC3B,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;oBACrB,+DAA+D;oBAC/D,eAAe,GAAG,MAAM,CACtB,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CACxF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAiB;gBAC9B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC9B,SAAS;gBACT,QAAQ;gBACR,eAAe;aAChB,CAAC;YAEF,+CAA+C;YAC/C,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBACnD,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;gBACjD,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio encoder helper utilities
|
|
3
|
+
*
|
|
4
|
+
* Organized into focused modules:
|
|
5
|
+
* - constants: Shared constants (OPUS_SAMPLE_RATE)
|
|
6
|
+
* - codec-mapping: Codec name/codec mapping
|
|
7
|
+
* - channel-layout: Channel layout utilities
|
|
8
|
+
* - sample-format-convert: Sample format conversion utilities
|
|
9
|
+
* - options: Encoder options building
|
|
10
|
+
* - codec-description: Codec description extraction
|
|
11
|
+
* - drain: Packet draining utilities
|
|
12
|
+
*/
|
|
13
|
+
export { OPUS_SAMPLE_RATE } from './constants.js';
|
|
14
|
+
export { getEncoderName, getEncoderCodec } from './codec-mapping.js';
|
|
15
|
+
export { getChannelLayout } from './channel-layout.js';
|
|
16
|
+
export { convertToPlanar, convertToS16Interleaved, convertToS32Interleaved, convertToS16Planar, convertToU8Interleaved, convertFromPlanarToInterleaved, convertFromS16ToF32Interleaved, convertFromS16PlanarToF32Interleaved, convertFromS32ToF32Interleaved, } from './sample-format-convert.js';
|
|
17
|
+
export { buildAudioEncoderOptions, getCodecSampleFormat, configureOpusOptions, configureAacOptions, type AudioEncoderOptions, } from './options.js';
|
|
18
|
+
export { extractCodecDescription, generateOpusHead, buildFlacDescription, type CodecDescriptionContext, } from './codec-description.js';
|
|
19
|
+
export { drainAudioPackets, type AudioDrainContext, type AudioDrainResult, } from './drain.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,8BAA8B,EAC9B,8BAA8B,EAC9B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio encoder helper utilities
|
|
3
|
+
*
|
|
4
|
+
* Organized into focused modules:
|
|
5
|
+
* - constants: Shared constants (OPUS_SAMPLE_RATE)
|
|
6
|
+
* - codec-mapping: Codec name/codec mapping
|
|
7
|
+
* - channel-layout: Channel layout utilities
|
|
8
|
+
* - sample-format-convert: Sample format conversion utilities
|
|
9
|
+
* - options: Encoder options building
|
|
10
|
+
* - codec-description: Codec description extraction
|
|
11
|
+
* - drain: Packet draining utilities
|
|
12
|
+
*/
|
|
13
|
+
export { OPUS_SAMPLE_RATE } from './constants.js';
|
|
14
|
+
export { getEncoderName, getEncoderCodec } from './codec-mapping.js';
|
|
15
|
+
export { getChannelLayout } from './channel-layout.js';
|
|
16
|
+
export { convertToPlanar, convertToS16Interleaved, convertToS32Interleaved, convertToS16Planar, convertToU8Interleaved, convertFromPlanarToInterleaved, convertFromS16ToF32Interleaved, convertFromS16PlanarToF32Interleaved, convertFromS32ToF32Interleaved, } from './sample-format-convert.js';
|
|
17
|
+
export { buildAudioEncoderOptions, getCodecSampleFormat, configureOpusOptions, configureAacOptions, } from './options.js';
|
|
18
|
+
export { extractCodecDescription, generateOpusHead, buildFlacDescription, } from './codec-description.js';
|
|
19
|
+
export { drainAudioPackets, } from './drain.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,8BAA8B,EAC9B,8BAA8B,EAC9B,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,GAGlB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio encoder options building utilities
|
|
3
|
+
*
|
|
4
|
+
* Builds codec-specific encoder options for Opus, AAC, FLAC, Vorbis, and PCM codecs
|
|
5
|
+
*/
|
|
6
|
+
import type { Rational } from 'node-av/lib';
|
|
7
|
+
import { type AVSampleFormat } from 'node-av/constants';
|
|
8
|
+
import type { AudioEncoderBackendConfig } from '../../../types.js';
|
|
9
|
+
/** Channel layout object for FFmpeg */
|
|
10
|
+
export interface ChannelLayout {
|
|
11
|
+
nbChannels: number;
|
|
12
|
+
order: number;
|
|
13
|
+
mask: bigint;
|
|
14
|
+
}
|
|
15
|
+
export interface AudioEncoderOptions {
|
|
16
|
+
type: 'audio';
|
|
17
|
+
sampleRate: number;
|
|
18
|
+
channelLayout: ChannelLayout;
|
|
19
|
+
sampleFormat: AVSampleFormat;
|
|
20
|
+
timeBase: Rational;
|
|
21
|
+
bitrate?: number;
|
|
22
|
+
options: Record<string, string | number>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the required sample format for a codec
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCodecSampleFormat(codecBase: string): AVSampleFormat;
|
|
28
|
+
/**
|
|
29
|
+
* Configure Opus-specific encoder options
|
|
30
|
+
*/
|
|
31
|
+
export declare function configureOpusOptions(options: Record<string, string | number>, config: AudioEncoderBackendConfig): void;
|
|
32
|
+
/**
|
|
33
|
+
* Configure AAC-specific encoder options
|
|
34
|
+
*/
|
|
35
|
+
export declare function configureAacOptions(options: Record<string, string | number>, config: AudioEncoderBackendConfig): void;
|
|
36
|
+
/**
|
|
37
|
+
* Build complete encoder options for a given audio codec
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildAudioEncoderOptions(config: AudioEncoderBackendConfig, timeBase: Rational): AudioEncoderOptions;
|
|
40
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/backends/node-av/audio/encoder/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,cAAc,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAuBtE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAmDN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,yBAAyB,EACjC,QAAQ,EAAE,QAAQ,GACjB,mBAAmB,CA6BrB"}
|