У меня есть несколько видеофайлов (.mpg), которые вырезаны из большого видеофайла и, вероятно, неправильно закодированы. Таким образом, при декодировании полученный AVFrame.pkt_dts устанавливается в файл примерно на полсекунды.
И поскольку я вычисляю текущий кадр на основе pkt_dts, мой текущий кадр начинается с 13. Я могу определить это и вычислить смещение кадра с помощью
frame_offset = (pFrame->pkt_dts/pFrame->pkt_duration)
Однако это не является большой проблемой, но при реализации поиска с помощью
// seek to frame 500 and seek back to first key frame
seekTarget = 500;
av_seek_frame(videoState_->ptrFormatCtx_, -1, seekTarget, AVSEEK_FLAG_FRAME | AVSEEK_FLAG_BACKWARD);
я обычно получаю первый ключевой кадр, а затем просто декодирую следующий кадр до указанного мной кадра. Но с этими файлами av_seek_frame () всегда будет помещать меня точно в кадр, который я ищу, но в нем отсутствуют данные, потому что родительский кадр I не декодируется. Я предполагаю, что это происходит из-за неправильного pkt_dts с самого начала.
Я могу исправить это, снова используя frame_offset, но действительно ли это правильный подход к этой проблеме? Это кажется немного взломанным.