GStreamer

GStreamer
Información sobre la plantilla
GStreamer.jpg

GStreamer. Es un framework multimedia software libre multiplataforma escrito en el lenguaje de programación C, usando la biblioteca GObject.

Funcionalidades

GStreamer permite crear aplicaciones audiovisuales, como de vídeo, sonido, codificación, etc. Por ejemplo, con GStreamer se puede reproducir música o realizar tareas más complejas como mezclar audio y vídeo.

La función del núcleo de GStreamer es proveer un framework para complementos, flujo de datos y manejo/negociación de distintos tipos de medios. También provee una API para escribir aplicaciones.

El proyecto GStreamer comenzó en 1999 como proyecto universitario y empresarial. El fin era crear una librería de procesamiento multimedia que funcionase como un conjunto de plugins que pudiesen ser combinados al antojo del usuario. No sólo eso, debería ser posible portar la librería a cualquier arquitectura informática (Intel, PowerPC, PDAs...), por lo que tendría de ser pequeña y autónoma.

Historia

El proyecto fue adoptado por el escritorio Gnome como sistema de librerías multimedia desde Gnome 2.2. Su mantenedor es Wim Taymans, que ha trabajado en GStreamer desde casi el principio. Curiosamente, y a pesar de que es un proyecto con casi 10 años a sus espaldas, GStreamer se encuentra aún en su versión 0.10. Pero este número de versión no quiere decir nada, pues es un proyecto considerado estable desde hace años. Con GStreamer vamos uniendo distintos plugins uno tras otro hasta obtener el resultado que estabamos buscando.

El objetivo puede ser tan simple como querer escuchar un archivo de sonido o ver un vídeo, pero también podemos modificarlos haciéndolos pasar a través de distintos filtros, o podemos querer convertirlos de un formato a otro. El proyecto GStreamer hace esto posible a través de un par de herramientas de línea de comandos que, como veremos, poseen una seria complicación si queremos realizar cualquier acción medianamente complicada. Es ahí donde Python entra en juego, permitiéndonos crear combinaciones mucho más complejas.

Los plugins utilizados en gstreamer se clasifican en: Buenos, malos y feos

  • Bueno (Good) son los plugins que han sido revisados, tienen licencia LGPL y se consideran de buena calidad.
  • Malo (Bad) son aquellos a los que algo les falla, y . . .
  • Feo (Ugly) son aquellos que, aunque de buena calidad, imponen restricciones a su distribución, ya sea por licencia o porque no es fácil portarlos. GStreamer, como es lógico, recomienda trabajar siempre que sea posible con plugins «Buenos».

Listar los plugins instalados:

gst-inspect-0.10

Este sistema permite enlazar un plugin con otro:

fuente de datos ==> plugin ==> resultado ==> plugin, etc . . .

El plugin gnomevfs es especial pues nos permite acceder a archivos a través de la capa de abstracción de gnome, incluso, nos permite acceder a archivos remotos a través de samba y ssh.

Podemos reproducir un archivo desde la terminal:

gst-launch-0.10 playbin uri=file:///home/flavio/Escritorio/kiko.mp3

En este ejemplo, el plugin playbin se encarga de la reproducción.

Podemos realizar conversiones entre formatos de archivos, por ejemplo:

gst-launch-0.10 filesrc location="1.mp3" ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location="1.ogg"

En este ejemplo la fuente es un fichero (filesrc), que pasamos a través del plugin mad que convierte mp3 a raw, (formato sin codificar). Audioconvert realiza conversiones entre codificaciones, oggmux (que codifica OGG) y filesink guarda en un fichero.

Ejemplo utilizando python ==> Conversor-mp3-ogg.py

La manera más rápida de capturar una imagen fija de la cámara: gst-launch-0.10 v4l2src ! ffmpegcolorspace ! pngenc ! filesink location=mifoto.png

Ver video-camara: gst-launch-0.10 v4l2src ! ximagesink

Circuito cerrado de video (con 2 xo)

enviar:

gst-launch v4l2src ! video/x-raw-yuv,width=320,height=240,framerate=\(fraction\)2/1 ! ffmpegcolorspace ! smokeenc keyframe=8 qmax=40 ! udpsink host=192.168.1.1 port=5000

recibir:

gst-launch udpsrc port=5000 ! smokedec ! autovideosink

Circuito cerrado de audio y video(con 2 xo)

enviar:

gst-launch v4l2src ! queue ! video/x-raw-yuv,width=320,height=240,framerate=\(fraction\)4/1 ! videorate ! videoscale ! ffmpegcolorspace ! queue ! smokeenc ! queue ! udpsink host=192.168.1.1 port=5000 alsasrc ! queue ! audio/x-raw-int,rate=8000,channels=1,depth=8 ! audioconvert ! speexenc ! queue ! tcpserversink host=192.168.1.1 port=5001

recibir:

gst-launch-0.10 udpsrc port=5000 ! queue ! smokedec ! queue ! autovideosink tcpclientsrc host=192.168.1.5 port=5001 ! queue ! speexdec ! queue ! alsasink sync=false

Fuente