8

我正在使用媒体记录器在 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 不起作用(仅当我评论此行时才会起作用)。

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

4

2 回答 2

4

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

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

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

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

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

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

mediaRecorder.setVideoSize(videoWidth, videoHeight);

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

于 2013-10-04T07:28:26.820 回答
0

设备中的视频大小等于预览大小。您必须首先检查您设置的视频大小是否可用。不同设备的视频大小可能不同。所以,首先使用getSupportedPreviewSizes()检查可用的预览大小,然后设置视频大小。这将返回一个列表。您只需选择其中一个。

于 2013-06-27T08:39:04.317 回答