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