Android:Camera2-减少连续视频录制期间视频块/段之间的延迟

问题描述

我目前正在开发一个Android应用程序,该应用程序使用camera2 API连续记录视频,同时将其分割为1分钟的块。

我的要求是,应在以后的阶段无缝合并1分钟的块/段。

目前,我可以通过设置计时器以在时间段结束时重新开始记录来实现大块保存:

timer.scheduleAtFixedrate(object : TimerTask() {
        override fun run() {
            Log.d(TAG,"Inside timer")
            if (!stopRecording) recordSession() else cancel()
        }
    },duration)

其中duration是我需要的剪辑的长度。 记录是使用mediaRecorder完成的,每次初始化都会输出到另一个文件

在所有这些操作的最后,如果我合并视频,则视频中会出现明显的中断(丢失几帧),并且还会跳过一些音频,这很明显表明视频“跳了起来”。

请让我知道如何做到无缝。

P.S。我已经看过了grafika示例(没有音频,它使用的是camera1 API,而不是camera2) 我也看过一些SO帖子,例如 Android: Split video during capture 但是延迟仍然没有解决

解决方法

如果需要无缝连接,则需要研究MediaRecorder自己的时间限制选项,或者可能必须从MediaCodec和MediaMuxer的较低级API对象构建东西。

具体地说,请查看setNextOutputFilesetMaxOutputDuration。这样一来,您就可以自动在文件之间转换,每个片段都有特定的长度。希望它将是无缝的。

如果没有,则应该使用MediaCodec和一个或多个MediaMuxers的某种组合来构建它,但这是很多可以正确连接的东西。