這是由于設(shè)置的分辨率手機(jī)設(shè)備不支持多艇,如果設(shè)置了不支持的分辨率烟很,運(yùn)行時(shí)就會報(bào)錯(cuò)。
解決方法:
//獲取支持的分辨率
public static int[]getVideoSize(Context context,Camera mCamera){
????int cw=640;
? ? int ch=480;
? ? Camera.Parameters parameter=mCamera.getParameters();
? ? List prviewSizeList = parameter.getSupportedPreviewSizes();
? ? List videoSizeList = parameter.getSupportedVideoSizes();
? ? parameter.setPreviewSize(prviewSizeList.get(0).width,prviewSizeList.get(0).height);
? ? //降序排列
? ? Collections.sort(videoSizeList, new Comparator() {
@Override
? ? ? ? public int compare(Camera.Size lhs, Camera.Size rhs) {
if (lhs.width > rhs.width) {
return -1;
? ? ? ? ? ? }else if (lhs.width == rhs.width) {
return 0;
? ? ? ? ? ? }else {
return 1;
? ? ? ? ? ? }
}
});
? ? int index =0;
for(int i=0;i<videoSizeList.size();i++){
if(videoSizeList.get(i).width<prviewSizeList.get(0).width&&videoSizeList.get(i).width>=640){
index= i;
? ? }
}
cw = videoSizeList .get(index).width;
? ? ch = videoSizeList .get(index).height;
? ? int size[]=new int[2];
? ? size[0]=cw;
? ? size[1]=ch;
? ? return size;
}
//初始化initMediaRecorder
private void initMediaRecorder() {
try {
mediarecorder =new MediaRecorder();
? ? ? ? mediarecorder.setCamera(mCamera);
? ? ? ? mediarecorder.reset();
? ? ? ? mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
? ? ? ? mediarecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
? ? ? ? // Set output file format
? ? ? ? mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
? ? ? ? // 這兩項(xiàng)需要放在setOutputFormat之后
? ? ? ? mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
? ? ? ? mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
? ? ? ? int size[] = ToolUtils.getVideoSize(RecordVideoActivity.this, mCamera);
? ? ? ? mediarecorder.setVideoSize(size[0], size[1]);
? ? ? ? mediarecorder.setVideoFrameRate(30);
? ? ? ? mediarecorder.setVideoEncodingBitRate(10 * size[0] * size[1]);
? ? ? ? mediarecorder.setOrientationHint(90);
? ? ? ? //設(shè)置記錄會話的最大持續(xù)時(shí)間(毫秒)
? ? ? ? mediarecorder.setMaxDuration(45 *1000);
? ? ? ? mediarecorder.setPreviewDisplay(cameraPreview.getHolder().getSurface());
? ? ? ? mediarecorder.setOutputFile(outFilePath);
? ? }catch (Exception e) {
Log.e("Video",""+e.toString());
? ? }
}