Home Reference Source

src/utils/codecs.ts

  1. // from http://mp4ra.org/codecs.html
  2. const sampleEntryCodesISO = {
  3. audio: {
  4. 'a3ds': true,
  5. 'ac-3': true,
  6. 'ac-4': true,
  7. 'alac': true,
  8. 'alaw': true,
  9. 'dra1': true,
  10. 'dts+': true,
  11. 'dts-': true,
  12. 'dtsc': true,
  13. 'dtse': true,
  14. 'dtsh': true,
  15. 'ec-3': true,
  16. 'enca': true,
  17. 'g719': true,
  18. 'g726': true,
  19. 'm4ae': true,
  20. 'mha1': true,
  21. 'mha2': true,
  22. 'mhm1': true,
  23. 'mhm2': true,
  24. 'mlpa': true,
  25. 'mp4a': true,
  26. 'raw ': true,
  27. 'Opus': true,
  28. 'samr': true,
  29. 'sawb': true,
  30. 'sawp': true,
  31. 'sevc': true,
  32. 'sqcp': true,
  33. 'ssmv': true,
  34. 'twos': true,
  35. 'ulaw': true
  36. },
  37. video: {
  38. 'avc1': true,
  39. 'avc2': true,
  40. 'avc3': true,
  41. 'avc4': true,
  42. 'avcp': true,
  43. 'drac': true,
  44. 'dvav': true,
  45. 'dvhe': true,
  46. 'encv': true,
  47. 'hev1': true,
  48. 'hvc1': true,
  49. 'mjp2': true,
  50. 'mp4v': true,
  51. 'mvc1': true,
  52. 'mvc2': true,
  53. 'mvc3': true,
  54. 'mvc4': true,
  55. 'resv': true,
  56. 'rv60': true,
  57. 's263': true,
  58. 'svc1': true,
  59. 'svc2': true,
  60. 'vc-1': true,
  61. 'vp08': true,
  62. 'vp09': true
  63. }
  64. };
  65.  
  66. export type CodecType = 'audio' | 'video';
  67.  
  68. function isCodecType (codec: string, type: CodecType): boolean {
  69. const typeCodes = sampleEntryCodesISO[type];
  70. return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;
  71. }
  72.  
  73. function isCodecSupportedInMp4 (codec: string, type: CodecType): boolean {
  74. return MediaSource.isTypeSupported(`${type || 'video'}/mp4;codecs="${codec}"`);
  75. }
  76.  
  77. export { isCodecType, isCodecSupportedInMp4 };