MediaCodec、AudioRecord 硬件编码录制视频

关于 MediaCodec 和 AudioRecord 的使用方法介绍,可以看其它博客:
MediaCodec 实现硬件解码
使用 AudioRecord 录制 PCM、WAV 文件,AudioTrack 播放 PCM 文件

基本步骤为:
1) Camera、AudioRecord 获取原始图像、声音数据
2) MediaCodec 编码
3) MediaMuxer 合成 MP4 文件

获取原始图像、声音数据

获取图像数据使用 Camera 实现,首先打开 Camera:

    mCamera = CameraHelper.openCamera();
    if (mCamera == null) {
       finish();
    }

    Camera.Parameters parameters = mCamera.getParameters();
    mPreviewSize = CameraHelper.chooseCameraSize(parameters.getSupportedPreviewSizes(), width, height);
    parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
    mPrevieweFormat = parameters.getPreviewFormat();
    mCamera.setParameters(parameters);
    mCamera.setDisplayOrientation(90);
    mCamera.setPreviewCallback(this);
    try {
       mCamera.setPreviewDisplay(holder);
       mCamera.startPreview();
    } catch (IOException e) {
       Log.e(TAG, "openCamera preview failed: " + e.getLocalizedMessage());
       ToastHelper.show("相机预览开启失败!");
       releaseCamera();
       finish();
    }

onPreviewFrame 就是获取原始图像数据的地方:

    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        if (mIsRecording) {
            mRecorder.recordImage(data);
        }
    }

AudioRecord 录制音频:

    private class AudioRecordRunnable implements Runnable {
   

        private AudioRecord mAudioRecord;
        private int mBufferSize;

        private AudioRecordRunnable() {
            try {
                mChannels = 1;
                mBufferSize = AudioRecord.getMinBufferSize(mSampleRate, AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
                mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, mSampleRate,
                        AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, mBufferSize);
            } catch (Exception e) {
                Log.e(TAG, "init AudioRecord exception: " + e.getLocalizedMessage());
            }

            if (mAudioRecord == null || mAudioRecord.getState() != AudioRecord.STATE_I
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值