首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何创建解码器的完整副本?

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

Stack Overflow用户
提问于 2011-08-02 23:08:10
回答 1查看 2.2K关注 0票数 15

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

代码语言:javascript
复制
I <--P <--P <---------------------P <-------------- P <------------ P
           \ <--P <--P <--P        \ <--P <--P       \ <--P <--P 

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

EN

回答 1

Stack Overflow用户

发布于 2015-04-28 16:44:33

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

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6914258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档