Skip to content

Commit 787f8b4

Browse files
committed
Fix fourcc generation for a/v codecs with unit test
1 parent 9317cae commit 787f8b4

File tree

4 files changed

+173
-96
lines changed

4 files changed

+173
-96
lines changed

io/src/main/java/org/red5/codec/AudioCodec.java

Lines changed: 95 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import java.util.HashMap;
1212
import 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
*
@@ -19,7 +21,22 @@
1921
*/
2022
public 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

Comments
 (0)