Я пытаюсь понять, как искать в видео, закодированных с помощью p-кадров (например, H.264) - сейчас я знаю только, как искать в видео, закодированных с помощью кодеков, в которых каждый кадр является ключевым кадром (например, MJPEG.).
Учитывая временную метку, в конечном итоге она должна воспроизвести кадр для этой временной метки. Но сейчас я просто пытаюсь воспроизвести ключевой кадр рядом с отметкой времени. Итак, сначала--
ret = av_seek_frame(pFormatCtx, videoStream, avTime, 0);
avcodec_flush_buffers(pCodecCtx);
Затем какой-то промежуточный код, включая av_read_frame
.Тогда--
ret = avcodec_decode_video2(pCodecCtx, captureFrame, &gotPicture, &packet);
Наблюдения:
Для некоторых видео это работает.Для других avcodec_decode_video2
возвращает ошибку (отрицательное число).Пример рабочего видео: здесь .Пример нерабочего видео: здесь .
Для видео MJPEG это работает.
Если я достану av_seek_frame
, чтобы он просто последовательно воспроизводил кадры, он работает.