Super tutorial de introducción a GStreamer
En este pequeño repaso vamos a ver algunos ejemplos de cosas simples que podemos hacer desde la consola con GStreamer y a explicar un poco su funcionamiento.
Introducción a GStreamer
Gstreamer es, hoy por hoy, prácticamente el framework multimedia de facto en GNU/Linux. Con GStreamer podemos por ejemplo:
- Mezclar diferentes tipos de medios como pueden ser señales de audio, video, imágenes y subtitulos.
- Permite aplicar diferentes tipos de filtros tanto de audio como de video.
- Transmisión y recepción de datos en tiempo real.
- Codificación y decodificación en diferentes formatos.
- Reproducción de archivos multimedias.
- Y así un muy largo etcetera de posibilidades.
Un gran numero proyectos muy conocidos hacen uso de GStreamer como por ejemplo: Kaffeine, Totem, Cheese, Kamoso, Pidgin, Empathy, Gnash, Phonon, Transmageddon, Pitivi, y muchas, muchas más. Si te interesa lo que acabas de leer pues entonces comencemos.
Instalación de GStreamer
Primero debemos instalar todos los paquetes necesarios para hacer uso de GStreamer (si es que todavía no lo hemos hecho). Debemos ejecutar (como root) el siguiente comando según nuestra distro:
- Arch/Chakra/Parabola: pacman -S gstreamer0.10 gstreamer0.10-good gstreamer0.10-bad
- Debian/Ubuntu/Linux Mint/Trisquel: apt-get install gstreamer0.10-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad
- Fedora/CentOS: yum install gstreamer gstreamer-plugins-good gstreamer-plugins-bad-free
- OpenSuSE: zypper install gstreamer-0_10-utils gstreamer-0_10-plugins-good gstreamer-0_10-plugins-bad
- Mandriva/Mageia: urpmi gstreamer0.10-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad
Con esto ya estamos listos para comenzar.
Elementos, Pads, Sources y Sinks
GStreamer divide cada unidad básica de procesamiento en lo que se conoce como Elementos.
A su vez cada elemento puede tener una, varias, o ninguna conexión de entrada o de salida, dichas conexiones se las conoce como pads. A su vez los elementos que solo entregan señal se los conoce como source (Fuentes), y los que solo reciben señal se los conoce como sink (Consumidores).
Ahora que ya sabemos esto, vamos a hacer nuestro primer experimento con GStreamer. Para ello utilizaremos el comando gst-launch-0.10 (puede variar el nombre según la distro) de la siguiente manera:
1 | gst-launch-0.10 videotestsrc ! ximagesink |
videotestsrc es un elemento del tipo source que genera una señal de video similar al del inicio y fin de transmisión los canales de TV.
ximagesink es un elemento del tipo sink que renderiza todas las señales de video que le llegan en una ventana.
GStreamer utiliza el operador ! (exclamación) para vincular los elementos, a esa vinculación de elementos se la conoce como pipe (tubería), y a la ruta total formada por la vinculación de todos los elementos se le llama pipeline (red de tuberías).
El resultado de ejecutar dicho comando será este:
Para consultar la lista completa de elementos que provee GStreamer podemos usar el comando gst-inspect-0.10 (puede variar el nombre según la distro) cuya salida será parecida a esta (suele ser bastante mas larga):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | qtvideosink: qtvideosink: Qt video sink qtvideosink: qtglvideosink: Qt GL video sink qtvideosink: qwidgetvideosink: QWidget video sink bluetooth: rtpsbcpay: RTP packet payloader bluetooth: a2dpsink: Bluetooth A2DP sink bluetooth: avdtpsink: Bluetooth AVDTP sink bluetooth: sbcparse: Bluetooth SBC parser bluetooth: sbcdec: Bluetooth SBC decoder bluetooth: sbcenc: Bluetooth SBC encoder bluetooth: sbc: sbc bayer: rgb2bayer: RGB to Bayer converter bayer: bayer2rgb: Bayer to RGB decoder for cameras schro: schroenc: Dirac Encoder schro: schrodec: Dirac Decoder vp8: vp8enc: On2 VP8 Encoder vp8: vp8dec: On2 VP8 Decoder festival: festival: Festival Text-to-Speech synthesizer |
El formato de dicha salida es el siguiente:
1 | grupo: nombredelelemento: descripcion |
Para consultar la información sobre cada elemento usaremos el siguiente comando:
1 | gst-inspect-0.10 nombredelelemento |
Por ejemplo para el elemento ximagesink, su salida correspondiente será esta:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | Factory Details: Long name: Video sink Class: Sink/Video Description: A standard X based videosink Author(s): Julien Moutte <julien@moutte.net> Rank: secondary (128) Plugin Details: Name: ximagesink Description: X11 video output element based on standard Xlib calls Filename: /usr/lib/gstreamer-0.10/libgstximagesink.so Version: 0.10.36 License: LGPL Source module: gst-plugins-base Source release date: 2012-02-20 Binary package: GStreamer Base Plugins (Archlinux) Origin URL: http://www.archlinux.org/ GObject +----GstObject +----GstElement +----GstBaseSink +----GstVideoSink +----GstXImageSink Interfaces implementados: GstImplementsInterface GstNavigation GstXOverlay Pad Templates: SINK template: 'sink' Availability: Always Capabilities: video/x-raw-rgb framerate: [ 0/1, 2147483647/1 ] width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] Element Flags: no flags set Element Implementation: Has change_state() function: 0x7fe77f8e5490 Has custom save_thyself() function: gst_element_save_thyself Has custom restore_thyself() function: gst_element_restore_thyself Element has no clocking capabilities. Element has no indexing capabilities. Element has no URI handling capabilities. Pads: SINK: 'sink' Implementation: Has chainfunc(): gst_base_sink_chain Has custom eventfunc(): gst_base_sink_event Has custom queryfunc(): gst_base_sink_sink_query Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default Has bufferallocfunc(): gst_base_sink_pad_buffer_alloc Has getcapsfunc(): gst_base_sink_pad_getcaps Has setcapsfunc(): gst_base_sink_pad_setcaps Has acceptcapsfunc(): gst_pad_acceptcaps_default Has fixatecapsfunc(): gst_base_sink_pad_fixate Pad Template: 'sink' Element Properties: name : The name of the object flags: legible, escribible String. Default: "ximagesink0" preroll-queue-len : Number of buffers to queue during preroll flags: legible, escribible Unsigned Integer. Range: 0 - 4294967295 Default: 0 sync : Sync on the clock flags: legible, escribible Boolean. Default: true max-lateness : Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited) flags: legible, escribible Integer64. Range: -1 - 9223372036854775807 Default: 20000000 qos : Generate Quality-of-Service events upstream flags: legible, escribible Boolean. Default: true async : Go asynchronously to PAUSED flags: legible, escribible Boolean. Default: true ts-offset : Timestamp offset in nanoseconds flags: legible, escribible Integer64. Range: -9223372036854775808 - 9223372036854775807 Default: 0 enable-last-buffer : Enable the last-buffer property flags: legible, escribible Boolean. Default: true last-buffer : The last buffer received in the sink flags: legible MiniObject of type "GstBuffer" blocksize : Size in bytes to pull per buffer (0 = default) flags: legible, escribible Unsigned Integer. Range: 0 - 4294967295 Default: 4096 render-delay : Additional render delay of the sink in nanoseconds flags: legible, escribible Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 throttle-time : The time to keep between rendered buffers (unused) flags: legible, escribible Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 show-preroll-frame : Whether to render video frames during preroll flags: legible, escribible Boolean. Default: true display : X Display name flags: legible, escribible String. Default: null synchronous : When enabled, runs the X display in synchronous mode. (unrelated to A/V sync, used only for debugging) flags: legible, escribible Boolean. Default: false pixel-aspect-ratio : The pixel aspect ratio of the device flags: legible, escribible String. Default: null force-aspect-ratio : When enabled, reverse caps negotiation (scaling) will respect original aspect ratio flags: legible, escribible Boolean. Default: false handle-events : When enabled, XEvents will be selected and handled flags: legible, escribible Boolean. Default: true handle-expose : When enabled, the current frame will always be drawn in response to X Expose events flags: legible, escribible Boolean. Default: true window-width : Width of the window flags: legible Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 window-height : Height of the window flags: legible Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 |
Dentro de la información devuelta por gst-inspect-0.10 podrán encontrar un campo llamado Source module el cual indica el grupo al que pertenece dicho elemento. GStreamer divide los diferentes elementos de los que hace uso en diferentes categorías:
- gst-plugins-base: Este grupo contiene todo un conjunto de plugins básicos bien soportados, que permiten, por ejemplo, el acceso a ficheros, acceso al hardware del sistema, acceso HTTP y FTP, etc..
- gst-plugins-good: Este grupo contiene elementos extras (principalmente codecs y efectos) bien soportados.
- gst-plugins-bad: Este grupo contiene elementos extras pero que podrían tener algún bug.
- gst-plugins-ugly: Este grupo contiene elementos que podrían tener problemas de patentes o que podrían no ser Software Libre.
Propiedades y Caps
A su vez podemos personalizar cada elemento mediante sus propiedades, así como también podemos filtrar el tipo de señal que envía o recibe cada elemento mediante el uso de caps (capacidades). Por ejemplo:
1 | gst-launch-0.10 videotestsrc pattern='ball' ! video/x-raw-rgb,width=800,height=600,framerate=100/1 ! ximagesink |
El formato para las propiedades es básicamente:
1 | nombredelelemento prop1=val1 prop2=val2 prop3=val3 ... |
Los caps se colocan como otro elemento y cada propiedad va separada por , (coma).
Adaptadores
Los adaptadores son un tipo especial de elementos que permiten conectar dos elementos con capacidades diferentes.
En el siguiente ejemplo capturamos imágenes de la webcam, la cual está en formato YUV y mediante el uso del elemento ffmpegcolorspace la convertimos automáticamente a RGB
1 | gst-launch-0.10 v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! ximagesink |
Mientras que para adaptar señales de audio se utiliza el elemento audioconvert. Por ejemplo:
1 | gst-launch-0.10 audiotestsrc ! audioconvert ! alsasink |
Codecs
Los codecs son elementos que nos permiten entre otras cosas comprimir o descomprimir la información contenida dentro de un archivo de audio, video o imagen. Por ejemplo para mostrar una imagen en formato PNG usamos el comando:
1 | gst-launch-0.10 filesrc location=imagen.png ! pngdec ! freeze ! ffmpegcolorspace ! ximagesink |
filesrc permite abrir cualquier tipo de archivo y entrega toda la información en formato crudo (tal y como esta almacenada).
pngdec es el codec que sirve para descomprimir la información en formato PNG y convertirla a RGB en crudo.
El elemento freeze permite congelar el flujo de datos. Si no estuviera presente, la ventana se cerraría automáticamente sin mostrar la imagen.
En el siguiente ejemplo vamos a ver como hacer una captura de pantalla y guardarla en formato PNG:
1 | gst-launch-0.10 ximagesrc ! ffmpegcolorspace ! pngenc ! filesink location=captura.png |
Puede notar que esta vez no es necesario utilizar el elemento freeze pues no es nuestra intención bloquear el flujo de datos, y que también invertimos el flujo de datos cambiando el tipo de cada elemento, lo que antes era src pasa a ser sink y viceversa.
Bifurcaciones, muxers y Queues
Hasta ahora veníamos procesando todas las señales de forma completamente lineal, una atrás de otra. Pero GStreamer ofrece un mecanismo especial con el cual podemos romper con esa linealidad y procesar varias pipes al mismo tiempo, con lo cual podemos crear pipelines mas complejas y dinámicas.
Supongamos que queremos realizar una captura de pantalla y guardarla en dos formatos diferentes al mismo tiempo, por ejemplo en formato PNG y JPG. Para ello podemos utilizar el siguiente comando:
1 2 3 | gst-launch-0.10 ximagesrc ! tee name=bifurcacion \ bifurcacion. ! queue ! ffmpegcolorspace ! pngenc ! filesink location=captura.png \ bifurcacion. ! queue ! ffmpegcolorspace ! jpegenc ! filesink location=captura.jpg |
Aquí podemos ver dos nuevos elementos, tee (bifurcación) y queue (cola).
tee es un elemento que posee un único pad de entrada y es capaz de dividir la señal de entrada entre varias señales de salida idénticas a la entrada.
Para hacer uso del elemento tee debemos asignarle un nombre mediante la propiedad name (todos los elementos de GStreamer poseen esta propiedad), para conectar un pipeline al tee basta con usar el nombre asignado al tee, seguido de un . (punto), como si fuera cualquier otro elemento.
Luego de declarar el elemento tee no debemos colocar el operador ! (exclamación), ya que un tee representa el final de un pipeline.
El elemento queue permite destrabar el flujo de datos en caso de tener varias pipes conectadas a un único pad. Si no hubiesemos colocado un queue entonces las pipelines correspondientes a los codecs de PNG y JPG se hubieran bloqueado mutuamente, y por lo tanto GStreamer hubiera quedado bloqueado sin escribir ningun dato en los respectivos archivos.
En contraposición al elemento tee tenemos al elemento muxer (multiplexor o mezclador), el cual posee varios pads de entrada y un único pad de salida, por lo tanto funciona como un mezclador de señales (de tipos iguales o diferentes).
Por ejemplo, para grabar un video en formato WEBM usando la webcam y un micrófono, usaríamos el siguiente comando:
1 2 3 4 | gst-launch-0.10 -e v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! \ ffmpegcolorspace ! vp8enc quality=10 speed=7 bitrate=1000000000 ! queue ! mezclador. \ alsasrc device=plughw:0,0 ! queue ! audioconvert ! queue ! vorbisenc ! queue ! mezclador. \ webmmux name=mezclador ! filesink location=webcam.webm |
El elemento muxer al igual que el elemento tee necesita un nombre para poder utilizarlo. En este caso el elemento webmmux es un muxer el cual mezcla una señal de video comprimida con el codec vp8enc en formato VP8, y otra señal de audio comprimida con el codec vorbisenc en formato Vorbis.
El elemento alsasrc captura el audio proveniente de microfono por defecto usando ALSA.
A su vez se ha añadido la opción -e a gst-launch-0.10, esta opción permite que cuando el usuario detenga el programa usando, por ejemplo CTRL + C, GStreamer pueda cerrar los archivos y todos los flujos correctamente.
También podemos hacer uso de los elementos tee y muxer al mismo tiempo. Con el siguiente comando podemos grabar video desde la webcam mas el audio del micrófono mientras previsualizamos la captura en una ventana:
1 2 3 4 5 | gst-launch-0.10 -e v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! tee name=bifurcacion \ bifurcacion. ! queue ! ffmpegcolorspace ! ximagesink \ bifurcacion. ! queue ! ffmpegcolorspace ! vp8enc quality=10 speed=7 bitrate=1000000000 ! queue ! mezclador. \ alsasrc device=plughw:0,0 ! queue ! audioconvert ! queue ! vorbisenc ! queue ! mezclador. \ webmmux name=mezclador ! filesink location=webcam.webm |
Bins
Un bin (contenedor) es un elemento que encapsula todo un pipeline completo. Por ejemplo para capturar imágenes de la webcam podemos utilizar el siguiente comando:
1 | gst-launch-0.10 camerabin |
ó
1 | gst-launch-0.10 camerabin2 |
Los elementos camerabin y camerabin2 encapsulan todo un pipeline completo que permite mostrar la webcam en un ximagesink, grabar video, y hacer capturas de video, aunque desde linea de comandos solo está disponible la primera opción, las otras dos opciones solo están disponibles desde la API en C sólo para programadores.
Para reproducir un video, audio o visualizar una imagen desde el disco duro podemos usar el siguiente comando:
1 | gst-launch-0.10 playbin uri='file:///ruta/completa/del/video.webm' |
Si por el contrario queremos reproducir algún archivo que esta en internet usamos la dirección web del mismo:
1 | gst-launch-0.10 playbin uri='http://www.pagina.com/del/archivo/de/musica.ogg' |
También hay bins que en lugar de crear un reproductor completo solo descomprimen los archivos en sus señales básicas. Por ejemplo:
1 2 3 | gst-launch-0.10 filesrc location=video.webm ! decodebin name=decodificador \ decodificador. ! ffmpegcolorspace ! ximagesink \ decodificador. ! audioconvert ! alsasink |
Y por supuesto también tenemos su contraparte:
1 2 3 | gst-launch-0.10 -e v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! codificador. \ alsasrc device=plughw:0,0 ! audioconvert ! codificador. \ encodebin name=codificador ! filesink location=video.webm |
Composición de Video
Otra potente opción que nos ofrece GStreamer es la de hacer composiciones de video utilizando varias fuentes utilizando el elemento videomixer el cual funciona de manera similar a un muxer. Veamos un ejemplo sencillo:
1 2 3 | gst-launch-0.10 videotestsrc ! video/x-raw-yuv,width=320,height=240,framerate=30/1 ! mezclador. \ videotestsrc pattern='ball' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! mezclador. \ videomixer name=mezclador ! ffmpegcolorspace ! xvimagesink |
El resultado será este:
Como podrás notar, la fuente de video que se declara primero es la primera que se dibuja y que la última que se declara es la última que se dibuja, por defecto videomixer dibuja las fuentes en el mismo orden en el que se las declara.
Por supuesto GStreamer provee un mecanismo muy simple por el cual no solo podemos cambiar el orden de dibujo, sino que también podemos cambiar la posición en la que se dibuja cada fuente. El elemento que provee dicho mecanismo se llama videobox. Veamos un ejemplo:
1 2 3 4 5 6 7 8 9 | gst-launch-0.10 videotestsrc pattern='smpte' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! \ videobox top=0 left=0 border-alpha=0 ! mezclador. \ videotestsrc pattern='snow' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! \ videobox top=0 left=-160 border-alpha=0 ! mezclador. \ videotestsrc pattern='circular' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! \ videobox top=-120 left=0 border-alpha=0 ! mezclador. \ videotestsrc pattern='ball' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! \ videobox top=-120 left=-160 border-alpha=0 ! mezclador. \ videomixer name=mezclador ! ffmpegcolorspace ! xvimagesink |
Las propiedades top, left, bottom y right indican la separación entre el cuadro y su posición originasl en el lateral correspondiente. Las propiedad border-alpha indica la visibilidad que tendrá el borde del cuadro.
Este será el resultado:
Superposición de Texto
GStreamer también nos permite superponer texto sobre una imagen usando el elemento textoverlay. Aquí un ejemplo:
1 2 3 | gst-launch-0.10 videotestsrc pattern='snow' ! \ textoverlay font-desc="Sans Bold 30" text='No hay señal de TV ;(' valign=bottom halign=center color=4294967040 ! \ ffmpegcolorspace ! xvimagesink |
La propiedad font-desc permite seleccionar el nombre, los atributos y el tamaño de la fuente a utilizar. Las propiedades valign y halign permiten alinear el texto. La propiedad color es un entero que representa un color en el formato ARGB, por ejemplo: 0xFFFFFF00 (amarillo) = 4294967040.
Este es el resultado:
Efectos de Audio y Video
GStrreamer también nos ofrece la posibilidad de aplicar efectos tanto de imagen como de sonido.
El siguiente ejemplo aplica un efecto de distorsión a la webcam:
1 | gst-launch-0.10 v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! square ! ffmpegcolorspace ! ximagesink |
Esta es la imagen original sin el efecto de distorsión:
Y esta la imagen de la webcam con el efecto aplicado:
Aquí dejo una lista de todos los plugins de efectos de video:
- agingtv
- bulge
- burn
- chromium
- dicetv
- edgetv
- exclusion
- fisheye
- kaleidoscope
- marble
- mirror
- optv
- pinch
- quarktv
- radioactv
- revtv
- rippletv
- shagadelictv
- solarize
- sphere
- square
- streaktv
- stretch
- tunnel
- twirl
- vertigotv
- warptv
- waterripple
Y para aplicar efectos de sonido, en este caso un efecto de eco (se recomienda usar auriculares para evitar acoplamiento):
1 | gst-launch-0.10 alsasrc device=plughw:0,0 ! audioconvert ! audioecho intensity=0.6 feedback=0.4 delay=400000000 ! audioconvert ! alsasink |
Aquí dejo una lista de todos los plugins de efectos de audio:
- audioamplify
- audiochebband
- audiocheblimit
- audiodynamic
- audioecho
- audiofirfilter
- audioiirfilter
- audioinvert
- audiopanorama
- audiokaraoke
- audiowsincband
- audiowsinclimit
Visualizacion de Audio
Hace hace algunos años estaban de moda los reproductores de música que traían visualizaciones integradas. Las visualizaciones de audio son aquellos gráficos que cambian su forma de acuerdo con el compás y estridencia de la música.
Para los nostálgicos, aquí está el comando para mostrar dichas visualizaciones al ritmo de la música:
1 2 3 | gst-launch-0.10 filesrc location=musica.ogg ! decodebin ! tee name=bifurcacion \ bifurcacion. ! queue ! audioconvert ! alsasink \ bifurcacion. ! queue ! audioconvert ! goom2k1 ! ffmpegcolorspace ! ximagesink |
Este es el resultado:
Aquí dejo una lista de todos los plugins de visualizaciones:
- goom
- goom2k1
- libvisual
- monoscope
- spacescope
- spectrascope
- synaescope
- wavescope
Fin
Y llegamos al final de esta pequeña introducción a la magnífica herramienta multimedia que es GStreamer. Pueden encontrar más información en la página del proyecto aquí abajo.
GStreamer | Página principal de GStreamer
GStreamer | Resumen de todos los plugins para GStreamer
Temas:
Actualidad, Documentación, Entretenimiento, GNU y Software Libre, Multimedia, Programación





















jul 13th, 2012 at 0:47
Usamos a diario Gstreamer pero apenas si sabemos de el…..
Impresionante, excelente aporte ¿y dices que solo es una pequeña introducción? como será entonces la introducción completa!!!
Un saludo
jul 13th, 2012 at 8:55
Excelente introductorio, felicitaciones por el buen trabajo.
Saludos.
jul 13th, 2012 at 11:08
Y todavía faltaría, por ejemplo, explicar como hacer streaming usando rtpbin, por ejemplo para hacer transmisión de radio o TV por internet, o para hacer video llamadas, pero esto ya es un poco más complicado de explicar, hay que tener algunos conocimientos extras.
jul 13th, 2012 at 15:38
Muy buen tutorial introductorio. Estuve ejecutando alguno que otro comando. Te felicito.
Saludos
jul 16th, 2012 at 12:51
Demasiado para asimilarlo de una tacada..
¿¿ Puedes publicarlo para poderlo imprimir y releerlo un par de veces ??
Gracias….
jul 16th, 2012 at 14:56
Puedes usar PrintFriendly para convertir el artículo a PDF:
http://www.printfriendly.com/print/v2?url=http%3A%2F%2Fwww.espaciolinux.com%2F2012%2F07%2Fgstreamer-super-tutorial%2F
jul 17th, 2012 at 10:31
Yo deseo hacer una consulta, tengo fedora 17 en mi portatil y desintale unos programas de audio y video que no necesitaba, sin embargo se desintalaron otros complementos. ahora tengo problemas con Cheese, Rhytbmbox y otros que usan gstreamer, pues unos me dicen que no encuentran un complemento multiplexor y otros que faltan complementos necesarios, así con este modo, cheese no me da imagen y los menús no funcionana, rhythmbox no da sonido en mp3…he desintalado y vuelto a instalar los programas y los codecs y el problema sigue ahi…
Me gustaría saber si me pueden dar alguna luz sobre el problema para resolverlo.
Muy agradecido y felicitacione por tus publicaciones.
jul 17th, 2012 at 11:44
Prueba reinstalando todos los paquetes de GStreamer:
yum install gstreamer gstreamer-plugins-good gstreamer-plugins-bad gstreamer-plugins-bad-free gstreamer-plugins-bad-free-extras gstreamer-plugins-bad-nonfree gstreamer-ffmpeg gstreamer-plugins-uglyEso ya debería reinstalar todas las dependencias.
jul 17th, 2012 at 22:49
Pues he tratado de volver a instalar todos los codecs que me pusiste arriba, sin embargo sigue igual y la terminal me dice que no hay nada que hacer, que todos ya estan instalados:
Package gstreamer-0.10.36-1.fc17.x86_64 already installed and latest versionPackage gstreamer-plusugins-good-0.10.31-4.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-bad-0.10.22-4.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-bad-free-0.10.23-7.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-bad-free-extras-0.10.23-7.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-bad-nonfree-0.10.22-3.fc17.x86_64 already installed and latest versionPackage gstreamer-ffmpeg-0.10.13-5.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-ugly-0.10.19-1.fc17.x86_64 already installed and latest versionNothing to do
Cuando inicio cheese como root me inicia normal, pero cuando lo hago como usuario normal me sale que faltan complementos de gstreamer, uso Cheese 3.4.2, es raro, el mensaje de la terminal sin root es:
** (cheese:3354): CRITICAL **: cheese_camera_create_effects_preview_bin: assertion `error == NULL || *error == NULL’ failed** (cheese:3354): WARNING **: cheese-window.vala:1624: Error: Faltan uno o más elementos necesarios de GStreamer: Faltan uno o más elementos necesarios de GStreamer: webmmux.
En Rhythmbox pone el siguiente mensaje:
Rhythmbox-Message: Missing plugin: gstreamer|0.10|rhythmbox|demultiplexor Etiqueta ID3|decoder-application/x-id3** Message: PackageKit: xid = 52428811** Message: PackageKit: Codec nice name: demultiplexor Etiqueta ID3** Message: PackageKit: structure: gstreamer0.10(decoder-application/x-id3)()(64bit)** Message: PackageKit: Did not install codec: GDBus.Error:org.freedesktop.PackageKit.Modify.Cancelled: did not agree to search(rhythmbox:3361): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)’ failed
No sé como instalar esos complementos.
Saludos desde Nicaragua
jul 18th, 2012 at 9:17
:/ es raro que funcione como root y no como usuario normal, prueba actualizando todo el sistema. Si el problema no se soluciona, quizás ya sea un problema propio de Fedora. Lamentablemente no puedo brindarte una ayuda más específica porque no uso Fedora, uso Arch.
Si quieres puedes pasarte por el foro, allí hay algunos usuarios que usan Fedora y te pueden ayudar mejor.
jul 18th, 2012 at 9:45
Ok gracias, pasaré por el foro, de todos modos tu tutorial me ha servido de mucho, he aprendido bastante.
Un abrazo fraterno
jul 29th, 2012 at 11:00
[...] más importantes es la posibilidad de aplicar algunos efectos simples al video, todo esto gracias a GStreamer ( ;D ), y habiendo eliminado a FFmpeg como dependencia. También se han agregado los idiomas [...]
abr 23rd, 2013 at 0:27
Muy buena introducción a GStreamer!
Un abrazo.