一、介紹
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