首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 簡易錄像機實現:MediaRecorder 核心流程與代碼示例

     編輯:程式設計綜合問答

核心類:MediaRecorder

Android 錄影主要使用 android.media.MediaRecorder,配合 SurfaceView/TextureView 預覽。

關鍵步驟

  1. 權限聲明 (AndroidManifest.xml):
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-feature android:name="android.hardware.camera" android:required="true" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    
  2. 佈局預覽:
    <TextureView
        android:id="@+id/textureView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
  3. 錄製邏輯(參考 CSDN 完整教程):
    private MediaRecorder mediaRecorder;
    private TextureView textureView;
    private String outputPath;
    
    private void startRecording() {
        mediaRecorder = new MediaRecorder();
        // 設置音視頻源
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
        // 設置輸出格式
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        // 設置編碼器
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        // 設置輸出文件
        mediaRecorder.setOutputFile(outputPath);
        // 設置預覽 Surface
        mediaRecorder.setVideoSize(1920, 1080);
        mediaRecorder.setVideoFrameRate(30);
        mediaRecorder.setVideoEncodingBitRate(8000000);
        // 關鍵:綁定 TextureView 的 Surface
        Surface surface = textureView.getSurfaceTexture();
        mediaRecorder.setInputSurface(surface);
        try {
            mediaRecorder.prepare();
            mediaRecorder.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private void stopRecording() {
        if (mediaRecorder != null) {
            mediaRecorder.stop();
            mediaRecorder.reset();
            mediaRecorder.release();
            mediaRecorder = null;
        }
    }
    
  4. 生命周期管理:在 onResume 打開相機會話,onPause 釋放 MediaRecorder 與 CameraDevice。

進階注意點

  • Camera2 API:Android 5.0+ 推薦使用 CameraDevice + CaptureRequest 替代舊 Camera,控制更精細。
  • 存儲路徑:Android 10+ 需使用 MediaStore 或 getExternalFilesDir(),避免直接訪問公共目錄。
  • 錯誤處理:監聽 MediaRecorder.OnErrorListener、OnInfoListener 處理存儲滿、權限撤銷等異常。

完整項目代碼請參考提供的 CSDN 鏈接,包含 UI 控制、暫停/繼續、濾鏡等擴展功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved