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

Android 如何控制捕获视频的帧高度和宽度:setVideoSize()不起作用,android,video,video-capture,Android,Video,Video Capture,在Nexus One上(例如),摄像头应用程序能够以720x480(高质量设置)捕获H.264视频。但是,在使用MediaRecorder API时,它似乎总是以固定的帧大小320x240进行捕获 我希望setVideoSize()方法可以控制帧大小(如下面的prepare片段所示),但它似乎没有效果(使用Froyo 2.2 Android SDK) 似乎表明这是一个长期存在的问题。有谁能建议如何控制帧大小,或者使用当前的API是否可行?recorder.setVideoSize似乎是一个坏的A

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

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


似乎表明这是一个长期存在的问题。有谁能建议如何控制帧大小,或者使用当前的API是否可行?

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

在我的Nexus one上,这起作用了:

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();

订单很重要。尝试在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();

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

令人遗憾的是,目前只有高质量和低质量。实际上,setProfile()会调用同一个setVideoSize()函数,所以我们不能说setVideoSize()不起作用。我猜setProfile()只是按照正确的顺序为您执行。这是正确的,不过,最好是在setoutput format之后但在setvideoencoder之前设置VideoSize
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();