[Libav-user] How to seek to a given frame?
mark at kitfox.com
Thu May 9 05:27:15 EEST 2019
The docs in the header file say that the AVSEEK_FLAG_BACKWARD is
ignored, and the tests I've run seem to work even when I leave it
SUBJECT: Re: [Libav-user] How to
seek to a given frame?
DATE: Wed, 8 May 2019 13:20:17 -0700
TO: "This list is about using libavcodec, libavformat,
libavutil, libavdevice and libavfilter."
REPLY-TO: "This list is about
using libavcodec, libavformat, libavutil, libavdevice and libavfilter."
Use AVSEEK_FLAG_BACKWARD  to seek to the closest _keyframe_ having
a smaller pts than the one you are seeking. You must then iterate
through reading frames until you reach your desired position (if you are
not seeking to a keyframe).
On Wed, May 8, 2019 at 10:53
AM Mark McKay wrote: I'm trying to create a video player with the
ability to seek whereever I want. I'm having some trouble with
av_seek_frame(), which seems to keep returning the first keyframe after
the timestamp I'm looking for:
int timestamp = av_rescale_q(timeMs,
err = av_seek_frame(pFormatCtx, videoStream, timestamp,
Unfortunately, if it puts me at a position /after/ the frame where
I'm seeking, I have already passed the frame I want and can't scan
forward to find it. I've also tried seeking with AVSEEK_FLAG_ANY, but
this it not returning frames with valid data. I'm guessing that you need
to jump to the correct keyframe and then scan forward so that the frame
buffers are built correctly.
I'm also considering scanning the entire
video when I first load it to build an index of packet information.
AVSEEK_FLAG_BYTE looks like it could be useful to jump directly to the
packet I want - however, I don't know where to find the byte value I
would need to pass to the seek function.
How can I scan to the frame
that I want?
Libav-user at ffmpeg.org
visit link above, or email
libav-user-request at ffmpeg.org  with
mailto:mark at kitfox.com
mailto:Libav-user at ffmpeg.org
mailto:libav-user-request at ffmpeg.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Libav-user