我正在编写一个视频解码器(使用FFMPEG/AVCodec)来解码自定义实现的MPEG4视频流。这个视频流的特殊之处在于它可以分成许多“子”流,基于同一个父流创建许多P帧。我正在尝试解码的视频流实际上是一种“视频树”。类似这样:
I <--P <--P <---------------------P <-------------- P <------------ P
\ <--P <--P <--P \ <--P <--P \ <--P <--P
我已经写了一个基本的解码器,当我决定跟随一条路径时它可以正常工作,但是当我尝试在视频树中跟随多条路径时就会出现问题。此时我需要“分叉”我的解码器以跟随两个不同的视频流。这种分叉可能发生在关键帧之后,甚至在P帧之后,因此我需要复制AVCodecContext(我使用avcodec_copy_context
),但它似乎会创建一个新的从零开始的解码器...它似乎会忽略先前的视频状态,所以解码的P帧被“应用”到一个空白的视频帧上。
也许仅仅使用avcodec_copy_context
来复制上下文不够用...有什么建议吗?我如何复制解码器的上下文和完整状态?
或者,是否有其他方法可以使用引用解码我的流?
谢谢!