Я пишу видеодекодер (используя 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
недостаточно ... Есть предложения? Как я могу продублировать контекст и полный статус декодера?
Или есть ли другой способ декодировать мой поток, используя ссылки?
Спасибо!