一、MediaRecorder 簡介
Android MediaRecorder 是一個提供基於音頻和視頻錄製功能的 API 類。MediaRecorder 的調用順序和生命周期方法比較多且複雜,調用錯誤或使用不當容易導致無法錄製或錄製的媒體文件損壞。而使用 MediaRecorder 的前提是具備合適的許可權,需要在 AndroidManifest.xml 文件中申請。
二、準備錄製
使用 MediaRecorder 要先準備要錄製的相關配置,例如文件路徑和名稱,音視頻編碼的格式,輸出的多媒體文件類型等等。以下是一個常見的初始化 MediaRecorder 的示例代碼:
private MediaRecorder prepareMediaRecorder() throws IOException {
MediaRecorder recorder = new MediaRecorder();
// 設置音頻源為麥克風
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 設置視頻源為攝像頭
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// 設置輸出文件的格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// 設置音頻編碼格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
// 設置視頻編碼格式
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
// 設置輸出文件的路徑,這裡是在外部私有存儲空間的應用目錄下新建一個文件夾進行存儲
File mediaFile = new File(getExternalFilesDir(null), "/video/test.mp4");
recorder.setOutputFile(mediaFile.getAbsolutePath());
// 設置預覽界面
recorder.setPreviewDisplay(mSurfaceHolder.getSurface());
// 準備開始錄製
recorder.prepare();
return recorder;
}
三、開始和停止錄製
MediaRecorder 開始和停止錄製的方法都圍繞著 start() 和 stop() 方法展開。在錄製時需要注意控制錄製時間和媒體文件的大小,結束錄製方法需要在錄製停止後進行資源的釋放。以下是一個常見的開始和停止 MediaRecorder 的示例代碼:
// 開始錄製
private void startRecording() {
try {
mMediaRecorder = prepareMediaRecorder();
mMediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
// 停止錄製
private void stopRecording() {
if (mMediaRecorder != null) {
mMediaRecorder.stop();
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
}
}
四、控制錄製過程
除了開始和停止錄製外,MediaRecorder 還支持在錄製過程中進行不同的控制,例如暫停和恢復錄製等。以下是一個常見的控制錄製過程的示例代碼:
// 暫停錄製
private void pauseRecording() {
if (mMediaRecorder != null) {
mMediaRecorder.pause();
}
}
// 繼續錄製
private void resumeRecording() {
if (mMediaRecorder != null) {
mMediaRecorder.resume();
}
}
// 更新錄製過程的時間和大小信息
private void updateRecordingInfo() {
long fileSize = new File(mMediaRecorder.getOutputFile().getAbsolutePath()).length();
long duration = (System.currentTimeMillis() - mStartTime) / 1000;
String info = getString(R.string.recording_info, fileSize / 1024, duration);
mRecordingInfo.setText(info);
}
五、處理異常情況
在使用 MediaRecorder 進行錄製過程中,很容易遇到一些異常情況,例如沒有合適的音視頻數據輸入、沒有合適的輸出路徑等等。這時候可以通過 try-catch 語句來捕獲異常,以保證程序的穩定性和健壯性。
private void handleException(Exception e) {
e.printStackTrace();
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
Toast.makeText(this, R.string.recording_failed, Toast.LENGTH_SHORT).show();
}
六、總結
以上就是關於 Android MediaRecorder 的多方位使用指南。MediaRecorder 是一個強大的錄製 API 類,但是調用順序繁瑣且容易出錯。在進行應用開發中使用 MediaRecorder 需要嚴格按照流程進行調用,並注意處理異常情況,以保證程序的穩定性和健壯性。
原創文章,作者:HAKAP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330616.html
微信掃一掃
支付寶掃一掃