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

时间:2013-05-17 10:04:51

标签: android camera 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();

问题出在

 mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);

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

为了让应用程序在所有这些设备中正确运行,我该怎么办?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

    列表尺寸= camera.getParameters()                 .getSupportedVideoSizes();

  3. 然后,您可以将其中一个设置到媒体记录器

    mediaRecorder.setVideoSize(videoWidth, videoHeight);
    

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

答案 1 :(得分:0)

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