我正在为我的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);
三个不同输出视频的帧率分别为27.61,28.39和26.24等等。我无法获得一个稳定的29.97或30fps的帧率。我试过将比特率提高到50Mbps,降低到30Mbps,但没有任何改变。
最奇怪的是,我甚至不能以1080p超过30fps进行录制:
mMediaRecorder.setVideoSize(1920, 1080);
mMediaRecorder.setVideoFrameRate(60);
我曾经尝试过在29.69的情况下记录FHD画面,但录制结果和UHD画面一样随机。我做错了什么吗?
我查看了使用Camera2(在Android版本21上)API录制60fps视频,但它也无法解决问题。 我还找到了一些答案,但它们使用了已弃用的旧相机API(具有Camera.Parameters)。
还有其他参数吗?
setVideoFrameRate
不能保证恒定的帧率。也许你可以尝试使用Camera2
API 直接录制视频,但我对 camera2 不熟悉。 - nandsitoMediaRecorder
是Camera2
API 的一部分,对吧?我看到的所有使用Camera2
API 的例子都在使用MediaRecorder
。据我所知,android.hardware.camera2
中没有记录方法。要实现恒定的 29.97 或 30 fps,使用 C/C++ 是否更好? - RaphaëlMediaRecorder
和Camera2
是不同的API。前者是更高级别的API,用于录制音频和视频媒体,而后者提供接近硬件级别的相机功能,就像AudioRecorder
一样提供音频功能。您说得对,Camera2
不提供视频录制。我认为也没有原生的API来记录视频。 - nandsito