Check if a video can be decoded using Mediabunny
Before attempting to load a video into <Video>, you may want to check if the video can be decoded by the browser. This can be done using Mediabunny.
Here's a canDecode() function you can copy and paste into your project:
import {ALL_FORMATS , Input , UrlSource , BlobSource } from 'mediabunny';
export const canDecode = async (src : string | Blob ) => {
const input = new Input ({
formats : ALL_FORMATS ,
source : typeof src === 'string' ? new UrlSource (src ) : new BlobSource (src ),
});
try {
await input .getFormat ();
} catch {
return false;
}
const videoTrack = await input .getPrimaryVideoTrack ();
if (videoTrack && !(await videoTrack .canDecode ())) {
return false;
}
const audioTrack = await input .getPrimaryAudioTrack ();
if (audioTrack && !(await audioTrack .canDecode ())) {
return false;
}
return true;
};Usage
Check if a video can be decoded
const src = 'https://remotion.media/video.mp4';
const isDecodable = await canDecode(src);
if (isDecodable) {
console.log('Video can be decoded');
} else {
console.log('Video cannot be decoded');
}