[Libav-user] How to seek to a given frame?

Mark McKay 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
out.

Mark

-------------------------
SUBJECT: Re: [Libav-user] How to
seek to a given frame?
DATE: Wed, 8 May 2019 13:20:17 -0700
FROM:
Michael Armes 
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 [1] 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). 

--michael  

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,
AV_TIME_BASE_Q, 

 pFormatCtx->streams[videoStream]->time_base);
  int
err = av_seek_frame(pFormatCtx, videoStream, timestamp,
0);

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?

Cheers,
Mark

---
http://www.kitfox.com [3]
 
_______________________________________________
 Libav-user mailing
list
Libav-user at ffmpeg.org
[4]
https://ffmpeg.org/mailman/listinfo/libav-user [5]

 To unsubscribe,
visit link above, or email
libav-user-request at ffmpeg.org [6] with
subject "unsubscribe".  

---
http://www.kitfox.com
 

Links:
------
[1]
http://ffmpeg.org/doxygen/trunk/avformat_8h.html#ac736f8f4afc930ca1cda0b43638cc678
[2]
mailto:mark at kitfox.com
[3] http://www.kitfox.com
[4]
mailto:Libav-user at ffmpeg.org
[5]
https://ffmpeg.org/mailman/listinfo/libav-user
[6]
mailto:libav-user-request at ffmpeg.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20190508/03cbcb90/attachment.html>


More information about the Libav-user mailing list