Simple Ogg Player

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.

Escribe un comentario