如何使用Camera2 API获得稳定的恒定帧速率?

时间:2019-04-29 11:42:09

标签: java android android-camera2 android-mediarecorder

我正在编写我的第一个android应用程序,并且我的应用程序具有视频录制功能。因此,我进行了一些研究,以使“材料”准备就绪并运行,并设法查看了github上的google示例: https://github.com/googlesamples/android-Camera2Video

所以我深入研究了代码,是的,只是制作了一段视频。

所以我确实对我的相机功能有一些限制,那就是它以每秒25帧的稳定恒定速度平稳运行...

到目前为止,我所看到的是MediaRecorder类中的一些设置方法(请参见https://developer.android.com/reference/android/media/MediaRecorder.html

        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

        mMediaRecorder.setOutputFile(mNextVideoAbsolutePath);
        mMediaRecorder.setVideoEncodingBitRate(10000000);
        mMediaRecorder.setCaptureRate(25);
        mMediaRecorder.setVideoFrameRate(25);

        mMediaRecorder.setVideoSize(mVideoSize.getWidth(), getHeight());
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

设置帧速率,但是这些帧给我的25 fps带来了该死的-所以通常输出“就像” 29,36 fps或29,54 fps

我确实对我的设备支持fps范围进行了一些研究,而P30 Pro确实支持25 fps,而像素3 XL不支持。我什至不明白为什么会有这样的设备差异(也许有人可以解释?)。

Camera2 API确实提供了很多东西,以至于有了CaptureRequest.Builder,因此我进行了一些搜索,并为我的captureRequestBuilder设置了这些额外的行

            closePreviewSession();
            setUpMediaRecorder();
            SurfaceTexture texture = mTextureView.getSurfaceTexture();
            assert texture != null;
            texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
            mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);

            mPreviewBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range<Integer>(25,25));

            mPreviewBuilder.set(
                    CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
            mPreviewBuilder.set(CaptureRequest.CONTROL_AE_LOCK, false);

但是什么都没有改变...外面有人通过camera2 api设法获得了稳定的恒定帧率吗?

我希望有!谢谢,如果您到目前为止已经读过!

编辑:可能的重复项:

Camera2 MediaRecorder changes Frame Rate on Galaxy S9

How to use android camera2 api to record 60 fps video with fixed exposure time

编辑:出于完整性考虑:

P30 Pro的范围: P30 Pro ranges

Pixel 3 XL的范围: Pixel 3 XL ranges

0 个答案:

没有答案