On Sep 8, 2013 8:15 PM, "Sandro Mani" <[email protected]> wrote: > > On 08.09.2013 18:32, Alex Cohn wrote: >> >> On Sep 8, 2013 6:17 PM, "Sandro Mani" <[email protected]> wrote: >> > >> > Hello, >> > >> > I would like to periodically (say every second) grab the latest frame from >> > a rtsp live stream of a webcam. I am able to successfully open the stream >> > and read and decode frames, however if I read one frame every second, I am >> > still reading subsequent frames (as opposed to frames which are i.e. one >> > second apart). I guess I need to seek to the last available frame before >> > reading the next frame. Can anyone point out how this can be done? >> > >> > For reference, my code is here: [1] [2]. >> > >> > Thanks for any inputs. >> > >> > Sandro >> > >> > >> > [1] http://smani.fedorapeople.org/VideoCapture.hpp >> > [2] http://smani.fedorapeople.org/VideoCapture.cpp >> >> If your webcam has GOP of 1 sec, e.g. GOP length = 30 and FPS = 30, you can >> skip to next second; otherwize, the correct strategy would be to decode all >> frames, but throw away all frames that you don't need. >> >> BR >> Alex Cohn >> >> > Thanks for the reply. With skip do you mean by calling av_seek_frame with an > appropriately computed timestamp? (Sorry if I may be asking the obvious, I'm > rather a novice in this area.) > > Sandro
This is a good question. I would suggest av_seek_frame with relevant timestamp and flags=0 (i.e. only keyframes). But if your stream does not support seeking, you can simply read incoming packets (av_read_frame) until you reach the next key frame (when AVPacket::flags is PKT_FLAG_KEY). Good luck, Alex Cohn _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
