[gst-devel] gstreamer as a streamtranscoder

gstreamer at tech-no-logical.net gstreamer at tech-no-logical.net
Fri Jan 23 22:43:28 CET 2009


hi.

i'm trying to use gstreamer to transcode an ogg-stream to an
mp3-stream, both running on the same icecast host. seems
simple : uridecodebin ! lame ! shout2send and done (with
or without some ! queue elements in there somewhere).

i can't seem to get it to work though. whether using 
neonhttpsrc, gnomevfssrc or uridecodebin, whenever a
meta-data update is received, the element involved
sees an eos-message and dies :

> gst-launch -vvv neonhttpsrc location="http://localhost:8000/test.ogg" ! queue ! oggdemux ! vorbisdec ! audioconvert ! lame ! queue ! shout2send ip=127.0.0.10.1 port=8000 password=hackme mount=mp3
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstVorbisDec:vorbisdec0.GstPad:src: caps = audio/x-raw-float, rate=(int)44100, channels=(int)2, endianness=(int)1234, width=(int)32
/GstPipeline:pipeline0/GstVorbisDec:vorbisdec0.GstPad:sink: caps = audio/x-vorbis
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = audio/x-raw-float, rate=(int)44100, channels=(int)2, endianness=(int)1234, width=(int)32
/GstPipeline:pipeline0/GstLame:lame0.GstPad:src: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, channels=(int)2, rate=(int)44100
/GstPipeline:pipeline0/GstLame:lame0.GstPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, channels=(int)2, rate=(int)44100
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, channels=(int)2, rate=(int)44100
/GstPipeline:pipeline0/GstShout2send:shout2send0.GstPad:sink: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, channels=(int)2, rate=(int)44100
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 34083719000 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
/GstPipeline:pipeline0/GstShout2send:shout2send0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstLame:lame0.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstLame:lame0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstVorbisDec:vorbisdec0.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstVorbisDec:vorbisdec0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstOggDemux:oggdemux0.GstOggPad:serial_64880eeb: caps = NULL
Setting pipeline to NULL ...
FREEING pipeline ...

or, with uridecodebin :

gst-launch -vvv uridecodebin uri=http://localhost:8000/test.ogg ! audioconvert ! lame ! shout2send ip=127.0.0.1 port=8000 password=hackme mount=mp3
Setting pipeline to PAUSED ...
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0: source = (GstGnomeVFSSrc) source
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstGnomeVFSSrc:source: iradio-genre = "Various"
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstGnomeVFSSrc:source: iradio-name = "My Station name"
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstGnomeVFSSrc:source: iradio-url = "http://www.audiorealm.com"
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstTypeFindElement:typefindelement0.GstPad:src: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind: force-caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20: sink-caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:src: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue20.GstPad:sink: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue20.GstPad:src: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:sink: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20.GstGhostPad:sink: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20.GstGhostPad:sink: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20.GstGhostPad:sink.GstProxyPad:proxypad0: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstOggDemux:oggdemux0.GstPad:sink: caps = application/ogg
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:sink0: caps = audio/x-vorbis
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-buffers = 5
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-time = 2000000000
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0: max-size-bytes = 2097152
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:src0: caps = audio/x-vorbis
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstVorbisDec:vorbisdec1.GstPad:sink: caps = audio/x-vorbis
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = audio/x-raw-float, rate=(int)44100, channels=(int)2, endianness=(int)1234, width=(int)32
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0.GstGhostPad:src0: caps = audio/x-raw-float, rate=(int)44100, channels=(int)2, endianness=(int)1234, width=(int)32
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0.GstGhostPad:src0.GstProxyPad:proxypad2: caps = audio/x-raw-float, rate=(int)44100, channels=(int)2, endianness=(int)1234, width=(int)32
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20.GstGhostPad:src0: caps = audio/x-raw-float, rate=(int)44100, channels=(int)2, endianness=(int)1234, width=(int)32
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20.GstGhostPad:src0.GstProxyPad:proxypad1: caps = audio/x-raw-float, rate=(int)44100, channels=(int)2, endianness=(int)1234, width=(int)32
/GstPipeline:pipeline0/GstLame:lame0.GstPad:src: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, channels=(int)2, rate=(int)44100
/GstPipeline:pipeline0/GstLame:lame0.GstPad:sink: caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2
/GstPipeline:pipeline0/GstShout2send:shout2send0.GstPad:sink: caps = audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, channels=(int)2, rate=(int)44100
Prerolled, waiting for buffering to finish...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue1.GstPad:sink0: caps = audio/x-vorbis
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstVorbisDec:vorbisdec3.GstPad:src: caps = audio/x-raw-float, rate=(int)44100, channels=(int)2, endianness=(int)1234, width=(int)32
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue1: max-size-buffers = 5
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue1: max-size-time = 2000000000
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue1: max-size-bytes = 2097152
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue1: max-size-buffers = 5
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue1: max-size-time = 2000000000
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue1: max-size-bytes = 2097152
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue1.GstPad:src0: caps = audio/x-vorbis
/GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/GstVorbisDec:vorbisdec3.GstPad:sink: caps = audio/x-vorbis
Buffering, setting pipeline to PAUSED ...

at which point it just sits there and waits. 

it all works flawlessly until the next track-change on the icecast side...
some more info :
openbsd 4.4
gstreamer-0.10.21
gst-plugins-base-0.10.21
gst-plugins-good-0.10.11
gst-plugins-bad-0.10.9
gst-plugins-ugly-0.10.10
icecast-2.3.1

any thoughts ?

-- 
CUL8R, Peter.





More information about the gstreamer-devel mailing list