Android相机记录不错,但开始预览失败
问题描述:
我正在开发一个Android应用程序,它在应用程序中记录视频。 它很好地记录了视频并保存在文件中。但开始预览功能失败,并且在录制过程中我没有预览。Android相机记录不错,但开始预览失败
这是代码:
private void startVRec(){
//final View view = inflater.inflate(R.layout.fragment_conversation, container, false);
try {
vrec = new MediaRecorder();
mCamera = Camera.open();
params = mCamera.getParameters();
Camera.Size size=getOptimalPreviewSize(params.getSupportedPreviewSizes(), 240, 240);
params.setPreviewSize(size.height, size.width);
mCamera.setParameters(params);
vrec.setPreviewDisplay(surfaceHolder.getSurface());
mCamera.unlock();
vrec.setCamera(mCamera);
camera_layout.setVisibility(View.VISIBLE);
surfaceView.setVisibility(View.VISIBLE);
} catch (Exception e) {
}
}
,因为我在互联网上最例子所看到的,startpreview函数调用上surfaceChanged事件:
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
//Camera.Size previewSize=null;
try {
if (mCamera != null)
{
Camera.Size
size=getOptimalPreviewSize(params.getSupportedPreviewSizes(), 240, 240);
params.setPreviewSize(size.height, size.width);
mCamera.setParameters(params);
mCamera.startPreview();
}
} catch (Exception e) {
Toast.makeText(activity, "error "+ e.getMessage(), Toast.LENGTH_LONG).show();
}
}
并开始记录上surfaceCreated事件
public void surfaceCreated(SurfaceHolder holder){if(mCamera!= null){
try {
vrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
vrec.setAudioSource(MediaRecorder.AudioSource.MIC);
vrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
vrec.setVideoFrameRate(30);
vrec.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
vrec.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
vrec.setPreviewDisplay(surfaceHolder.getSurface());
vrec.setOutputFile(FileBackend.getConversationsImageDirectory() + System.currentTimeMillis() + ".mp4");
vrec.prepare();
vrec.start();
}
catch(IllegalStateException e2){
Toast.makeText(activity,"err cam stop ill :"+ e2.getMessage(),Toast.LENGTH_LONG).show();
}
catch (Exception e) {
Toast.makeText(activity,"err surface created :"+ e.getMessage(),Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(activity, "Camera not available!", Toast.LENGTH_LONG).show();
}
}
答
尝试setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS
)为您的相机SurfaceView
持有我已经在使用的onCreate它活动()事件。 – siavash