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);
    }
}

在這裏插入圖片描述

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