【发布时间】:2011-10-18 08:38:44
【问题描述】:
我正在为 mpeg4 视频流的自定义实现编写视频解码器(使用 FFMPEG/AVCodec)。这个视频流的特点是它可以分成许多“子”流,创建许多基于同一父级的 P 帧。我试图解码的视频流实际上是一种“视频树”。像这样的:
I <--P <--P <---------------------P <-------------- P <------------ P
\ <--P <--P <--P \ <--P <--P \ <--P <--P
我已经编写了一个基本解码器,当我决定遵循一条路径时它工作正常,问题是当我尝试遵循视频树中的多个路径时。在这一点上,我需要“分叉”我的解码器来跟踪两个不同的视频流。拆分不仅可能发生在关键帧之后,甚至可能发生在 P 帧之后,所以我需要复制 AVCodecContext(我使用avcodec_copy_context),但它似乎是从一个干净的状态创建新的解码器......它似乎忽略了之前的视频状态,因此解码的 P 帧被“应用”到一个空的视频帧。
可能使用avcodec_copy_context 复制上下文是不够的......有什么建议吗?如何复制解码器的上下文和完整状态?
或者,有没有其他方法可以使用引用解码我的流?
谢谢!
【问题讨论】:
-
你有没有设法找到如何制作 AVCodecContext 的深层副本?
标签: ffmpeg libavcodec mpeg-4 avcodec