MediaRecorder用于录像录音。
MediaRecorder录像录音必须按照API说明的调用顺序依次调用,否则报错。可能会出现无法调用start()方法或者调用start()后闪退。
MediaRecorder依赖硬件,在一个手机可以用的配置,放到一台别的手机上可能又会出现bug。
添加权限:
下面是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.