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