MediaRecorder用於錄像錄音。
MediaRecorder錄像錄音必須按照API說明的調用順序依次調用,否則報錯。可能會出現無法調用start()方法或者調用start()后閃退。
MediaRecorder依賴硬件,在一個手機可以用的配置,放到一台別的手機上可能又會出現bug。
添加權限:
<user-permission android:name="android.permission.RECORD_AUdio"/>
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<user-permission android:name="android.permission.CAMERA"/>
<user-permission android:name="android.permission.FLASHLIGHT"/>
<user-permission android:name="android.permission.MOUNT_UNMOUNT_FILRSYSTEMS"/>
<user-permission android:name="android.hardware.camera"/>
<user-permission android:name="android.hardware.camera.autofocus"/>
下面是MediaRecorder的使用:
//設置調用的攝像頭
mediarecorder.setCamera(Camera);
//指定Audio,video來源
mediarecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// 指定CamcorderProfile(需要API Level 8以上版本)
// mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
//使用CamcorderProfile做配置的話,輸出格式,音頻編碼,視頻編碼 不要寫
// 設置輸出格式和編碼格式(針對低於API Level 8版本)
mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //設置輸出格式,.THREE_GPP為3gp,.MPEG_4為mp4
mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);//設置聲音編碼類型 mic
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//設置視頻編碼類型,一般h263,h264
mediarecorder.setOutputFile("/sdcard/myVideo.3gp");
mediarecorder.setVideoSize(640,480);//設置視頻分辨率,設置錯誤調用start()時會報錯,可注釋掉在運行程序測試,有時注釋掉可以運行
// mediarecorder.setVideoFrameRate(24);//設置視頻幀率,可省略
mediarecorder.setVideoEncodingBitRate(10*1024*1024);//提高幀頻率,錄像模糊,花屏,綠屏可寫上調試
mediarecorder.setPreviewDisplay(surfaceHolder.getSurface()); //設置視頻預覽
try {
// 准備錄制
mediarecorder.prepare();
// 開始錄制
mediarecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
停止錄像:(按照順序調用以下方法)
surfaceview = null;
surfaceHolder = null;
if (mediarecorder != null) {
// 停止錄制
mediarecorder.stop();//先停止
mediarecorder.reset(); // 在重置mediarecorder
// 釋放資源
mediarecorder.release();//釋放mediarecorder
mediarecorder = null;
if (mCamera != null) {
mCamera.release(); //釋放攝像頭
mCamera = null;
}
}
視頻編碼格式:default,H263,H264,MPEG_4_SP
獲得視頻資源:default,CAMERA
音頻編碼格式:default,AAC,AMR_NB,AMR_WB,
獲得音頻資源:defalut,camcorder,mic,voice_call,voice_communication,voice_downlink, voice_recognition, voice_uplink;
輸出方式:amr_nb,amr_wb,default,mpeg_4,raw_amr,three_gpp.
