【问题标题】:Skipping the Frame on onPreviewFrame(byte[] data, Camera camera)在 onPreviewFrame(byte[] data, Camera camera) 上跳过帧
【发布时间】:2014-06-13 11:01:00
【问题描述】:

我想将帧保存在 Arraylist 代码中,但问题是在捕获视频时会跳帧。 CameraArray 是数组列表,ModelFrameProcess 是模型类,它接受字节数组并保存到数组列表中。 我已将帧速率固定为 15。

@Override
        public void onPreviewFrame(byte[] data, Camera camera) {

                 CameraArray.add(new ModelFrameProcess(data));
}

有时帧速率会下降到 6 帧,有时会超过 20 帧。 有什么帮助吗??

【问题讨论】:

    标签: android android-camera surfaceview surfaceholder


    【解决方案1】:

    为了达到最佳帧率,您应该避免垃圾收集。采集期间不应进行任何分配 (new)。

    你可以使用Camera.setPreviewCallbackWithBuffer(),但这需要帧数据的副本,你不应该将回调中收到的数据字节数组添加到ArrayList中。

    通常,回调发生在主 (UI) 线程上。这可能会导致帧速率不稳定。要将回调从 UI 线程中推送出去,您应该使用 eventLoop

    【讨论】:

    • 我使用了主 UI 线程,但帧速率下降。我从头开始这项工作,但不是我通过 mediarecorder 录制视频,之后我正在谈论视频的所有帧并且有效,但是当我从这些帧创建视频时它可以工作但非常非常慢:(有什么帮助吗?
    • 编码帧的离线处理受 CPU 限制。您可以尝试硬件解码器和编码器,但这会比实时操作慢。但另一方面,如果您在后台进行离线处理,则时间要求较低。
    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 2013-10-30
    • 2013-11-17
    • 2018-04-27
    • 2011-05-20
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    相关资源
    最近更新 更多