我正在为我的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)现已弃用。
还有其他参数吗?
答案 0 :(得分:0)
注意:在某些具有自动帧速率的设备上,这将设置最大帧速率,而不是恒定帧速率。实际帧频将根据照明条件而变化。
尝试一下:
mediaRecorder.setCaptureRate(30);