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
- }
- };
-
- export type CodecType = 'audio' | 'video';
-
- function isCodecType (codec: string, type: CodecType): boolean {
- const typeCodes = sampleEntryCodesISO[type];
- return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;
- }
-
- function isCodecSupportedInMp4 (codec: string, type: CodecType): boolean {
- return MediaSource.isTypeSupported(`${type || 'video'}/mp4;codecs="${codec}"`);
- }
-
- export { isCodecType, isCodecSupportedInMp4 };