AW: storing one video stream into multiple files

Jan Spurny JSpurny at seznam.cz
Thu Feb 2 04:40:33 PST 2012


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


More information about the gstreamer-devel mailing list