当前位置: 首页 > 工具软件 > JLayer > 使用案例 >

android audiotrack mp3,播放mp3数据压缩由JLayer和Audiotrack latin mp3在android

马淳
2023-12-01

我跟着这个example转换来自AudioRecord原始音频数据为MP3,并且它成功发生,如果我将这个数据存储在一个文件的MP3文件和播放与音乐播放器,然后它是可以听到的。播放mp3数据压缩由JLayer和Audiotrack latin mp3在android

现在我的问题是,而不是将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,因为它需要一个文件或filedescriptor。

+0

'AudioRecord'给你PCM数据,'AudioTrack'播放PCM数据。所以如果你不需要将音频保存到一个文件中,为什么你要对它进行编码? (即使由于某种原因需要对mp3进行编码,仍然可以采用与编码器相同的PCM数据并将其写入'AudioTrack')。 –

+0

原因是我需要通过网络传输数据,普通的PCM数据导致大量的数据发送(每个样本4K)和MP3需要(最多500字节),所以发送者发送MP3数据和接收器接收这个MP3数据连续流。 –

+0

好的,但我以前的评论的最后一部分仍然适用。 –

 类似资料: