// 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 };