* Create and return new audio codec applicable for byte buffer data
* @param data Byte buffer data
* @return audio codec
*/
public static IAudioStreamCodec getAudioCodec(IoBuffer data) {
IAudioStreamCodec result = null;
try {
//get the codec identifying byte
int codecId = (data.get() & 0xf0) >> 4;
switch (codecId) {
case 10: //aac
result = (IAudioStreamCodec) Class.forName("org.red5.codec.AACAudio").newInstance();
break;
// TODO add SPEEX support?
}
data.rewind();
} catch (Exception ex) {
log.error("Error creating codec instance", ex);
}
//if codec is not found do the old-style loop
if (result == null) {
for (IAudioStreamCodec storedCodec: codecs) {
IAudioStreamCodec codec;
// XXX: this is a bit of a hack to create new instances of the
// configured audio codec for each stream
try {
codec = storedCodec.getClass().newInstance();
} catch (Exception e) {
log.error("Could not create audio codec instance", e);
continue;
}
if (codec.canHandleData(data)) {
result = codec;
break;
}
}
}