我正在开发一个在应用程序中录制视频的安卓应用程序。它很好地记录了视频并保存在文件中。但是开始预览功能失败,录制过程中没有预览。
这是代码:
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();
}
}
它开始在表面上记录创建事件
公共空隙表面创建(表面持有人持有人) { 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