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. >> >> >> > > -- С Уважением, Шаров Антон