我正在尝试在android中构建一个开源视频系统,因为我们无法访问封闭系统中的数据。在这个系统中,我们可以修改摄像头捕获的原始数据。
我使用MediaCodec和MediaMux进行视频数据编码和多路复用作业,这是有效的。但我不知道音频部分。我使用onFramePreview来获取每个帧并按帧进行编码/多路复用。但是我如何同时进行录音(我的意思是逐帧捕捉音频,编码并将数据发送到MediaMux)。
我做了一些研究。我们似乎使用audiorecorder来获取音频的原始数据。但是,audiorecorder会做一个不断的录音工作,我觉得它不起作用。
任何人都可以给我一个提示吗?谢谢!
答案 0 :(得分:1)
像这样创建audioRecorder:
private AudioRecord getRecorderInstance() {
AudioRecord ar = null;
try {
//Get a audiorecord
int N = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);
ar = new AudioRecord(AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, N*10);
}
catch (Exception e) {
}
return ar; //Returns null if mic is unavailable
}
准备并发送编码和多路复用的数据,就像这是单独的线程一样:
public class MicrophoneInput implements Runnable {
@Override
public void run() {
// Buffer for 200 milliseconds of data, e.g. 400 samples at 8kHz.
byte[] buffer200ms = new byte[8000 / 10];
try {
while (recording) {
audioRecorder.read(buffer200ms, 0, buffer200ms.length);
//process buffer i.e send to encoder
//don't forget to set correct timestamps synchronized with video
}
}
catch(Throwable x) {
//
}
}
}