gpt4 book ai didi

ffmpeg - 如何创建解码器的完整副本?

转载 作者:行者123 更新时间:2023-12-03 20:57:40 25 4
gpt4 key购买 nike

我正在为 mpeg4 视频流的自定义实现编写视频解码器(使用 FFMPEG/AVCodec)。这个视频流的特点是它可以分成许多“子”流,创建许多基于同一父级的 P 帧。我试图解码的视频流实际上是一种“视频树”。像这样的东西:

I <--P <--P <---------------------P <-------------- P <------------ P
\ <--P <--P <--P \ <--P <--P \ <--P <--P

我已经编写了一个基本解码器,当我决定遵循一条路径时它工作得很好,问题是当我尝试遵循视​​频树中的多个路径时。在这一点上,我需要“ fork ”我的解码器来跟踪两个不同的视频流。拆分不仅可能发生在关键帧之后,甚至可能发生在 P 帧之后,所以我需要复制 AVCodecContext (我使用 avcodec_copy_context )但它似乎是从一个干净的状态创建新的解码器.. 它似乎忽略了之前的视频状态,因此解码的 P 帧被“应用”到一个空的视频帧。
可能使用 avcodec_copy_context 复制上下文还不够……有什么建议吗?如何复制解码器的上下文和完整状态?
或者,有没有其他方法可以使用引用解码我的流?
谢谢!

最佳答案

根据documentation :“生成的目标编解码器上下文将未打开,即您需要调用 avcodec_open() 才能使用此 AVCodecContext 解码/编码视频/音频数据。”

因此,为了达到您在另一个解码器中的位置,我想您必须打开流并寻找相同的位置(av_seek_frame)。

或者,您可以从一开始就并行维护多个解码器,以防以后需要 fork 。如果您只需要并行的几条路径,这可能是一种选择。

或者您只使用一个解码器,并在这种情况下四处寻找,例如具有 DVD 菜单结构,如果您只需要在任何时候显示单个路径。

关于ffmpeg - 如何创建解码器的完整副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6914258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com