How am I supposed to know if I need to seek backwards then? Can I read the current timestamp the stream is at somewhere?

Mark


On Thu, 9 May 2019 09:00:13 -0400, Philippe Gorley <[email protected]> wrote:
On 2019-05-08 10:27 p.m., Mark McKay wrote:
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.

AVSEEK_FLAG_BACKWARD is ignored in avformat_seek_file, not in av_seek_frame.

Mark


------------------------------------------------------------------------
*Subject:* Re: [Libav-user] How to seek to a given frame?
*Date:* Wed, 8 May 2019 13:20:17 -0700
*From:* Michael Armes <[email protected]>
*To:* "This list is about using libavcodec, libavformat, libavutil, libavdevice and libavfilter." <[email protected]> *Reply-To:* "This list is about using libavcodec, libavformat, libavutil, libavdevice and libavfilter." <[email protected]> Use |AVSEEK_FLAG_BACKWARD| <http://ffmpeg.org/doxygen/trunk/avformat_8h.html#ac736f8f4afc930ca1cda0b43638cc678>  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 <[email protected] <mailto:[email protected]>> 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
_______________________________________________
    Libav-user mailing list
    [email protected] <mailto:[email protected]>
    https://ffmpeg.org/mailman/listinfo/libav-user
To unsubscribe, visit link above, or email
[email protected] <mailto:[email protected]>
    with subject "unsubscribe".
---
http://www.kitfox.com

_______________________________________________
Libav-user mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/libav-user
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".


---
http://www.kitfox.com
_______________________________________________
Libav-user mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/libav-user

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to