在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进行控制?
答案 0 :(得分:6)
订单很重要。尝试在setVideoEncoder:
之前调用setVideoSizeMediaRecorder 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
起有效