如何将本地的MP3档案编码成AAC以完成直播?

x22819 发布于 2014/03/20 12:03
阅读 495
收藏 0

我正在实作WIFI-Live-audio-streaming,流程是将本地端的mp3音乐档编码AAC -> 网络发送

参考了Spydroid的源码,Sptdroid从麦克获得原始数据->编码->网络发送

这几天尝试把spydroid发送的麦克获数据换成本地的音乐数据,但不太知道如何转换

protected void encodeWithMediaCodec() throws IOException {

final int bufferSize = AudioRecord.getMinBufferSize(mQuality.samplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT)*2;

((AACLATMPacketizer)mPacketizer).setSamplingRate(mQuality.samplingRate);

long file_size = 0;
int bytes_read = 0;
string path = "/storage/sdcard1/music/test.mp3"
File audio = new File(path);
FileInputStream audio_stream = new FileInputStream(audio);
file_size = audio.length();
byte[] buf = new byte[mBuffer_Size];

mMediaCodec = MediaCodec.createEncoderByType("audio/mp4a-latm");
MediaFormat format = new MediaFormat();
format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
format.setInteger(MediaFormat.KEY_BIT_RATE, mQuality.bitRate);
format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
format.setInteger(MediaFormat.KEY_SAMPLE_RATE, mQuality.samplingRate);
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, mBuffer_Size);
mMediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mMediaCodec.start();

final MediaCodecInputStream inputStream = new MediaCodecInputStream(mMediaCodec);
final ByteBuffer[] inputBuffers = mMediaCodec.getInputBuffers();


mThread = new Thread(new Runnable() {
@Override
public void run() {
int len = 0, bufferIndex = 0;
try {
while (!Thread.interrupted()) {
bufferIndex = mMediaCodec.dequeueInputBuffer(10000);
if (bufferIndex>=0) {
inputBuffers[bufferIndex].clear();
//mark by ampak
len = (int)audio.length();
int bytes_read = audio_stream.read(buf, 0, mBuffer_Size);
//len = mAudioRecord.read(inputBuffers[bufferIndex], bufferSize);
if (len ==  AudioRecord.ERROR_INVALID_OPERATION || len == AudioRecord.ERROR_BAD_VALUE) {
Log.e(TAG,"An error occured with the AudioRecord API !");
} else {
Log.v(TAG,"Pushing raw audio to the decoder: len="+len+" bs: "+inputBuffers[bufferIndex].capacity());
mMediaCodec.queueInputBuffer(bufferIndex, 0, len, System.nanoTime()/1000, 0);
}
}
}
} catch (RuntimeException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

mThread.start();

// The packetizer encapsulates this stream in an RTP stream and send it over the network
mPacketizer.setDestination(mDestination, mRtpPort, mRtcpPort);
mPacketizer.setInputStream(inputStream);
mPacketizer.start();

mStreaming = true;

}

但目前看起来无法将MP3档案编码成AAC格式,请问有人可以给点建议吗?

加载中
返回顶部
顶部