0

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

我使用 MediaCodec 和 MediaMux 来完成视频数据编码和复用工作,并且工作正常。但我不知道音频部分。我使用 onFramePreview 来获取每一帧并逐帧进行编码/混合工作。但是我如何同时进行音频录制(我的意思是逐帧捕获音频,对其进行编码并将数据发送到 MediaMux)。

我做了一些研究。似乎我们使用audiorecorder来获取音频的原始数据。但是audiorecorder做一个持续的录音工作,我不认为它可以工作。

谁能给我一个提示?谢谢!

4

1 回答 1

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) {        
                //  
        }
    }
}
于 2014-02-24T13:41:47.427 回答