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