Android下的MediaRecorder录制基本使用


今天是自己课程知识的小share吧,喜欢的话给个大大的👍

MediaRecorder

介绍

主要方法

  • void prepar():准备录制
  • void start():开始录制
  • void stop():停止录制
  • void reset():重置MediaRecorder
  • void release():释放MediaRecorder占用的资源
  • void setAudioEncoder(int):设置音频记录的编码格式
  • void setAudioSource(int):设置音频记录的音频源
  • void setOutoutFormat(int):设置记录的媒体文件的输出转换格式
  • void setOutputFile(String):媒体文件输出路径

编码格式以及输出格式

编码格式

ACC、ACC-ELD、AMR_NB、AMR_WB、DEFAULT、HE_AAC、OPUS、VORBIS

输出格式

AAC_ADTS、AMR_NB、AMR_WB、DEFAULT、MPEG_2_TS、MPEG_4、OGG、THREE_GPP、WEBM

生命周期

在这里插入图片描述

简要实验步骤(自做)

在这里插入图片描述

核心代码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById();
        requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}
                , 0x111);

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 0x111
                && grantResults.length == 3
                && grantResults[0] == PackageManager.PERMISSION_GRANTED
                && grantResults[1] == PackageManager.PERMISSION_GRANTED
                && grantResults[2] == PackageManager.PERMISSION_GRANTED) {

            View.OnClickListener listener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    switch (v.getId()) {
                        case R.id.record:
                            if (!isRecording) {


                                recordFile = new File(Environment.getExternalStorageDirectory() + "/record.mp4");

                                mediaRecorder = new MediaRecorder();
                                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                                mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

                                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
                                //设置编码
                                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                                mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

                                mediaRecorder.setOutputFile(recordFile.getAbsolutePath());

                                mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());

                                try {
                                    mediaRecorder.prepare();
                                    mediaRecorder.start();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }

                                isRecording = true;
                                recordBtn.setEnabled(false);
                                stopBtn.setEnabled(true);
                            }
                            break;
                        case R.id.stop:
                            if (isRecording) {
                                mediaRecorder.stop();
                                mediaRecorder.release();
                                mediaRecorder = null;
                                recordBtn.setEnabled(true);
                                stopBtn.setEnabled(false);
                                isRecording = false;
                            }
                            break;
                    }
                }

            };
            recordBtn.setOnClickListener(listener);
            stopBtn.setOnClickListener(listener);

        }

    }

    private void findViewById() {
        surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
        surfaceView.getHolder().setKeepScreenOn(true);
        recordBtn = (ImageButton) findViewById(R.id.record);
        stopBtn = (ImageButton) findViewById(R.id.stop);
    }
}

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章