【问题标题】:Android: Camera2 - Reducing delay between video chunks/segments during continuous video recordingAndroid:Camera2 - 在连续视频录制期间减少视频块/片段之间的延迟
【发布时间】:2023-03-04 15:31:01
【问题描述】:

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

我的要求是1分钟的chunk/segments应该在后期无缝合并。

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

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

其中持续时间是我需要的剪辑的长度。 录制是使用 mediaRecorder 完成的,每次初始化时都会输出到不同的文件。

在所有这一切结束时,如果我合并视频,视频中会出现明显的中断(丢失几帧),并且还会跳过一些音频,很明显视频“跳跃”了。

请告诉我如何做到无缝。

附:我已经看过 grafika 示例(没有音频,它使用的是 camera1 API 而不是 camera2) 我也看过一些这样的帖子 Android: Split video during capture 但延迟仍未解决。

【问题讨论】:

    标签: android android-camera2 mediarecorder video-recording


    【解决方案1】:

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

    具体看setNextOutputFilesetMaxOutputDuration。这应该允许您在文件之间自动转换,每个 sn-p 具有特定的长度。希望这将是无缝的。

    如果没有,MediaCodec 和一个或多个 MediaMuxers 的某种组合应该可以让您构建它,但要正确连接起来需要很多东西。

    【讨论】:

    • 谢谢艾迪。我正在尝试探索您的建议并尝试使用 setNextOutputFile。但是,我在 private val recorderInfoListener by lazy { MediaRecorder.OnInfoListener { mr, what, extra -> if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { **mr.setNextOutputFile(newPartFile())** Log.d(TAG, "Output file changed") } } } } 上收到 IllegalStateException 我似乎无法弄清楚,因为这是在 prepare() 调用之后很久
    • 我认为我面临的问题是因为应该使用setNextOutputFile maxfilesize。至于您的第二个建议,请您指导我使用一些使用此功能的示例代码吗?我认为 grafika 使用了其中的一些,但它没有与音频一起使用,并且由于使用较旧的相机 API,录制更加失真。谢谢
    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2015-04-23
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多