src/utils/codecs.ts
- // from http://mp4ra.org/codecs.html
- const sampleEntryCodesISO = {
- audio: {
- a3ds: true,
- 'ac-3': true,
- 'ac-4': true,
- alac: true,
- alaw: true,
- dra1: true,
- 'dts+': true,
- 'dts-': true,
- dtsc: true,
- dtse: true,
- dtsh: true,
- 'ec-3': true,
- enca: true,
- g719: true,
- g726: true,
- m4ae: true,
- mha1: true,
- mha2: true,
- mhm1: true,
- mhm2: true,
- mlpa: true,
- mp4a: true,
- 'raw ': true,
- Opus: true,
- samr: true,
- sawb: true,
- sawp: true,
- sevc: true,
- sqcp: true,
- ssmv: true,
- twos: true,
- ulaw: true,
- },
- video: {
- avc1: true,
- avc2: true,
- avc3: true,
- avc4: true,
- avcp: true,
- drac: true,
- dvav: true,
- dvhe: true,
- encv: true,
- hev1: true,
- hvc1: true,
- mjp2: true,
- mp4v: true,
- mvc1: true,
- mvc2: true,
- mvc3: true,
- mvc4: true,
- resv: true,
- rv60: true,
- s263: true,
- svc1: true,
- svc2: true,
- 'vc-1': true,
- vp08: true,
- vp09: true,
- },
- text: {
- stpp: true,
- wvtt: true,
- },
- };
-
- export type CodecType = 'audio' | 'video';
-
- export function isCodecType(codec: string, type: CodecType): boolean {
- const typeCodes = sampleEntryCodesISO[type];
- return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;
- }
-
- export function isCodecSupportedInMp4(codec: string, type: CodecType): boolean {
- return MediaSource.isTypeSupported(
- `${type || 'video'}/mp4;codecs="${codec}"`
- );
- }