gstreamer python appsrc and mp3 files in python
Josef Novak
josef.robert.novak at gmail.com
Sun Aug 21 15:53:57 UTC 2016
Hi,
I am trying to setup a pipeline that will accept mp3 input to convert to
raw, using the appsrc source, and the python bindings.
In the command line, either of these work fine:
$ gst-launch-1.0 -v -m filesrc location=test/1-dual-30s.l.mp3 \
! decodebin ! audioconvert ! audioresample \
! audio/x-raw,format=S16LE,rate=8000,channels=1 \
! filesink location=out.raw
or
$ cat test/1-dual-30s.l.mp3 | gst-launch-1.0 -v -m fdsrc fd=0 \
! decodebin ! audioconvert ! audioresample \
! audio/x-raw,format=S16LE,rate=8000,channels=1 \
! filesink location=out.raw
however, when I try to replicate this with 'appsrc' and the python bindings:
-----------------------------
class DecodeToHTTPStreamPipeline () :
def __init__ (self, http_conf, blocksize, loop) :
self.HTTPClient = self._InitClient (http_conf, blocksize)
self.blocksize = blocksize
self.pipeline = gst.Pipeline ()
self.bus = self.pipeline.get_bus ()
self.bus.add_signal_watch ()
self.bus.enable_sync_message_emission ()
self.bus.connect ('message::eos', self._OnEOS)
self.bus.connect ('message::tag', self._OnTag)
self.bus.connect ('message::error', self._OnError)
self.audiosource = gst.ElementFactory.make ('appsrc', 'appsrc')
self.audiosource.set_property ("is-live", True)
self.decodebin = gst.ElementFactory.make ('decodebin', 'decodebin')
self.decodebin.connect ('pad-added', self._OnNewDecodedPad)
self.audioconvert = gst.ElementFactory.make ('audioconvert',
'audioconvert')
self.audioresample = gst.ElementFactory.make ('audioresample',
'audioresample')
self.capsfilter = gst.ElementFactory.make ('capsfilter',
'audio/x-raw,format=S16LE,rate=8000,channels=1')
self.audiosink = gst.ElementFactory.make ('appsink', 'appsink')
self.audiosink.set_property ("emit-signals", True)
self.audiosink.set_property ('drop', True)
self.audiosink.set_property ('sync', False)
self.audiosink.connect ('new-sample', self._OnNewBuffer, self.audiosink)
if (not (self.pipeline and self.audiosource and self.decodebin and \
self.audioconvert and self.audioresample and self.audiosink)) :
print "Error with configuration. Quitting."
sys.exit (-1)
self.pipeline.add (self.audiosource)
self.pipeline.add (self.decodebin)
self.pipeline.add (self.audioconvert)
self.pipeline.add (self.audioresample)
self.pipeline.add (self.capsfilter)
self.pipeline.add (self.audiosink)
#self.SetOutLocation (outlocation)
self.audiosource.link (self.decodebin)
self.decodebin.link (self.audioconvert)
self.audioconvert.link (self.audioresample)
self.audioresample.link (self.capsfilter)
self.capsfilter.link (self.audiosink)
self.loop = loop
self.pipeline.set_state (gst.State.PLAYING)
-----------------------------
I end up with a pipeline that works fine for a range of codecs: .wav,
.flac, etc, but it fails with .mp3 files in the sense that
it does not seem to detect them as .mp3 files, and the output is junk.
I noted that even on yakkety, gst-inspect lists avdec_mp3 is ranked as
'marginal', is it possible that this is the problem?
--------------------
$ gst-inspect-1.0 avdec_mp3
Factory Details:
Rank marginal (64)
Long-name libav MP3 (MPEG audio layer 3) decoder
----------------------
Is there a work around or reconfiguration for the python bindings that
does not involve recompiling everything from source?
A different combination of elements for .mp3 would be no problem, but
I could not find any that worked (including 'mad' or 'mpg123').
Best regards
-Joe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20160821/9114560b/attachment.html>
More information about the gstreamer-devel
mailing list