android - 相机 2's setVideoFramerate() doesn' t 有任何影响

标签 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 等。我无法在 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/

相关文章:

android - 在 Android 工具栏中添加图标

android - 如何在 Espresso 中测试 Android 通知

java - 约束集不起作用

android - 是否可以将 cameraX 或 Camera2 缩放到 Api 最大缩放限制之外

android - 使用 Android Camera2 API 进行人脸检测和画圈

android - ImageSaver 中传递给 DngSaver 的 CaptureResult 为 null camera2 api

java - 如何将 C++ 函数指针传递给库的 JNI 函数

java - 在java中加载图像后FPS下降

java - 在自定义 Java 组件上正确查找帧速率

python - Pydub - 如何在不改变播放速度的情况下改变帧率