int64_t timeBase;
timeBase = (int64_t(pavStrm-> time_base.num) * AV_TIME_BASE)/int64_t(pavStrm->time_base.den);
int64_t seekTarget = int64_t(iFrameNumber) * timeBase;
av_seek_frame(fmt_ctx, -1, seekTarget, AVSEEK_FLAG_FRAME);
здесь я хочу прочитать следующий 5 кадр после iFrameNumebrКак читать любой кадр, имея номер кадра с использованием FFmpeg av_seek_frame()
for(int iCnt = 0; iCnt <= 4; iCnt++)
{
iRet = av_read_frame(fmt_ctx, &pkt);
do
{
ret = decode_packet(&got_frame, 0);
if (ret < 0)
break;
pkt.data += ret;
pkt.size -= ret;
}while (pkt.size > 0);
av_free_packet(&pkt);
}
static int decode_packet(int *got_frame, int cached)
{
int ret = 0;
int decoded = pkt.size;
*got_frame = 0;
if (pkt.stream_index == video_stream_idx)
{
/* decode video frame */
ret = avcodec_decode_video2(video_dec_ctx, frame, got_frame, &pkt);
}
, когда я использую AVSEEK_FLAG_BACKWARD его возвращение 5 пакетов и 5 кадр первый два пустые, но правильные.
, когда я использую AVSEEK_FLAG_FRAME его возврат 5 пакетов и 3 кадра, которые не являются первым 3 кадрами, возвращающими определенный кадр из видео.
для любого iFrameNumber
так, пожалуйста, помогите мне, как получить кадр, имея номер кадра и что точное значение seektarget 3 паров из av_seek_frame()
также у меня есть проблемы в процессе преобразования кадра в rgb24 формате
Его еще позволяют достичь желаемого кадра и нормально, когда я строила его в режиме воспроизведения не возвращает непрерывный бит кадра расстроен тем, как благодарить за комментарий надежды я начнется после получения непрерывного кадра. –
@halfelf Что такое поведение _expected_, когда вы ищете номер кадра «4» (пятый кадр) с флагами (ЛЮБОЙ | BACKWARD). Должны ли они искать «0» или «4»? – ZeroDefect
@ZeroDefect Согласно документу 'avformat_seek_file()', который будет вызываться 'av_seek_frame()', пятый параметр 'avformat_seek_file',' max_ts', означает самую большую приемлемую временную метку, которая эквивалентна третьему параметру ' av_seek_frame', если задано 'AV_SEEK_FLAG_BACKWARD', так что ожидается, что ожидается« 0,4 ». Кстати, может быть еще одна необычная ошибка, что 'AVSEEK_FLAG_ANY' не поддерживается некоторыми демультиплексорами. – halfelf