Files
mediabunny/dev/live.html
T
c3df2a24e5 Add custom quality factors and quantizer bitrate mode (#448)
* Add custom quality factors and quantizer bitrate mode (closes #327)

* Fix quantizer mode fallback and per-frame quantizer edge cases

* Clean up quantizer mode tests

* Quantizer implementation

* Add quality tests

* Improve conversion codec error message, make test more lenient

* Add quantizer support blog post

---------

Co-authored-by: Vanilagy <[email protected]>
2026-07-30 17:24:59 +02:00

76 lines
2.2 KiB
HTML

<button>Go</button>
<script src="../dist/bundles/mediabunny.cjs"></script>
<script src="../packages/mp3-encoder/dist/bundles/mediabunny-mp3-encoder.js"></script>
<script type="module">
function download(blob, filename) {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
}
MediabunnyMp3Encoder.registerMp3Encoder();
const button = document.querySelector('button');
button.addEventListener('click', async () => {
const stream = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: false });
const videoTrack = stream.getVideoTracks()[0];
const audioTrack = null && stream.getAudioTracks()[0];
const output = new Mediabunny.Output({
target: new Mediabunny.BufferTarget(),
format: new Mediabunny.Mp4OutputFormat(),
});
let videoSource = null;
let audioSource = null;
if (videoTrack) {
videoSource = new Mediabunny.MediaStreamVideoTrackSource(videoTrack, {
codec: 'vp9',
quality: new Mediabunny.Quality('medium'),
sizeChangeBehavior: 'passThrough',
}, { timestampBase: 'unix' });
videoSource.errorPromise.catch((d) => console.log("Hello?????", d));
output.addVideoTrack(videoSource);
}
if (audioTrack) {
audioSource = new Mediabunny.MediaStreamAudioTrackSource(audioTrack, {
codec: 'opus',
quality: new Mediabunny.Quality('medium')
});
audioSource.errorPromise.catch((d) => console.log("Hello!!???", d));
output.addAudioTrack(audioSource);
}
await output.start();
setTimeout(() => {
return;
videoSource?.pause();
audioSource?.pause();
setTimeout(() => {
videoSource?.resume();
audioSource?.resume();
}, 1000);
}, 1000);
await new Promise(resolve => setTimeout(resolve, 5000));
await output.finalize();
console.log(output.target.buffer);
//download(new Blob([output.target.buffer]), 'livetest' + output.format.fileExtension);
videoTrack?.stop();
audioTrack?.stop();
});
</script>