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. av01: true,
  44. drac: true,
  45. dvav: true,
  46. dvhe: true,
  47. encv: true,
  48. hev1: true,
  49. hvc1: true,
  50. mjp2: true,
  51. mp4v: true,
  52. mvc1: true,
  53. mvc2: true,
  54. mvc3: true,
  55. mvc4: true,
  56. resv: true,
  57. rv60: true,
  58. s263: true,
  59. svc1: true,
  60. svc2: true,
  61. 'vc-1': true,
  62. vp08: true,
  63. vp09: true,
  64. },
  65. text: {
  66. stpp: true,
  67. wvtt: true,
  68. },
  69. };
  70.  
  71. export type CodecType = 'audio' | 'video';
  72.  
  73. export function isCodecType(codec: string, type: CodecType): boolean {
  74. const typeCodes = sampleEntryCodesISO[type];
  75. return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;
  76. }
  77.  
  78. export function isCodecSupportedInMp4(codec: string, type: CodecType): boolean {
  79. return MediaSource.isTypeSupported(
  80. `${type || 'video'}/mp4;codecs="${codec}"`
  81. );
  82. }