解決Android錄制適配 setVideoSize 后start failed問題

這是由于設置的分辨率手機設備不支持,如果設置了不支持的分辨率,運行時就會報錯。

解決方法:

//獲取支持的分辨率

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);

? ? ? ? // 這兩項需要放在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);

? ? ? ? //設置記錄會話的最大持續時間(毫秒)

? ? ? ? mediarecorder.setMaxDuration(45 *1000);

? ? ? ? mediarecorder.setPreviewDisplay(cameraPreview.getHolder().getSurface());

? ? ? ? mediarecorder.setOutputFile(outFilePath);

? ? }catch (Exception e) {

Log.e("Video",""+e.toString());

? ? }

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容