如何在视频system_Android中捕获和编码音频

时间:2014-02-23 15:35:21

标签: android audio video mediacodec mediamuxer

我正在尝试在android中构建一个开源视频系统,因为我们无法访问封闭系统中的数据。在这个系统中,我们可以修改摄像头捕获的原始数据。

我使用MediaCodec和MediaMux进行视频数据编码和多路复用作业,这是有效的。但我不知道音频部分。我使用onFramePreview来获取每个帧并按帧进行编码/多路复用。但是我如何同时进行录音(我的意思是逐帧捕捉音频,编码并将数据发送到MediaMux)。

我做了一些研究。我们似乎使用audiorecorder来获取音频的原始数据。但是,audiorecorder会做一个不断的录音工作,我觉得它不起作用。

任何人都可以给我一个提示吗?谢谢!

1 个答案:

答案 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) {        
                //  
        }
    }
}