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

Reply via email to