我已经按照这个示例将来自 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);
但是我的代码在 2-3 秒后冻结在 bitstream.readFrame 处,在此之前也没有发出声音。
任何猜测会是什么问题?任何建议表示赞赏。
注意:我不需要存储 mp3 数据,所以我不能使用 MediaPlayer,因为它需要一个文件或文件描述符。