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. text: {
  65. stpp: true,
  66. wvtt: true,
  67. },
  68. };
  69.  
  70. export type CodecType = 'audio' | 'video';
  71.  
  72. export function isCodecType(codec: string, type: CodecType): boolean {
  73. const typeCodes = sampleEntryCodesISO[type];
  74. return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;
  75. }
  76.  
  77. export function isCodecSupportedInMp4(codec: string, type: CodecType): boolean {
  78. return MediaSource.isTypeSupported(
  79. `${type || 'video'}/mp4;codecs="${codec}"`
  80. );
  81. }