On 09.09.2013 22:33, Alex Cohn wrote:
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

Thanks Alex!

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

Reply via email to