v1.1.0
Support Muxer and Demuxer
Muxer Usage
Muxers combine encoded video/audio chunks into container files (MP4, WebM, MKV).
// Create muxer with options
const muxer = new Mp4Muxer({ fastStart: true })
// Add video track
muxer.addVideoTrack({
codec: 'avc1.42001E',
width: 1920,
height: 1080,
description: metadata.decoderConfig?.description,
})
// Add audio track
muxer.addAudioTrack({
codec: 'mp4a.40.2',
sampleRate: 48000,
numberOfChannels: 2,
description: audioMetadata.decoderConfig?.description,
})
// Add chunks as they're encoded
encoder.configure({
output: (chunk, metadata) => muxer.addVideoChunk(chunk, metadata),
})
// Finalize and get output
await muxer.flush()
const mp4Data = muxer.finalize() // Uint8Array
fs.writeFileSync('output.mp4', mp4Data)
muxer.close()Demuxer Usage
Demuxers extract encoded video/audio chunks from container files (MP4, WebM, MKV).
// Create demuxer with callbacks
const demuxer = new Mp4Demuxer({
videoOutput: (chunk) => videoDecoder.decode(chunk),
audioOutput: (chunk) => audioDecoder.decode(chunk),
error: (err) => console.error(err),
})
// Load from file path or buffer
await demuxer.load('./video.mp4')
// or: await demuxer.loadBuffer(uint8Array)
// Get decoder configs for VideoDecoder/AudioDecoder
const videoConfig = demuxer.videoDecoderConfig
const audioConfig = demuxer.audioDecoderConfig
videoDecoder.configure(videoConfig)
audioDecoder.configure(audioConfig)
// Get track info
console.log(demuxer.tracks) // Array of DemuxerTrackInfo
console.log(demuxer.duration) // Duration in microseconds
// Start demuxing (async, calls callbacks)
demuxer.demux() // Demux all packets
demuxer.demux(100) // Demux up to 100 packets
// Seek to timestamp (microseconds)
demuxer.seek(5_000_000) // Seek to 5 seconds
demuxer.close()