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

Dee*_*pzz 8 camera android mediarecorder

我正在使用媒体录制器在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();
Run Code Online (Sandbox Code Playgroud)

问题就在于此

 mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
Run Code Online (Sandbox Code Playgroud)

在HTC和Xperia中,setVideoSize工作正常(仅当我不评论此行时才会起作用).但是在Nexus和Note中,setVideoSize将不起作用(仅当我评论此行时才会起作用).

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

cod*_*ood 4

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

  1. 启动相机时,您可以设置相机的预览尺寸。但您必须查询支持的预览尺寸并应设置其中之一。

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

  2. 设置好预览后,就可以使用MediaRecorder开始录制,并且可以将视频大小设置为媒体录制器,这就是将捕获的视频的实际大小。同样,您应该设置支持的视频大小之一。

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

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

mediaRecorder.setVideoSize(videoWidth, videoHeight);
Run Code Online (Sandbox Code Playgroud)

因此,请记住始终检查支持的尺寸,否则应用程序肯定会崩溃。