/ src / components / demo / enhanced_fp / audio_codecs_extended_hash.tsx
audio_codecs_extended_hash.tsx
  1  import { md5hex } from "../../../impl/utils";
  2  import Code from "../../Code";
  3  import Output from "../../Output";
  4  
  5  const AudioCodecsExtendedHashDemo = () => {
  6    return (
  7      <div>
  8        <Code
  9          snippet={`
 10  () => {
 11    const AUDIO_EXTRA_CODECS = [
 12      'audio/mp4; codecs="mp4a.40"',
 13      'audio/mp4; codecs="mp4a.40.1"',
 14      'audio/mp4; codecs="mp4a.40.2"',
 15      'audio/mp4; codecs="mp4a.40.3"',
 16      'audio/mp4; codecs="mp4a.40.4"',
 17      'audio/mp4; codecs="mp4a.40.5"',
 18      'audio/mp4; codecs="mp4a.40.6"',
 19      'audio/mp4; codecs="mp4a.40.7"',
 20      'audio/mp4; codecs="mp4a.40.8"',
 21      'audio/mp4; codecs="mp4a.40.9"',
 22      'audio/mp4; codecs="mp4a.40.12"',
 23      'audio/mp4; codecs="mp4a.40.13"',
 24      'audio/mp4; codecs="mp4a.40.14"',
 25      'audio/mp4; codecs="mp4a.40.15"',
 26      'audio/mp4; codecs="mp4a.40.16"',
 27      'audio/mp4; codecs="mp4a.40.17"',
 28      'audio/mp4; codecs="mp4a.40.19"',
 29      'audio/mp4; codecs="mp4a.40.20"',
 30      'audio/mp4; codecs="mp4a.40.21"',
 31      'audio/mp4; codecs="mp4a.40.22"',
 32      'audio/mp4; codecs="mp4a.40.23"',
 33      'audio/mp4; codecs="mp4a.40.24"',
 34      'audio/mp4; codecs="mp4a.40.25"',
 35      'audio/mp4; codecs="mp4a.40.26"',
 36      'audio/mp4; codecs="mp4a.40.27"',
 37      'audio/mp4; codecs="mp4a.40.28"',
 38      'audio/mp4; codecs="mp4a.40.29"',
 39      'audio/mp4; codecs="mp4a.40.32"',
 40      'audio/mp4; codecs="mp4a.40.33"',
 41      'audio/mp4; codecs="mp4a.40.34"',
 42      'audio/mp4; codecs="mp4a.40.35"',
 43      'audio/mp4; codecs="mp4a.40.36"',
 44      'audio/mp4; codecs="mp4a.66"',
 45      'audio/mp4; codecs="mp4a.67"',
 46      'audio/mp4; codecs="mp4a.68"',
 47      'audio/mp4; codecs="mp4a.69"',
 48      'audio/mp4; codecs="mp4a.6B"',
 49      'audio/mp4; codecs="mp3"',
 50      'audio/mp4; codecs="flac"',
 51      'audio/mp4; codecs="bogus"',
 52      'audio/mp4; codecs="aac"',
 53      'audio/mp4; codecs="ac3"',
 54      'audio/mp4; codecs="A52"',
 55      'audio/mpeg; codecs="mp3"',
 56      'audio/wav; codecs="0"',
 57      'audio/wav; codecs="2"',
 58      'audio/wave; codecs="0"',
 59      'audio/wave; codecs="1"',
 60      'audio/wave; codecs="2"',
 61      'audio/x-wav; codecs="0"',
 62      'audio/x-wav; codecs="1"',
 63      'audio/x-wav; codecs="2"',
 64      'audio/x-pn-wav; codecs="0"',
 65      'audio/x-pn-wav; codecs="1"',
 66      'audio/x-pn-wav; codecs="2"',
 67    ];
 68  
 69    const audio = document.createElement("audio");
 70    const codecs = {};
 71  
 72    AUDIO_EXTRA_CODECS.forEach((codec) => {
 73      let canPlay = null;
 74      let mediaSource = null;
 75  
 76      if (audio.canPlayType) canPlay = audio.canPlayType(codec);
 77  
 78      if (window.MediaSource && window.MediaSource.isTypeSupported)
 79        mediaSource = window.MediaSource.isTypeSupported(codec);
 80  
 81      codecs[codec] = {
 82        canPlay: canPlay,
 83        mediaSource: mediaSource,
 84      };
 85    });
 86  
 87    return md5hex(JSON.stringify(codecs));
 88  }
 89          `.trim()}
 90        />
 91  
 92        <Output
 93          generator={() => {
 94            const AUDIO_EXTRA_CODECS = [
 95              'audio/mp4; codecs="mp4a.40"',
 96              'audio/mp4; codecs="mp4a.40.1"',
 97              'audio/mp4; codecs="mp4a.40.2"',
 98              'audio/mp4; codecs="mp4a.40.3"',
 99              'audio/mp4; codecs="mp4a.40.4"',
100              'audio/mp4; codecs="mp4a.40.5"',
101              'audio/mp4; codecs="mp4a.40.6"',
102              'audio/mp4; codecs="mp4a.40.7"',
103              'audio/mp4; codecs="mp4a.40.8"',
104              'audio/mp4; codecs="mp4a.40.9"',
105              'audio/mp4; codecs="mp4a.40.12"',
106              'audio/mp4; codecs="mp4a.40.13"',
107              'audio/mp4; codecs="mp4a.40.14"',
108              'audio/mp4; codecs="mp4a.40.15"',
109              'audio/mp4; codecs="mp4a.40.16"',
110              'audio/mp4; codecs="mp4a.40.17"',
111              'audio/mp4; codecs="mp4a.40.19"',
112              'audio/mp4; codecs="mp4a.40.20"',
113              'audio/mp4; codecs="mp4a.40.21"',
114              'audio/mp4; codecs="mp4a.40.22"',
115              'audio/mp4; codecs="mp4a.40.23"',
116              'audio/mp4; codecs="mp4a.40.24"',
117              'audio/mp4; codecs="mp4a.40.25"',
118              'audio/mp4; codecs="mp4a.40.26"',
119              'audio/mp4; codecs="mp4a.40.27"',
120              'audio/mp4; codecs="mp4a.40.28"',
121              'audio/mp4; codecs="mp4a.40.29"',
122              'audio/mp4; codecs="mp4a.40.32"',
123              'audio/mp4; codecs="mp4a.40.33"',
124              'audio/mp4; codecs="mp4a.40.34"',
125              'audio/mp4; codecs="mp4a.40.35"',
126              'audio/mp4; codecs="mp4a.40.36"',
127              'audio/mp4; codecs="mp4a.66"',
128              'audio/mp4; codecs="mp4a.67"',
129              'audio/mp4; codecs="mp4a.68"',
130              'audio/mp4; codecs="mp4a.69"',
131              'audio/mp4; codecs="mp4a.6B"',
132              'audio/mp4; codecs="mp3"',
133              'audio/mp4; codecs="flac"',
134              'audio/mp4; codecs="bogus"',
135              'audio/mp4; codecs="aac"',
136              'audio/mp4; codecs="ac3"',
137              'audio/mp4; codecs="A52"',
138              'audio/mpeg; codecs="mp3"',
139              'audio/wav; codecs="0"',
140              'audio/wav; codecs="2"',
141              'audio/wave; codecs="0"',
142              'audio/wave; codecs="1"',
143              'audio/wave; codecs="2"',
144              'audio/x-wav; codecs="0"',
145              'audio/x-wav; codecs="1"',
146              'audio/x-wav; codecs="2"',
147              'audio/x-pn-wav; codecs="0"',
148              'audio/x-pn-wav; codecs="1"',
149              'audio/x-pn-wav; codecs="2"',
150            ];
151  
152            const audio = document.createElement("audio");
153            const codecs = {};
154  
155            AUDIO_EXTRA_CODECS.forEach((codec) => {
156              let canPlay = null;
157              let mediaSource = null;
158  
159              if (audio.canPlayType) canPlay = audio.canPlayType(codec);
160  
161              if (window.MediaSource && window.MediaSource.isTypeSupported)
162                mediaSource = window.MediaSource.isTypeSupported(codec);
163  
164              // @ts-expect-error
165              codecs[codec] = {
166                canPlay: canPlay,
167                mediaSource: mediaSource,
168              };
169            });
170  
171            return md5hex(JSON.stringify(codecs));
172          }}
173        />
174      </div>
175    );
176  };
177  
178  export default AudioCodecsExtendedHashDemo;