How to capture and encode audio in a video system_Android
我正在尝试在 android 中构建一个开源视频系统,因为我们无法访问封闭系统中的数据。在这个系统中,我们可以修改摄像头捕获的原始数据。
我使用 MediaCodec 和 MediaMux 来完成视频数据编码和复用工作,而且效果很好。但我不知道音频部分。我使用 onFramePreview 来获取每一帧并逐帧进行编码/混合工作。但是我如何同时进行音频录制(我的意思是逐帧捕获音频,对其进行编码并将数据发送到 MediaMux)。
我做了一些研究。似乎我们使用audiorecorder来获取音频的原始数据。但是audiorecorder做一个持续的录音工作,我不认为它可以工作。
谁能给我一个提示?谢谢!
像这样创建audioRecorder:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 } |
为编码和复用准备和发送数据,像这样是单独的线程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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) { // } } } |