How to play mpeg4 dump (in a fifo)

Mailing List SVR lists at svrinformatica.it
Tue Nov 29 07:57:01 PST 2011


Il 29/11/2011 16:07, Nezer Zaidenberg ha scritto:
> Hi Nicola,
>
> Thanks, but I have read somewhere that I am better off using pad-block 
> or appsrc/sink (as you mentioned) since I want to connect two 
> pipelines in the same process.
> (as a side note, I used gdp[de]pay successfully to implement what I 
> wanted).
>
> I have considered using the pad-block - but it is too complicated and 
> it is underdocumented. For instance jokosher used pad-block not 
> knowing that it needs buffers to have the signal flushed and they only 
> found it out by a mail in the mailing list.
>
> Also, I don't want to stop the whole pipeline to finalize every 
> one-minute recording - when I try to send an eos to a regular 
> recording, it usually takes a couple of seconds for it to finalize - 
> and I don't want the user to experience this video freeze.
>
> I would like your opinion about something else (sorry if I am being 
> too bold) - appsink and appsrc are very general (good) ideas.

in an app of mine I'm using something like this:

source -> <some other elements> -> appsink

appsrc -> <some other elements> filesink

when I stop the second pipeline and change the filesink location I put 
the buffer from appsink in a gst_atomic_queue, and when the second 
pipeline is ready again I empty the queue.

I think this is considered an hack too, however works fine for me and I 
have all in the same app,

Nicola

> But what I am really looking for is a way to create a global queue - 
> and have one pipeline filling it and another (or others) emptying it.
> What I imagine (actually what I plan to implement) is a "queuesink" 
> that just queues the buffers it gets in a global queue, and a 
> "queuesrc" that takes a global queue and drains it.
> This would also fit well with all the other pipeline communication 
> ways like shm{sink,src}, tcp{client,server}{sink,src}, udp{src,sink}, 
> and even file{src,sink} that use a pipe.
>
> Now appsink and appsrc involve a lot of hacking to achieve this 
> (attaching signal handlers and removing them when a pipeline is 
> destroyed in a synchronized way) relatively, just to have simple 
> handlers that only save the buffers in a queue - a concept which plays 
> a central role in gstreamer already - and thus has a strong stable 
> implementation already.
>
> I feel that this simple idea will not gain much by using the full 
> power of the app{sink,src}, and would rather use an element that does 
> this job itself.
>
> Is there any element today in gstreamer that does this?
> If not, and if I implement such an element, do you have any 
> advice/remarks?
>
> Thanks,
>   Tomer
>
> On Mon, Nov 28, 2011 at 4:23 PM, Mailing List SVR 
> <lists at svrinformatica.it <mailto:lists at svrinformatica.it>> wrote:
>
>     Il 28/11/2011 12:34, Nezer Zaidenberg ha scritto:
>>     Hi All,
>>
>>     I have a live source (webcam) that I want to record continuously
>>     without losing any video - but also be able to playback
>>     everything up to the last minute. I am trying to dump the video
>>     to a fifo and then record it from the fifo one minute at a time.
>>
>>     The problem is that it seems there is a problem with the
>>     timestamps. It looks like gstreamer expects a clock to be
>>     supplied by the filesrc but that doesn't happen.
>>     Specifically when I try to play the pipe instead of record it, I
>>     get choppy video and a warning is emitted about the timestamps.
>>
>>     Does anyone know how I could record an mpeg stream from a fifo?
>>
>>     For reference, here are the pipelines:
>>     source pipe:
>>     gst-launch rtspsrc location="<webcam>" ! rtpmp4vdepay ! filesink
>>     location=pipe
>>
>>     record pipe:
>>     gst-launch filesrc location=pipe ! 'video/mpeg, mpegversion=4,
>>     systemstream=false, width=320, height=240.
>>     framerate=(fraction)30/1, codec_data=...' ! matroskamux !
>>     filesink location="1.mkv"
>>
>>     play pipe:
>>     gst-launch filesrc location=pipe ! 'video/mpeg, mpegversion=4,
>>     systemstream=false, width=320, height=240.
>>     framerate=(fraction)30/1, codec_data=...' ! ffdec_mpeg4 !
>>     ffmpegcolorspace ! autovideosink
>
>     try to add do-timestamp=true to the filesrc element (or sync=false
>     to the videosink), however gstreamer allow to record and play with
>     only 1 pipeline, no need for this hack:
>
>     http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-tee.html
>     http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gstreamer-app.html
>
>     Nicola
>
>>
>>     Thanks,
>>       Tomer & Nezer
>>
>>
>>
>>
>>     _______________________________________________
>>     gstreamer-devel mailing list
>>     gstreamer-devel at lists.freedesktop.org  <mailto:gstreamer-devel at lists.freedesktop.org>
>>     http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
>     _______________________________________________
>     gstreamer-devel mailing list
>     gstreamer-devel at lists.freedesktop.org
>     <mailto:gstreamer-devel at lists.freedesktop.org>
>     http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20111129/50115574/attachment.htm>


More information about the gstreamer-devel mailing list