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

tar*_*ate 2 video android video-capture

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

我希望setVideoSize()方法控制帧大小(如下面的准备片段),但似乎没有效果(使用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();
Run Code Online (Sandbox Code Playgroud)

关于Android开发人员列表的讨论似乎表明这是一个长期存在的问题.任何人都可以建议如何控制帧大小,或者是否可以使用当前的API进行控制?

van*_*ery 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();
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的,但最好是在setoutput格式之后但在setvideoencoder之前setvideosize (3认同)