Skip to content

v1.1.0

Choose a tag to compare

@Brooooooklyn Brooooooklyn released this 19 Dec 01:32
· 103 commits to main since this release
v1.1.0
e2315be

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()