Avformat не может найти начало файла

Мне нужно быстро найти H.264 закодированный видеопоток в MP4 контейнере. Я использую libav для декодирования кадров, поэтому я наткнулся на метод avformat_seek_file().

Моя проблема в том, что если предположить, что поток H.264 начинается с ключевого кадра, когда я ищу метку времени 0 (независимо от time_base), я должен быть в начале потока. Но не я. Я обычно получаю несколько секунд в видео. Кроме того, если я стремлюсь, например, к 10 секундам, я обычно получаю около 12 или около того. Возможно ли, чтобы ключевые кадры были такими «редкими»? Кажется, что AVSEEK_FLAG_ANY не влияет на результат поиска. Проверено на нескольких FullHD H.264 MP4 видео.

Код:

unsigned long seekTo = 0;
//Doesen´t actually matter for 0 since it will be also 0
seekTo = av_rescale_q(seekTo, AVRational{1, AV_TIME_BASE}, pFormatCtx->streams[videoStream]->time_base);
int result = avformat_seek_file(pFormatCtx, videoStream, INT_FAST64_MIN, seekTo, seekTo, AVSEEK_FLAG_ANY);
avcodec_flush_buffers(pCodecCtx);

person B.Gen.Jack.O.Neill    schedule 14.03.2014    source источник


Ответы (1)


Попробуйте вместо этого использовать av_seek_frame. Прочтите здесь, чтобы узнать о некоторых ошибках, связанных с его использованием и поиском .

person Jack    schedule 20.03.2014