Следвах този пример за конвертиране на необработени аудио данни, идващи от AudioRecord в mp3, и това се случи успешно, ако съхранете тези данни във файл mp3 файл и пуснете с музикален плейър, след което се чува.
Сега въпросът ми е, че вместо да съхранявам mp3 данни във файл, трябва да го възпроизведа с AudioTrack, данните идват от медийния сървър Red5 като поток на живо, но проблемът е, че AudioTrack може да възпроизвежда само PCM данни, така че мога да чуя само шум от моите данни.
Сега използвам JLayer за моята задача.
Моят код е както следва.
int readresult = recorder.read(audioData, 0, recorderBufSize);
int encResult = SimpleLame.encode(audioData,audioData, readresult, mp3buffer);
и тези mp3buffer данни се изпращат до друг потребител чрез поток Red5.
данните, получени от друг потребител, са под формата на поток, така че за възпроизвеждането им е кодът
Bitstream bitstream = new Bitstream(data.read());
Decoder decoder = new Decoder();
Header frameHeader = bitstream.readFrame();
SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream);
short[] pcm = output.getBuffer();
player.write(pcm, 0, pcm.length);
Но моят код замръзва в bitstream.readFrame след 2-3 секунди, също така не се произвежда звук преди това.
Някакво предположение какъв ще е проблемът? Всяко предложение се оценява.
Забележка: Не е необходимо да съхранявам mp3 данните, така че не мога да използвам MediaPlayer, тъй като изисква файл или файлов дескриптор.
AudioRecord
ви дава PCM данни, аAudioTrack
възпроизвежда PCM данни. Така че, ако не е необходимо да запазвате аудиото във файл, защо го кодирате в mp3? (дори ако трябва да го кодирате в mp3 по някаква причина, пак можете да вземете същите PCM данни, които подавате към енкодера, и да ги запишете вAudioTrack
). - person Michael   schedule 21.01.2014