我正在使用媒体录制器在Android应用中录制视频。
mMediaRecorder.setCamera(mServiceCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
String file_name = Environment.getExternalStorageDirectory().getPath() +"/myVideo.mp4";
mMediaRecorder.setOutputFile(file_name);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();
问题出在
行 mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
在HTC和Xperia中,setVideoSize工作正常(仅当我不评论此行时才会起作用)。 但是在Nexus和Note中,setVideoSize将不起作用(仅当我对此行进行评论时才会起作用)。
为了让应用程序在所有这些设备中正确运行,我该怎么办?
答案 0 :(得分:4)
您需要了解预览和实际捕获的视频是两个不同的东西,同样预览大小和视频大小是两个不同的参数。你在取景器中看到的本质上是预览,但实际上并没有记录。
启动相机时,将预览尺寸设置为相机。但是您必须查询支持的预览大小,并且应该在其中设置一个。
相机相机= camera.open(); 列出psizes = camera.getParameters() .getSupportedPreviewSizes();
设置预览后,您可以使用MediaRecorder开始录制,视频大小可以设置为媒体录制器,它是将捕获的视频的实际大小。 同样,您应该设置一个支持的视频大小。
列表尺寸= camera.getParameters() .getSupportedVideoSizes();
然后,您可以将其中一个设置到媒体记录器
mediaRecorder.setVideoSize(videoWidth, videoHeight);
因此,请记住始终检查支持的大小,否则您一定会遇到应用程序崩溃。
答案 1 :(得分:0)
设备中的视频尺寸等于预览尺寸。您必须先检查您设置的视频大小是否可用。不同设备中的视频大小可能不同。因此,首先使用getSupportedPreviewSizes ()检查可用的预览尺寸,然后设置视频大小。这将返回一个列表。你只需要选择其中一个。