7.4. Reproducción de vídeo

Contributed by Ross Lippert.

La reproducción de vídeo es un área muy nueva y en la que se producen grandes cambios a gran velocidad. Tenga paciencia. Aquí no va a ser todo tan sencillo como al configurar el sonido.

Antes de comenzar es imprescindible que sepa con certeza cuál es el modelo de su tarjeta gráfica y qué chip usa. Tanto Xorg como XFree86 soportan gran cantidad de tarjetas gráficas, pero de pocas se puede decir que den un buen rendiemiento de reproducción. Puede consultar una lista de extensiones que el servidor X puede hacer funcionar en su tarjeta ejecutando xdpyinfo(1) desde una sesión X11.

Le recomendamos que tenga a mano un fichero MPEG no muy grande para usarlo en las pruebas que haga con los diversos reproductores y opciones. Algunos reproductores de DVD buscarán por omisión soportes DVD en /dev/dvd (algunos incluso tienen fijado en el código el nombre de dicha unidad) seguramente le resultará útil ejecutar los siguientes enlaces simbólicos:

# ln -sf /dev/acd0 /dev/dvd
# ln -sf /dev/acd0 /dev/rdvd

Tenga en cuenta que debido al diseño de devfs(5) los enlaces creados a mano no sobrevivirán a un reinicio del sistema. Para que así suceda tras cada reinicio debe añadir las siguientes líneas a /etc/devfs.conf:

link acd0 dvd
link acd0 rdvd

Además, el descifrado de DVD (una tarea que hará necesario llamar a funciones especiales de los DVD-ROM) requiere permisos de escritura en unidades DVD.

Le recomendamos que aumente la memoria compartida del interfaz X11, para lo cual tendrá que incremente los valores asignados a varias sysctl(8):

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768

7.4.1. Cómo determinar las características de video

Hay varias formas de reproducir vídeo en X11, pero cuál de ellas sea la que funcione depende en gran medida del hardware que intervenga. Cada uno de los métodos que se describen más son mejores o peores según en qué hardware se ejecute. Además el procesamiento de video en X11 es un asunto que está recibiendo mucha atención últimamente y en cada nueva versión de Xorg y de XFree86 no es extraño encontrar avances significativos.

Veamos una lista de interfaces de vídeo muy comunes:

  1. X11: salida normal de X11 utilizando memoria compartida.

  2. XVideo: una extensión del interfaz X11 que permite la reproducción de vídeo en las ventanas de X11.

  3. SDL: Simple Directmedia Layer.

  4. DGA: Direct Graphics Access (acceso directo a gráficos.

  5. SVGAlib: capa de consola de gráficos a bajo nivel.

7.4.1.1. XVideo

Xorg y XFree86™ 4.X tienen una extensión llamada XVideo (también conocida como Xvideo, Xv o xv) que permite reproducir vídeo en ventanas del sistema X11 a través de un tipo de aceleración especial. Dicha extensión ofrece una calidad de reproducción muy alta incluso en máquinas muy cortas de recursos.

Utilice xvinfo para saber qué extensión está utilizando:

% xvinfo

XVideo is supported for your card if the result looks like:

X-Video Extension version 2.2
screen #0
  Adaptor #0: "Savage Streams Engine"
    number of ports: 1
    port base: 43
    operations supported: PutImage
    supported visuals:
      depth 16, visualID 0x22
      depth 16, visualID 0x23
    number of attributes: 5
      "XV_COLORKEY" (range 0 to 16777215)
              client settable attribute
              client gettable attribute (current value is 2110)
      "XV_BRIGHTNESS" (range -128 to 127)
              client settable attribute
              client gettable attribute (current value is 0)
      "XV_CONTRAST" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_SATURATION" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_HUE" (range -180 to 180)
              client settable attribute
              client gettable attribute (current value is 0)
    maximum XvImage size: 1024 x 1024
    Number of image formats: 7
      id: 0x32595559 (YUY2)
        guid: 59555932-0000-0010-8000-00aa00389b71
        bits per pixel: 16
        number of planes: 1
        type: YUV (packed)
      id: 0x32315659 (YV12)
        guid: 59563132-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x30323449 (I420)
        guid: 49343230-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x36315652 (RV16)
        guid: 52563135-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x3e0, 0x7c00
      id: 0x35315652 (RV15)
        guid: 52563136-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x7e0, 0xf800
      id: 0x31313259 (Y211)
        guid: 59323131-0000-0010-8000-00aa00389b71
        bits per pixel: 6
        number of planes: 3
        type: YUV (packed)
      id: 0x0
        guid: 00000000-0000-0000-0000-000000000000
        bits per pixel: 0
        number of planes: 0
        type: RGB (packed)
        depth: 1
        red, green, blue masks: 0x0, 0x0, 0x0

Tenga en cuenta que los formatos que aparecen en el listado (YUV2, YUV12, etc) no aparecen en todas las implementaciones de de XVideo y su ausencia puede despistar a algunos reproductores.

Si el resultado se parece mucho a esto

X-Video Extension version 2.2
screen #0
no adaptors present

lo más probable es que su tarjeta no soporte XVideo.

Si su tarjeta gráfica no soporta XVideo lo único que significa es que para su sistema será más complicado alcanzar los requisitos computacionales necesarios para el procesamiento de vídeo. Dependiendo de la tarjeta gráfica y el procesador que tenga es posible que de todos modos pueda salvar la papeleta. Consulte la sección sobre recursos avanzados en la Sección 7.4.3, “Lecturas adicionales”.

7.4.1.2. Simple Directmedia Layer

SDL (Simple Directmedia Layer) se creó pensando en una capa que permitiera aplicaciones fáciles de portar entre las plataformas Microsoft® Windows®, BeOS y UNIX® y que permitiera al mismo tiempo un uso eficiente del sonido y el vídeo. La capa SDL ofrece abstracción de hardware a bajo nivel, lo que a veces puee ser más eficiente que la propia interfaz X11.

SDL está en devel/sdl12.

7.4.1.3. Direct Graphics Access

«Direct Graphics Access» es una extensión de X11 que permite que un programa sortée el servidor X y acceda directamente al «framebuffer». Utiliza memoria de bajo nivel, así es imprescindible que se ejecute como root.

Puede probar y analizar el rendimiento de la extensión DGA con dga(1). Al ejecutar dga la pantalla cambia de color cada vez que pulsa una tecla. Para salir de la aplicación pulse q.

7.4.2. Ports y packages relacionados con el vídeo

Esta sección expone el software existente en la Colección de Ports de FreeBSD que puede usar para la reproducción de vídeo. La reproducción de vídeo es un área del desarrollo de software donde hay muchísima actividad, de manera que las características de más de una de las aplicaciones que vamos a describir pueden ser distintas.

Lo primero que hay que conocer es el importante detalle de que la mayoría de las aplicaciones de vídeo que funcionan en FreeBSD se desarrollaron para Linux. Muchas de esas aplicaciones todavía están en versiones beta. Estos son algunos de los problemas que puede encontrarse durante el uso de software de vídeo en FreeBSD:

  1. Una aplicación no puede reproducir un fichero que ha generado otra aplicación distinta.

  2. Una aplicación no puede reproducir un fichero que ella misma a generado.

  3. La misma aplicación ejecutándose en dos máquinas distintas, compilada en cada una de esas máquinas; la reproducción del mismo fichero da resultados diferentes.

  4. El uso de un filtro aparentemente trivial como es redimensionar una imagen aplicando una escala da como fruto un resultado horroroso debido a que la rutina encargada de aplicarla es defectuosa.

  5. Que una aplicación de volcados de memoria («core dumps»).

  6. La documentación no se instala con el port, pero sí que existe en la web o en el directorio work del port.

La mayoría de estas aplicaciones muestra síntomas evidente de «Linuxismo», es decir, hay problemas derivados del modo en el que se implementan las bibliotecas en las distribuciones de Linux, o del hecho de que ciertas características del kernel de Linux han sido dadas por omnipresentes por los autores de las aplicaciones. Estos problemas no siempre han sido advertidas y solucionadas de algún modo por los responsables de los ports, lo que puede desembocar en problemas como:

  1. El uso de /proc/cpuinfo para detectar las características del procesador.

  2. El uso erróneo de los hilos puede causar que ciertos programas se cuelguen al intentar cerrarse en lugar de cerrarse correctamente.

  3. Software que aún no está en la Colección de Ports de FreeBSD usado frecuentemente con la aplicación.

Hasta ahora los autores de las aplicaciones han colaborado de buen grado con los responsables de los ports para hacer más sencillo el trabajo de portar estas aplicaciones a FreeBSD.

7.4.2.1. MPlayer

MPlayer es un reproductor de vídeo desarrollado muy recientemente y con un desarrollo rapidísimo. Los objetivos del equipo MPlayer son la velocidad y la flexibilidad en Linux y otros sistemas Unix. El proyecto comenzó cuando el fundador del equipo se cansó de padecer el pobre rendimiento de los reproductores de vídeo que había disponibles en ese momento. Hay quien dice que el interfaz gráfico fue sacrificado en pos de un diseño más ligero, aunque una vez que se acostumbre a las opciones desde la línea de órdenes y a los atajos de teclado todo irá como la seda.

7.4.2.1.1. Compilación de MPlayer

Encontrará MPlayer en multimedia/mplayer. MPlayer ejecuta una serie de pruebas de hardware durante el proceso de compilación, dando como resultado un binario que no tiene por qué funcionar en otros sistemas. Recuerde, por tanto, compilar la aplicación como port y no utilice el package binario. Además hay múltiples parámetros que puede pasarle a make, tal y como verá al comenzar la compilación:

# cd /usr/ports/multimedia/mplayer
# make
N - O - T - E

Take a careful look into the Makefile in order
to learn how to tune mplayer towards you personal preferences!
For example,
make WITH_GTK1
builds MPlayer with GTK1-GUI support.
If you want to use the GUI, you can either install
/usr/ports/multimedia/mplayer-skins
or download official skin collections from
http://www.mplayerhq.hu/homepage/dload.html

Las opciones por omisión del port deberían bastar para la mayoría de los usuarios, aunque si va a necesitar el codec XviD tendrá que especificar WITH_XVID en la línea de órdenes. La unidad de DVD por defecto se puede definir con la opción WITH_DVD_DEVICEsi la opción por omisión, /dev/acd0, no le sirve.

En el momento de escribir esto el port de MPlayer genera la documentación en formato HTML y dos ejecutables: mplayer y mencoder, que es una herramienta para recodificar vídeo.

La documentación en HTML de MPlayer es muy informativa. Si el lector no cubre todas sus dudas sobre hardware de vídeo e interfaces con el contenido de este capítulo la documentación de MPlayer es el sitio donde debe buscar. Si quiere más información sobre el soporte de vídeo en UNIX® el mejor sitio para consultar es, sin duda alguna, la documentación de MPlayer.

7.4.2.1.2. Uso de MPlayer

Los usuarios de MPlayer deben crear un subdirectorio .mplayer en su «home». Para crear este directorio (necesario para el funcionamiento de la aplicación) teclée lo siguiente:

% cd /usr/ports/multimedia/mplayer
% make install-user

Las opciones de mplayer para la línea de órdenes se detallan en la página de manual. Si necesita todavía más detalles consulte la documentación en HTML. En esta sección se va a explicar solamente lo más básico.

Para reproducir el fichero ficherodeprueba.avi, mediante una de las diversas interfaces de vídeo utilice la opción -vo:

% mplayer -vo xv ficherodeprueba.avi
% mplayer -vo sdl ficherodeprueba.avi
% mplayer -vo x11 ficherodeprueba.avi
# mplayer -vo dga ficherodeprueba.avi
# mplayer -vo 'sdl:dga' ficherodeprueba.avi

Merece la pena que pruebe todas, puesto que el rendimiento relativo depende en gran medida de muchos factores y será muy distinto el resultado dependiendo del hardware.

Si quiere reproducir un DVD sustituya ficherodeprueba.avi por dvd://N -dvd-device DISPOSITIVO, donde N es el número de título que quiere reproducir y DISPOSITIVO es el nodo de dispositivo del DVD-ROM. Veamos un ejemplo: para reproducir el título 3 desde /dev/dvd ejecutaremos:

# mplayer -vo xv dvd://3 -dvd-device /dev/dvd

Nota:

La unidad de DVD por omisión puede definirse durante la compilación del port de MPlayer con la opción WITH_DVD_DEVICE. Por defecto apunta a /dev/acd0. Tiene todos los detalles en el Makefile del port.

Consulte los atajos de teclado para parar la reproducción, ponerla en pausa, etc. consulte la salida de mplayer -h o mejor aún lése la página de manual.

Hay otras opciones que le resultarán de interés para la reproducción: -fs -zoom, para la reproducción a pantalla completa y -framedrop, que mejora el rendimiento.

Para evitar que la línea de órdenes se haga demasiado larga puede crear un fichero .mplayer/config e introducir en él las opciones que quiera usar desde el arranque de la aplicación:

vo=xv
fs=yes
zoom=yes

Para terminar, puede usar mplayer para extraer un título de un DVD a un fichero .vob. Por ejemplo, si quiere extraer el segundo título de un DVD escriba esto:

# mplayer -dumpstream -dumpfile salida.vob dvd://2 -dvd-device /dev/dvd

El fichero de salida, salida.vob, un MPEG y puede manipularlo con las aplicaciones que se describen en esta sección.

7.4.2.1.3. mencoder

Antes de empezar a usar mencoder le recomendamos que se familiarice con las opciones que se detallan en la documentación HTML. Hay también una página de manual, pero no es de mucha utilidad sin la documentación HTML. Hay una ingente cantidad de formas de mejorar la calidad, reducir el ratio de bits y cambiar formatos; alguno de esos pequeños trucos pueden marcar la diferencia entre un buen y un mal rendimiento. Le mostramos un par de ejemplos por los que puede empezar. El primero es una simple copia:

% mencoder entrada.avi -oac copy -ovc copy -o salida.avi

Ciertas combinaciones erróneas de opciones en la línea de órdenes pueden dar como fruto un fichero de salida que no puede reproducir ni siquiera el propio mplayer, así que si lo que quiere es extraer datos a un fichero siga usando tranquilamente la opción -dumpfile de mplayer.

Para convertir entrada.avi con codificación MPEG4 y audio con codificación MPEG3 (necesitará audio/lame):

% mencoder entrada.avi -oac mp3lame -lameopts br=192 \
	 -ovc lavc -lavcopts vcodec=mpeg4:vhq -o salida.avi

El fichero de salida puede verse con mplayer y con xine.

Si sustituye entrada.avi por dvd://1 -dvd-device /dev/dvd y lo ejecuta como root puede recodificar un título de DVD directamente. Es posible que el resultado no sea muy satisfactorio tras los primeros intentos, así que le recomendamos que vuelque el título a un fichero y haga todas las pruebas que necesite sobre ese fichero.

7.4.2.2. El reproductor de vídeo xine

El reproductor de vídeo xine es un ambicioso proyecto que tiene como meta ofrecer no solamente una aplicación de vídeo «todo en uno», sino crear una biblioteca base reutilizable y un ejecutable modular que puede ampliarse mediante «plugins». Existe como package y también como port: multimedia/xine.

El reproductor xine está todavía en mantillas, pero sus primeros pasos están siendo muy interesantes. xine requiere o una CPU rápida o una tarjeta gráfica, o bien soporte para la extensión XVideo. El GUI es intuitivo, aunque un tanto pedestre.

En el momento de escribir esto xine no incorpora ningún módulo de entrada que sirva para reproducir DVD codificados con CSS. Hay versiones compiladas por terceros que tienen módulos que lo permiten, pero ninguna de ellas está en la Colección de Ports de FreeBSD.

Comparado con MPlayer xine deja las cosas más hechas para el usuario, pero al mismo tiempo pone más difícil el control exhaustivo sobre todo lo que pasa. El reproductor xine da un mejor rendimiento en interfaces XVideo.

Por omisión xine arranca con un intefaz gráfico de usuario. Los menús pueden usarse para abrir un fichero en concreto:

% xine

También puede invocar la aplicación desde la línea de órdenes para que reproduzca un fichero inmediatamente y sin utilizar el GUI:

% xine -g -p fichero.avi

7.4.2.3. Las herramientas transcode

transcode no es un reproductor, sino una suite de herramientas para recodificar (también se podría usar la palabra «transcodificar», de ahí su nombre) ficheros de sonido y de vídeo. Con transcode es posible fundir ficheros de video y reparar ficheros deteriorados desde la línea de órdenes y en las interfaces de flujo stdin/stdout.

Puede configurar gran cantidad de opciones en el momento de la compilación de multimedia/transcode; le recomendamos que use la siguiente línea de órdenes para compilar transcode:

# make WITH_OPTIMIZED_CFLAGS=yes WITH_LIBA52=yes WITH_LAME=yes WITH_OGG=yes \
WITH_MJPEG=yes -DWITH_XVID=yes

La configuración que le proponemos deberí satisfacer a la mayoría de los usuarios.

Veamos un ejemplo ilustrativo de las posibilidades de transcode: convertir un fichero DivX en un fichero PAL MPEG-1 (PAL VCD):

% transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
% mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa

Puede reproducir el fichero MPEG resultante, output_vcd.mpg, con MPlayer. Si quiere también puede grabar el fichero en un CD-R y tendrá un VideoCD, aunque para eso tendrá que instalar multimedia/vcdimager y sysutils/cdrdao.

Consulte la página de manual de transcode, pero no olvide consultar también el wiki de transcode, en el que encontrará más información y muchos ejemplos.

7.4.3. Lecturas adicionales

El desarrollo de las diversas aplicaciones de vídeo disponibles en FreeBSD avanza rápidamente. Es muy posible que en un futuro cercano la mayoría de los problemas de los que hemos hablado aquí hayan sido resueltos. Mientras tanto quien quiera exprimir las capacidades de FreeBSD en las áreas del sonido y el vídeo tendrán que recopilar la información repartida en varias FAQ y tutoriales y utilizar unos cuantos programas diferentes. En esta sección se le proponen al lector interesado varias fuentes de información adicional.

La documentación de MPlayer contiene una gran cantidad de información técnica. Cualquiera que quiera alcanzar un alto grado de conocimiento en vídeo sobre UNIX® debe consultar esa documentación. La lista de correo de MPlayer es sumamente hostil hacia quien no se ha molestado en leer la documentación antes de preguntar, así que si va a enviar informes de errores a esa lista, por favor, léase la documentación..

El texto xine HOWTO contiene un capítulo sobre mejora del rendimiento que afecta a todos los reproductores.

Hay unas cuantas aplicaciones muy prometedoras que el lector debería al menos probar:

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.

Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.