1111import java .util .HashMap ;
1212import java .util .Map ;
1313
14+ import org .red5 .io .utils .IOUtils ;
15+
1416/**
1517 * Audio codecs that Red5 supports; which includes some RTMP-E specific codecs.
1618 *
1921 */
2022public enum AudioCodec {
2123
22- PCM ((byte ) 0 ), ADPCM ((byte ) 0x01 ), // pcm / adpcm
24+ PCM ((byte ) 0 ) {
25+
26+ @ Override
27+ public String getMimeType () {
28+ return "raw " ;
29+ }
30+
31+ }, // pcm raw
32+ ADPCM ((byte ) 0x01 ) {
33+
34+ @ Override
35+ public String getMimeType () {
36+ return "g722" ; // XXX(paul) not sure if this is correct
37+ }
38+
39+ }, // adpcm
2340 MP3 ((byte ) 0x02 ) {
2441
2542 @ Override
@@ -28,19 +45,52 @@ public IAudioStreamCodec newInstance() {
2845 }
2946
3047 @ Override
31- public int getFourcc () {
32- return 778924083 ; // MP3 / .mp3
48+ public String getMimeType () {
49+ return " .mp3" ;
3350 }
3451
52+ }, // MP3 / .mp3 / mp3
53+ PCM_LE ((byte ) 0x03 ), // pcm le
54+ NELLY_MOSER_16K ((byte ) 0x04 ) {
55+
3556 @ Override
3657 public String getMimeType () {
37- return ".mp3 " ;
58+ return "NELL " ;
3859 }
3960
40- }, // mp3
41- PCM_LE ((byte ) 0x03 ), // pcm le
42- NELLY_MOSER_16K ((byte ) 0x04 ), NELLY_MOSER_8K ((byte ) 0x05 ), NELLY_MOSER ((byte ) 0x06 ), // nelly moser legacy
43- PCM_ALAW ((byte ) 0x07 ), PCM_MULAW ((byte ) 0x08 ), // pcm alaw / mulaw
61+ },
62+ NELLY_MOSER_8K ((byte ) 0x05 ) {
63+
64+ @ Override
65+ public String getMimeType () {
66+ return "NELL" ;
67+ }
68+
69+ },
70+ NELLY_MOSER ((byte ) 0x06 ) {
71+
72+ @ Override
73+ public String getMimeType () {
74+ return "NELL" ;
75+ }
76+
77+ }, // nelly moser legacy
78+ PCM_ALAW ((byte ) 0x07 ) {
79+
80+ @ Override
81+ public String getMimeType () {
82+ return "alaw" ;
83+ }
84+
85+ }, // pcm alaw
86+ PCM_MULAW ((byte ) 0x08 ) {
87+
88+ @ Override
89+ public String getMimeType () {
90+ return "ulaw" ;
91+ }
92+
93+ }, // pcm mulaw
4494 ExHeader ((byte ) 0x09 ) {
4595
4696 @ Override
@@ -66,17 +116,12 @@ public IAudioStreamCodec newInstance() {
66116 return new AACAudio ();
67117 }
68118
69- @ Override
70- public int getFourcc () {
71- return 1836069985 ; // AAC / mp4a
72- }
73-
74119 @ Override
75120 public String getMimeType () {
76121 return "mp4a" ;
77122 }
78123
79- }, // advanced audio codec
124+ }, // AAC / mp4a / advanced audio codec
80125 SPEEX ((byte ) 0x0b ) {
81126
82127 @ Override
@@ -85,17 +130,19 @@ public IAudioStreamCodec newInstance() {
85130 }
86131
87132 @ Override
88- public int getFourcc () {
89- return 1936750624 ; // Speex / "spx "
133+ public String getMimeType () {
134+ return "spx " ;
90135 }
91136
137+ }, // Speex / "spx " / speex
138+ MP2 ((byte ) 0x0c ) {
139+
92140 @ Override
93141 public String getMimeType () {
94- return "spx " ;
142+ return "mp2a " ;
95143 }
96144
97- }, // speex
98- MP2 ((byte ) 0x0c ), // mpeg2 audio
145+ }, // MP2 / mp2a / mpeg2 audio
99146 OPUS ((byte ) 0x0d ) {
100147
101148 @ Override
@@ -104,19 +151,38 @@ public IAudioStreamCodec newInstance() {
104151 }
105152
106153 @ Override
107- public int getFourcc () {
108- return 1332770163 ; // Opus
154+ public String getMimeType () {
155+ return "Opus" ;
156+ }
157+
158+ }, // Opus / opus
159+ MP3_8K ((byte ) 0x0e ) {
160+
161+ @ Override
162+ public IAudioStreamCodec newInstance () {
163+ return new MP3Audio ();
109164 }
110165
111166 @ Override
112167 public String getMimeType () {
113- return "Opus " ;
168+ return ".mp3 " ;
114169 }
115170
116- }, // opus
117- MP3_8K ((byte ) 0x0e ), // mp3 8khz
171+ }, // mp3 8khz
118172 //DEVICE_SPECIFIC((byte) 0x0f), // device specific (reserved)
119- L16 ((byte ) 0x0f ), // L16 audio / XXX(paul) update logic that used 0x09 previously for L16
173+ L16 ((byte ) 0x0f ) {
174+
175+ @ Override
176+ public int getFourcc () {
177+ return 15 ;
178+ }
179+
180+ @ Override
181+ public String getMimeType () {
182+ return "L16 " ;
183+ }
184+
185+ }, // L16 audio / XXX(paul) update logic that used 0x09 previously for L16
120186 // RTMP-E specific that weren't already added previously
121187 AC3 ((byte ) 0x10 ) {
122188
@@ -125,53 +191,38 @@ public IAudioStreamCodec newInstance() {
125191 return new AC3Audio ();
126192 }
127193
128- @ Override
129- public int getFourcc () {
130- return 1633889587 ; // AC3 / ac-3
131- }
132-
133194 @ Override
134195 public String getMimeType () {
135196 return "ac-3" ;
136197 }
137198
138- }, // ac3
199+ }, // AC3 / ac-3 / ac3
139200 EAC3 ((byte ) 0x11 ) {
140201
141202 @ Override
142203 public IAudioStreamCodec newInstance () {
143204 return new EAC3Audio ();
144205 }
145206
146- @ Override
147- public int getFourcc () {
148- return 1700998451 ; // EAC3 / ec-3
149- }
150-
151207 @ Override
152208 public String getMimeType () {
153209 return "ec-3" ;
154210 }
155211
156- }, // eac3
212+ }, // EAC3 / ec-3 / eac3
157213 FLAC ((byte ) 0x12 ) {
158214
159215 @ Override
160216 public IAudioStreamCodec newInstance () {
161217 return new FLACAudio ();
162218 }
163219
164- @ Override
165- public int getFourcc () {
166- return 1716281667 ; // FLAC / fLaC
167- }
168-
169220 @ Override
170221 public String getMimeType () {
171222 return "fLaC" ;
172223 }
173224
174- }; // flac
225+ }; // FLAC / fLaC / flac
175226
176227 /**
177228 * Codecs which have private / config data or type identifiers included.
@@ -194,6 +245,7 @@ public String getMimeType() {
194245
195246 private AudioCodec (byte id ) {
196247 this .id = id ;
248+ this .fourcc = IOUtils .makeFourcc (getMimeType ());
197249 }
198250
199251 /**
0 commit comments