我正在为我的 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 等。我无法在 30fps 的 29.97 处获得恒定的帧率。我尝试将比特率增加到 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);
关于android - 相机 2's setVideoFramerate() doesn' t 有任何影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43088087/