camera2的setVideoFramerate()没有任何效果

时间:2017-03-29 08:19:47

标签: android frame-rate android-camera2 camera2

我正在为我的LG G4开发我的相机应用程序,但我找不到以恒定帧速率录制的方法。我拿了谷歌示例Camera2 app来添加我的功能。

当我想在UHD录制时:

mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);

mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
if (mNextVideoAbsolutePath == null || mNextVideoAbsolutePath.isEmpty()) {
    mNextVideoAbsolutePath = getVideoFilePath(getActivity());
}
mMediaRecorder.setOutputFile(mNextVideoAbsolutePath);

mMediaRecorder.setVideoEncodingBitRate(35 * 1000 * 1000);
mMediaRecorder.setVideoSize(3840, 2160);
mMediaRecorder.setVideoFrameRate(30);

mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

3个不同输出视频的帧率为27.61,28.39,26.24等。我无法在29.97的30fps中获得恒定的帧率。我试图将比特率提高到50Mbps,将其降低到30Mbps,但它并没有改变任何东西。

最奇怪的部分是我甚至无法在1080p中记录30fps以上:

mMediaRecorder.setVideoSize(1920, 1080);
mMediaRecorder.setVideoFrameRate(60);

我上次尝试时记录的FHD镜头为29.69,但它与UHD镜头一样随意。我究竟做错了什么 ?

我已经检查了Recording 60fps video with Camera2(on Android version 21) API,但它也无法正常工作。我也找到了一些答案,但他们使用的旧相机API(带Camera.Parameters)现已弃用。

还有其他参数吗?

1 个答案:

答案 0 :(得分:0)

注意:在某些具有自动帧速率的设备上,这将设置最大帧速率,而不是恒定帧速率。实际帧频将根据照明条件而变化。

尝试一下:

mediaRecorder.setCaptureRate(30);