我正在为 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
是不够的......有什么建议吗?如何复制解码器的上下文和完整状态?或者,有没有其他方法可以使用引用解码我的流?谢谢!