AW: storing one video stream into multiple files

Angel Martin amartin at vicomtech.org
Thu Feb 2 07:31:13 PST 2012


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20120202/8c5ae8ad/attachment.htm>


More information about the gstreamer-devel mailing list