MediaRecorder setVideoSize在不同的设备中显示不同的行为

我正在使用媒体录像机在Android应用程序中录制video。

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

在macros达电和Xperia,setVideoSize工作正常(只有当我不评论这条线才会工作)。 但在Nexus和Note中,setVideoSize将不起作用(只有在我注释此行时才能使用)。

我应该怎么做才能使应用程序正确运行所有这些设备?

Solutions Collecting From Web of "MediaRecorder setVideoSize在不同的设备中显示不同的行为"

您需要了解预览和实际捕获的video是两个不同的东西,同样预览大小和video大小是两个不同的参数。 您在取景器中看到的内容本质上是预览,但实际上并不logging。

  1. 启动相机时,将预览尺寸设置为相机。 但是您必须查询支持的预览尺寸,并且应该设置其中一个。

    Camera camera = camera.open(); 列表psizes = camera.getParameters().getSupportedPreviewSizes();

  2. 设置预览后,您可以使用MediaRecorder开始录制,并且可以将video尺寸设置为媒体录制器,这是将要捕获的video的实际尺寸。 同样,你应该设置一个支持的video大小。

    列表大小= camera.getParameters().getSupportedVideoSizes();

然后,您可以将其中一个设置为媒体录制器

 mediaRecorder.setVideoSize(videoWidth, videoHeight); 

所以,记得总是检查支持的大小,否则你肯定会得到一个应用程序崩溃。

设备中的video尺寸等于预览尺寸。 您必须首先检查您设置的video尺寸是否可用。 不同设备的video尺寸可能不一样,所以首先使用getSupportedPreviewSizes()检查可用的预览尺寸,然后设置video尺寸。 这将返回一个列表。你必须只select其中的一个。