利用Android MediaRecorder實現音視頻錄製功能

一、介紹

Android系統提供了多種方式實現音視頻錄製,其中比較常用的一種是使用MediaRecorder類。

MediaRecorder類提供了對音視頻的配置以及錄製功能的實現,可以通過設置各種參數來滿足不同的需求。

二、實現步驟

1、準備工作

在AndroidManifest.xml文件中添加錄音和攝像頭許可權。

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.CAMERA"/>

2、初始化MediaRecorder對象

在需要錄製音視頻的Activity中創建MediaRecorder對象,並設置相關參數。

private MediaRecorder mMediaRecorder;
private void initRecorder() {
    mMediaRecorder = new MediaRecorder();
    //設置音頻來源
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    //設置視頻來源
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    //設置輸出格式
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    //設置音頻編碼格式
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    //設置視頻編碼格式
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    //設置輸出文件路徑
    mMediaRecorder.setOutputFile(getVideoFilePath());
}

3、開始錄製

在需要開始錄製的地方調用MediaRecorder對象的start()方法。

private void startRecording() {
    try {
        mMediaRecorder.prepare();
        mMediaRecorder.start();
        //顯示錄製圖標
        mRecordButton.setImageResource(R.drawable.ic_recording);
        mIsRecording = true;
    } catch (IOException e) {
        e.printStackTrace();
    }
}

4、停止錄製

在需要停止錄製的地方調用MediaRecorder對象的stop()方法,並釋放資源,同時更新UI。

private void stopRecording() {
    mMediaRecorder.stop();
    mMediaRecorder.release();
    mMediaRecorder = null;
    //顯示錄製按鈕
    mRecordButton.setImageResource(R.drawable.ic_record);
    mIsRecording = false;
}

三、實例代碼

public class MainActivity extends AppCompatActivity {
     
    private MediaRecorder mMediaRecorder;
    private boolean mIsRecording = false;
    private Button mRecordButton;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        mRecordButton = findViewById(R.id.record_button);
        mRecordButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mIsRecording) {
                    stopRecording();
                } else {
                    startRecording();
                }
            }
        });
    }
     
    private void initRecorder() {
        mMediaRecorder = new MediaRecorder();
        //設置音頻來源
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        //設置視頻來源
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        //設置輸出格式
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        //設置音頻編碼格式
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        //設置視頻編碼格式
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        //設置輸出文件路徑
        mMediaRecorder.setOutputFile(getVideoFilePath());
    }
     
    private void startRecording() {
        try {
            mMediaRecorder.prepare();
            mMediaRecorder.start();
            //顯示錄製圖標
            mRecordButton.setImageResource(R.drawable.ic_recording);
            mIsRecording = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
     
    private void stopRecording() {
        mMediaRecorder.stop();
        mMediaRecorder.release();
        mMediaRecorder = null;
        //顯示錄製按鈕
        mRecordButton.setImageResource(R.drawable.ic_record);
        mIsRecording = false;
    }
     
    private String getVideoFilePath() {
        File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
        String fileName = "Record_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".mp4";
        return file.getAbsolutePath() + "/" + fileName;
    }
}

四、小結

通過MediaRecorder類的使用,我們可以快速實現Android音視頻錄製功能,並且可以根據需要對錄製參數進行自定義設置。

需要注意的是,在Android 7.0及以上版本中,需要特殊處理錄音許可權。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO_PERMISSION);
    } else {
        initRecorder();
    }
} else {
    initRecorder();
}

如果沒有錄音許可權,則需要申請錄音許可權。

原創文章,作者:FCKT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135345.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FCKT的頭像FCKT
上一篇 2024-10-04 00:12
下一篇 2024-10-04 00:12

相關推薦

  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java和Python哪個功能更好

    對於Java和Python這兩種編程語言,究竟哪一種更好?這個問題並沒有一個簡單的答案。下面我將從多個方面來對Java和Python進行比較,幫助讀者了解它們的優勢和劣勢,以便選擇…

    編程 2025-04-29
  • Python每次運行變數加一:實現計數器功能

    Python編程語言中,每次執行程序都需要定義變數,而在實際開發中常常需要對變數進行計數或者累加操作,這時就需要了解如何在Python中實現計數器功能。本文將從以下幾個方面詳細講解…

    編程 2025-04-28
  • Python strip()函數的功能和用法用法介紹

    Python的strip()函數用於刪除字元串開頭和結尾的空格,包括\n、\t等字元。本篇文章將從用法、功能以及與其他函數的比較等多個方面對strip()函數進行詳細講解。 一、基…

    編程 2025-04-28
  • Android ViewPager和ScrollView滑動衝突問題

    Android開發中,ViewPager和ScrollView是兩個常用的控制項。但是當它們同時使用時,可能會發生滑動衝突的問題。本文將從多個方面介紹解決Android ViewPa…

    編程 2025-04-28
  • Android如何點擊其他區域收起軟鍵盤

    在Android應用中,當輸入框獲取焦點彈出軟鍵盤後,我們希望能夠點擊其他區域使軟鍵盤消失,以提升用戶體驗。本篇文章將說明如何實現這一功能。 一、獲取焦點並顯示軟鍵盤 在Andro…

    編程 2025-04-28
  • Webrtc音視頻開發React+Flutter+Go實戰PDF

    本文將從多個方面介紹如何使用React、Flutter和Go來進行Webrtc音視頻開發,並提供相應的代碼示例。 一、Webrtc音視頻開發介紹 Webrtc是Google開發的一…

    編程 2025-04-27
  • 全能的wpitl實現各種功能的代碼示例

    wpitl是一款強大、靈活、易於使用的編程工具,可以實現各種功能。下面將從多個方面對wpitl進行詳細的闡述,每個方面都會列舉2~3個代碼示例。 一、文件操作 1、讀取文件 fil…

    編程 2025-04-27
  • Android Studio HUD 實現指南

    本文將會以實例來詳細闡述如何在 Android Studio 中使用 HUD 功能實現菊花等待指示器的效果。 一、引入依賴庫 首先,我們需要在 build.gradle 文件中引入…

    編程 2025-04-27
  • Android和Vue3混合開發方案

    本文將介紹如何將Android和Vue3結合起來進行混合開發,以及其中的優勢和注意事項。 一、環境搭建 在進行混合開發之前,需要搭建好相應的開發環境。首先需要安裝 Android …

    編程 2025-04-27

發表回復

登錄後才能評論