如何控制捕获的视频的帧高和宽度:setVideoSize()不起作用

时间:2010-08-05 07:49:42

标签: android video video-capture

在Nexus One上(例如),相机应用程序能够以720x480(“高”质量设置)捕获H.264视频。但是,使用MediaRecorder API时,它似乎总是以320x240的固定帧大小捕获。

我希望setVideoSize()方法控制帧大小(如下面的prepare片段中所示),但它似乎没有效果(使用Froyo 2.2 Android SDK)。

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
recorder.setOutputFile(PATH_TO_FILE);
recorder.setVideoSize(720,480);
recorder.setPreviewDisplay(holder.getSurface());
recorder.prepare();

Discussions on the android developers list似乎表明这是一个长期存在的问题。任何人都可以建议如何控制帧大小,或者是否可以使用当前的API进行控制?

3 个答案:

答案 0 :(得分:6)

订单很重要。尝试在setVideoEncoder:

之前调用setVideoSize
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setVideoSize(720,480);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
recorder.setOutputFile(PATH_TO_FILE);
recorder.setPreviewDisplay(holder.getSurface());
recorder.prepare();

答案 1 :(得分:1)

recorder.setVideoSize似乎是一个破坏的API,似乎不起作用。 但您可以使用“高质量”预设,为您设置视频输出格式,编码器,大小和帧速率。 我假设这是因为这些设置是硬件加速的?

在我的Nexus上,这有效:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
recorder.setOutputFile(PATH_TO_FILE);
recorder.setPreviewDisplay(holder.getSurface());
recorder.prepare();

答案 2 :(得分:-1)

此功能 - recorder.setProfile - 自Android v.2.2

起有效