我正在为LG G4开发我的相机应用程序,但我找不到一种以恒定帧率进行记录的方法。我以Google样本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等。我试图将比特率提高到50Mbps,将其降低到30Mbps,但没有任何改变。
最奇怪的部分是我什至无法以1080p的速度录制30fps以上的帧:
mMediaRecorder.setVideoSize(1920, 1080);
mMediaRecorder.setVideoFrameRate(60);
[我上次尝试以29.69录制FHD素材,但它与UHD素材一样随机。我究竟做错了什么 ?
我已经签出Recording 60fps video with Camera2(on Android version 21) API,但它也不起作用。我也找到了一些答案,但他们使用的是旧相机API(带有Camera.Parameters),现已弃用。
还有另一个参数吗?
注意:在某些具有自动帧速率的设备上,这将设置最大帧速率,而不是恒定帧速率。实际帧频将根据照明条件而变化。
尝试一下:
mediaRecorder.setCaptureRate(30);