storing one video stream into multiple files

Jan Spurny JSpurny at seznam.cz
Thu Feb 2 11:52:48 PST 2012


Hi,

thanks for reply. No I don't exactly need mp4 container, that was just an example - what I need is something which can be played almost everywhere and  I was also hoping I can come up with some universal solution, so if for some reason we won't be able to use some codec/container in future (patents..) then it would be easy to change. But I can probably settle for just mpeg-ts for now.

I had some problems with pipeline when I tried re-encoding the stream and then muxing to mpeg-ts, but I hope that won't be a big problem.

So I just write my version of multifilesink and I'm done...

Jan Spurny


On Thu, 02 Feb 2012 17:53:16 +0100 (CET)
Jaroslav Klaus <jaroslav.klaus at gmail.com> wrote:

> Hi,
> 
> Do you really need mp4 container? I don't believe multifilesink will work with mp4mux out of the box. Transport stream is definitely much better.
> 
> If you really need MP4 I would take a look in lighttp's code for h.264/mp4 streaming (http://h264.code-shop.com/trac/wiki/Mod-H264-Streaming)  to repeat mp4 atoms.
> 
> jk
> 
> On 2. 2. 2012, at 17:39, Jan Spurny wrote:
> 
> > Hi,
> > 
> > thanks for reply, this is definitely working, but I need solution within gstreamer pipeline.
> > So I just have to look into ffmpeg sources and then replicate this functionality in my new element..
> > 
> > Jan Spurny
> > 
> > On Thu, 02 Feb 2012 16:31:13 +0100 (CET)
> > Angel Martin <amartin at vicomtech.org> wrote:
> > 
> >> Hi,
> >> 
> >> First of all, I am not sure that you could do this process in this place of
> >> the pipeline where you are trying to, because you don't control there when
> >> a Intra frame comes, so the files could not be correctly visualized later.
> >> 
> >> Maybe this solution, based on ffmpeg, could fix your problem:
> >> http://ffmpeg.org/ffmpeg.html#segment
> >> 
> >> You can find a more contextualized explanation here:
> >> http://forums.creativecow.net/thread/291/616
> >> 
> >> Best,
> >> 
> >> Angel
> >> 
> >> 2012/2/2 Jan Spurny <JSpurny at seznam.cz>
> >> 
> >>> Hi,
> >>> 
> >>> thanks for reply, at first I thought that multifilesink was only useful
> >>> for dumping single frames, but than I found out it allows file splitting
> >>> not only on buffer boundary, but also on discontinuity (?? I don't really
> >>> know what that means) or key-frame.
> >>> Using key-frame as a boundary seems to work, but only with mpeg ts
> >>> streams, but I was only able to split incoming stream. When I tried some
> >>> re-encoding the pipeline has failed.
> >>> So it's a good start, but this way I have no control over the size of
> >>> resulting files and also I'm stuck with original stream format.
> >>> 
> >>> For example, this "works" (vid.avi containst h264 stream):
> >>> 
> >>> gst-launch filesrc location=vid.avi \
> >>>      ! avidemux \
> >>>      ! mpegtsmux \
> >>>      ! multifilesink next-file=key-frame location=file-%03d.mpg
> >>> 
> >>> and resulting mpeg files are playable, but as I said, I'll have many
> >>> different inputs and I need to re-encode the stream to some default format,
> >>> so when I tried this to get 30s fragments with h264:
> >>> 
> >>> gst-launch filesrc location=vid.avi \
> >>>      ! decodebin \
> >>>      ! x264enc \
> >>>      ! mp4mux fragment-duration=30000 \
> >>>      ! multifilesink next-file=key-frame location=file-%03d.mp4
> >>> 
> >>> then I got first mp4 file which looks fine and I can play it, but the
> >>> others are somehow invalid and I can't play them.
> >>> 
> >>> It seems to me that while mp4mux and multifilesink works fine together,
> >>> some crucial mp4 header is lost for all but the first file.
> >>> 
> >>> Also the first playable file segment has length of 10 seconds regardless
> >>> of the specified "fragment-duration", so I probably got this one wrong..
> >>> And to make things even stranger, without "fragment-duration" option, even
> >>> the first file is not playable..
> >>> 
> >>> Anyway, it seems that I'm at least moving in the right direction..
> >>> 
> >>> 
> >>> Jan Spurny
> >>> 
> >>> On Thu, 02 Feb 2012 09:43:44 +0100 (CET)
> >>> Garbriel Neumüller <horsthuchen at googlemail.com> wrote:
> >>> 
> >>>> Hi,
> >>>> do you know the Multifilesink plugin?
> >>>> I think it would do exactly what you expect .
> >>>> I never used it by my own but it sounds quite well.
> >>>> 
> >>>> 
> >>>> 
> >>>> -----Ursprüngliche Nachricht-----
> >>>> Von:
> >>>> gstreamer-devel-bounces+horsthuchen=googlemail.com at lists.freedesktop.org
> >>>> [mailto:gstreamer-devel-bounces+horsthuchen
> >>> =googlemail.com at lists.freedesktop
> >>>> .org] Im Auftrag von Jan Spurny
> >>>> Gesendet: Mittwoch, 1. Februar 2012 12:01
> >>>> An: gstreamer-devel at lists.freedesktop.org
> >>>> Betreff: storing one video stream into multiple files
> >>>> 
> >>>> Hi,
> >>>> 
> >>>> I'm trying to store video from one video stream into multiple files with
> >>>> given duration.
> >>>> Something which could look like this:
> >>>> 
> >>>> gst-launch souphttpsrc location=http://1.2.3.4/video1 ! decodebin !
> >>> x264enc
> >>>> ! SOMETHING filename="file_%D_%T.mp4" duration=2m
> >>>> 
> >>>> and it would produce files like these:
> >>>> 
> >>>> file_2012-02-01_10-12-43.mp4
> >>>> file_2012-02-01_10-14-43.mp4
> >>>> file_2012-02-01_10-16-43.mp4
> >>>> ..
> >>>> 
> >>>> I don't expect that element "SOMETHING" already exists so I'll have to
> >>> write
> >>>> it myself. I have written a few simple gstreamer elements (mostly some
> >>> kind
> >>>> of raw-video transformations) so I'm quite confident I'll be able to do
> >>> it,
> >>>> but I do need all advices and guidelines I can get.
> >>>> 
> >>>> I'll have many different inputs - different input sources (files, http
> >>>> streams, rtsp streams, v4l, ..) and also different input formats (mjpeg,
> >>>> mpeg4, h264, raw-yuv). But that's ok, gstreamer can handle these without
> >>>> problems.
> >>>> 
> >>>> Now I can either just simply reuse the stream and just "cut it into
> >>> chunks
> >>>> of desired length", but as there are so many different formats to work
> >>>> with..
> >>>> Or I'll just recode video into some default format. That's why I have a
> >>>> "decodebin ! x264enc" in my pipeline above. I may support more formats in
> >>>> the future but for the first version one is enough.
> >>>> 
> >>>> So with one known format (let's say h264) I'll have to "pack it" (muxer)
> >>>> into small chunks and write them down to disk.
> >>>> 
> >>>> This is the part where I don't really know where to start - I guess
> >>> studying
> >>>> some existing muxer and would be a good start, but I'm really scared of
> >>> all
> >>>> the complexity with encoded video streams, B-frames, I-frames, and all
> >>>> this..
> >>>> 
> >>>> 
> >>>> Thanks in advance for any help, advices or suggestions.
> >>>> 
> >>>> Jan Spurny
> >>>> _______________________________________________
> >>>> gstreamer-devel mailing list
> >>>> 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
> >>> _______________________________________________
> >>> gstreamer-devel mailing list
> >>> 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
> 
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


More information about the gstreamer-devel mailing list