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);
在这里我想在 iFrameNumebr 之后阅读下一个 5 帧
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
所以请帮助我如何在有帧号的同时获取帧以及 av_seek_frame() 的 seektarget 3rd 参数的确切值是多少
在将帧转换为 rgb24 格式时我也有问题