Os traigo un reproductor de ficheros Ogg que hicimos hace unos meses. Utiliza Gstreamer para leer los datos de un fichero ogg. La tubería que utiliza es bastante sencilla: lee el fichero Ogg y se lo envía a la tarjeta de sonido, decodificandolo primero con oggdemux y vorbisdec.
import pygst
pygst.require("0.10")
import sys, gst, gobject
gobject.threads_init()
def main(args):
if len(args) != 2:
print "Uso:", args[0], " "
return -1
pipestr = 'filesrc location=' + args[1] + ' ! n' + 'oggdemux ! vorbisdec ! audioconvert ! alsasink n'
try:
pipeline = gst.parse_launch(pipestr)
except gobject.GError, e:
print "No es posible crear la tubería,", str(e)
return -1
def eventos(bus, msg):
t = msg.type
if t == gst.MESSAGE_EOS:
loop.quit()
elif t == gst.MESSAGE_ERROR:
e, d = msg.parse_error()
print "ERROR:", e
loop.quit()
return True
pipeline.get_bus().add_watch(eventos)
pipeline.set_state(gst.STATE_PLAYING)
loop = gobject.MainLoop()
try:
print "Reproduciendo..."
loop.run()
except KeyboardInterrupt: # Por si se pulsa Ctrl+C
pass
print "Parando...n!Adios!"
pipeline.set_state(gst.STATE_NULL)
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))
Este ejemplo demuestra la potencia que tiene GStreamer + Python. En pocas líneas de código tenemos toda la funcionalidad para reproducir ficheros Ogg, y con la flexibilidad que nos ofrece Gstreamer.
Con gstLaunch podemos probar las tuberías que vayamos a usar sin necesidad de programar nada. GstEditor podemos utilizarlo para diseñar las tuberías, conectando unos elementos a otros a través de sus “pads” o enchufes. Estas dos utilidades gstreamer nos serán útiles en varias situaciones para “jugar” con las tuberías Gstreamer.