Re: Read frame by frame mp4 file, need exampl e.

Антон Шаров via gstreamer-devel <[email protected]>
Newsgroups gmane.comp.video.gstreamer.devel
Message-ID <[email protected]>
Thank you for reply, Nicolas!
 
>The question is ambiguous, since MP4 containers can contains multiple streams and metadata. Do you want to read each >video frame of the first video frame ? Do you want these to be coded or decoded ? All this is important, because before >pulling this data into your application (I would suggesting using appsink element), you will have to design the right pipeline.
 
I don’t quite understand your clarification because I’m quite new to this domain. I split rtsp stream into mp4 files via
rtsp ! h264depay ! h264parse ! splitmuxsink  location=… max-time-size=5 seconds .
Given camera with 15 fps and ~5 sec. video I suppose that I need to iterate over 75 frames. So it is unclear to me what you mean by «video frame of the first frame». Keyframe and it’s subframes  or I-frame and sequential p-frames or all GOP’s in a file.  I need to extract  timestamp for each frame and find the most accurate frame for a given timestamp.
My pipe for this is filesrc ! decodebin ! appsink, where I hope to handle new-sample or preroll event for each frame (buffer contents == frame).
 
>Frame stepping is unlikely what you are a looking for.
 
I supposed that it means just manual iteration over frames in video file — step by step. Like loop  with opencv. 
  
>Среда, 26 июля 2023, 22:42 +03:00 от Nicolas Dufresne <[email protected]>:
> 
>Hi,
> 
>Le mercredi 26 juillet 2023 à 18:48 +0300, Антон Шаров via gstreamer-devel a écrit :
>>Hi.
>> 
>>Where I can find example of reading mp4 file frame by frame, so it was equivalent to OpenCv code like:
> 
>The question is ambiguous, since MP4 containers can contains multiple streams and metadata. Do you want to read each video frame of the first video frame ? Do you want these to be coded or decoded ? All this is important, because before pulling this data into your application (I would suggesting using appsink element), you will have to design the right pipeline.
> 
>Nicolas
> 
>> 
>>while(cap.isOpened()):
>>  # Capture frame-by-frame
>>   ret, frame = cap.read()
>> 
>>I saw this frame stepping example  https://fossies.org/linux/gstreamer/tests/examples/stepping/framestep1.c
>>and .  I’ve tried to recreate this example on gstreamer-sharp and here is my approach:
>>https://gist.github.com/sharov-am/78949b8866235ca14112818385893152
> 
>Frame stepping is unlikely what you are a looking for.
> 
>> 
>>And of course it doesn’t work. I’ve read this doc ( https://gstreamer.freedesktop.org/documentation/additional/design/framestep.html?gi-language=c#frame-stepping )
>>and got from it that there are two main very important parameters like flush and intermediate and sequnce of events:
>>2 step start and 1 step done. Also I expected that appsink preroll or new-sample event would be raised, but nothing
>>happens.
>> 
>>My expectations are: I raise step event, some machinery happens and eventually I handle appsink preroll or new-sample
>>events with needed frame buffer with actual frame. And it continues till EOS (end of file).
>>So, what I’m doing wrong?
>> 
>>Also, I’ve noticed that my pipe has WARN messages like
>> 
>>WARN                 basesrc gstbasesrc.c:3132:gst_base_src_loop:<filesrc> error: Internal data stream error.
>>WARN                 basesrc gstbasesrc.c:3132:gst_base_src_loop:<filesrc> error: streaming stopped, reason not-linked (-1)
>>but I’m not sure that this is the cause…
>>Thanks in advance.
>> 
>> 
>> 
> 
> 
 
 
--
С Уважением,
Шаров Антон
 
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.