Трябва бързо да претърся 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);