我试图理解如何在用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);
观察:
答案 0 :(得分:1)
替换此 -
ret = av_seek_frame(pFormatCtx, videoStream, avTime, isPlayingBackward ? AVSEEK_FLAG_BACKWARD : 0);
avcodec_flush_buffers(pCodecCtx);
用这个 -
ret = avformat_seek_file(pFormatCtx, videoStream, 0, avTime, avTime, 0);
(警告:avformat_seek_file
的文档说:“这是新的搜索API的一部分,它仍在构建中。因此不要使用它。它可能随时改变,不要指望ABI兼容性然而!“)