我正在尝试在android中构建开源视频系统,因为我们无法访问封闭系统中的数据。在这个系统中,我们可以修改相机捕获的原始数据。
我使用MediaCodec和MediaMux进行视频数据编码和混合工作,并且可以正常工作。但是我对音频部分一无所知。我使用onFramePreview来获取每个帧并按帧进行编码/混合工作。但是如何同时进行音频记录(我的意思是按帧捕获音频,对其进行编码,然后将数据发送到MediaMux)。
我做了一些研究。似乎我们使用了audiorecorder来获取音频的原始数据。但是Audiorecorder会持续进行录音,我认为它无法正常工作。
谁能给我提示吗?谢谢!
最佳答案
像这样创建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) {
//
}
}
}
关于android - 如何在视频系统中捕获和编码音频_Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970314/