android - 如何在视频系统中捕获和编码音频_Android

标签 android audio video android-mediacodec mediamuxer

我正在尝试在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/

相关文章:

javascript - 不断将数据(blob)加载到对node.js的POST请求中

Android - 如何使用 OkHTTP 分块上传视频?

javascript - 在 HTML 视频标签中流式传输实时视频流量

基于当前壁纸的安卓动态壁纸

android - SQLiteLog :(1) no such table: tableName. db (sqlite with android)

Javascript 音频(可能是网络音频)设置准确时间

javascript - nodeJS 视频流,当用户断开连接或移动到不同页面时连接不会关闭

android - 包装内容不起作用

android - ListView 中的 EditText 失去焦点

c++ - Qt - 重新实现 QIODevice 以实时听到我自己的声音