DVD-Cómo

Luis Toro Teijeiro

Tutorial para la configuración y uso del Vídeo Disco Digital (DVD) bajo Linux.

1. Introducción al DVD

1.1. Finalidad de este Cómo

El DVD es comúnmente conocido como «disco de vídeo digital», donde se almacenan las películas en la grandísima mayoría de los casos en que queramos verlas en nuestro querido sistema operativo. Este pequeño documento intentará guiarle en los primeros pasos para encontrar los pocos controladores de dispositivo disponibles hasta este momento en el sistema del pingüino y le explicará qué hacer para utilizarlos.

1.2. Términos de uso

El autor de este Cómo no se hace responsable de ninguno de los posibles daños que le pudiera causar a su equipo a los vecinos o a cualquier otro, pérdida de datos o de novia :-), y le recuerda que estamos trabajando con controladores de dispositivo en la mayoría de los casos en estado de desarrollo, avanzado eso sí, pero de desarrollo en definitiva.

El presente documento ha sido realizado por Luis Toro Teijeiro (linuxx en irc.irc-hispano.org) y está publicado bajo la licencia GNU para documentos.

1.3. ¿Quiere hablar con nosotros?

Vaya, aún le quedan ganas de seguir con el documento. Pues le felicito aprenderá usted algo nuevo con seguridad; y si tiene alguna duda y le podemos ayudar.

<linuxx@retemail.es> es nuestro correo.

1.4. DÓnde encontrar lo necesario

A continuación daré una lista de las cosas necesarias para poner en funcionamiento las tarjetas dxr2 de Creative Labs que son las actualmente soportadas (y en las que tengo experiencia).

1. Lo primero es la página de Creative por supuesto: http://opensource.creative.com/ (http://opensource.creative.com). De aquí podrá conseguir el controlador de dispositivo dxr2 y el dvdplayer.

2. Ahora lo segundo tenemos dos posibilidades:

• Coger un núcleo de la serie 2.3 (preferiblemente un 2.3.99pre). Esto nos evita el tener que bajarnos los parches (bueno aunque eso no es una gran excusa ya que el núcleo ocupa mucho mas) y aplicarlos al núcleo que tengamos. Más que nada es por comodidad.

• Aplicar parches al núcleo. "¿Y para parchear el núcleo como hago?" preguntareis algunos. Bien, pues hay un maravilloso Núcleo-Cómo que explica en perfecto castellano cómo hacerlo, tanto si queréis parchear como compilarlo.

3. La tercera opción es bajarse los parches. ¿De dónde?. Aquí van las direcciones:

• http://www.kernel.dk: de aquí el parche UDF y el DVD CSS IOCTL (el primero se encarga del sistema de ficheros y el otro de la decodificación del DVD, en el caso de que estuviera cifrado.

• http://opensource.creative.com: aquí esta el controlador de dispositivo del dxr2. dxr20001007.tar.gz el último a día 8/10/00.

• http://www.csc.calpoly.edu/~bfennema/udf.html: Otro sitio donde poder obtener el UDF.

• http://www.kernel.org: Si lo que quieres es un núcleo y no parchear nada. Mi opción preferida.

• http://opensource.creative.com/binaries.html: De aquí tomaremos un fichero llamado dvd12.ux

1.5. ¿Qué está soportado?

Los linuxeros estamos de buena suerte, ya que además de tener el controlador de dispositivo soportado y ser muy estable, el desarrollo del «overlay» para poderlo ver en las X ya ha sido realizado, con lo que podremos beneficiarnos de ello sin necesidad de verlo a través de la tarjeta de televisión como al comienzo del desarrollo del controlador de dispositivo. Las otras funcionalidades de las que podemos beneficiarnos en el controlador de dispositivo son las siguientes:

1. Dolby Digital AC-3

2. Salida digital

3. Salida a TV

4. Visualización DVD (películas)

5. Marcadores

6. Ángulos de Cámara (sólo parcialmente)

7. Menús (por el momento no)

8. Idiomas (por defecto solo podemos elegir si con subtítulos y saldrán los por defecto también)

9. Lo veremos en Linux, por lo tanto en una máquina potente (en un Pentium podremos hacer 50 cosas a la vez además de verlo :-))

Y si yo no tengo una tarjeta dxr2 podré ver el dvd mis últimas noticias recibidas de la lista de correo de desarrollo del dxr2. En http://opensource.creative.com/mailman/listinfo/dxr2-devel dicen que el controlador de dispositivo de la dxr3 y de la Hollywood ya están disponibles. Ahora bien, no tengo ni idea de si son estables en desarrollo avanzado o en que punto de desarrollo están. Puedes buscarlos en http://www.freshmeat.net.

2. El núcleo

Dependiendo de la distribución de Linux que tengamos y de cómo nos guste mantenerla, tendremos las fuentes del núcleo o un paquete rpm, tar.gz o deb que las contenga. Estas fuentes estarán el /usr/src/linux. Vamos a parchearlas.

En una terminal o en una consola ejecutamos:

bash# login root

o bien

bash# su root

Lo siguiente debe hacerse como administrador:

bash# cd /usr/src

para movernos hasta el directorio

bash# mv /donde hemos puesto los parches/ /usr/src/

mueve los parches a /usr/src.

bash# bunzip2 -d dvd-cd2.2.xx.diff.bz2

descomprime el parche.

bash# patch -p1 < dvd-cd-2.2.xx.diff

este es el parche para dar soporte al dvd en el cdrom. Anteriormente comentamos dónde bajarlo pero lo reiteramos: http://www.kernel.dk.

bash# bunzip2 -d udf-2.2.xx.diff.bz2 patch -p1 < udf-2.2.xx.diff

este el parche UDF (véase más arriba). Para cualquier problema en el parcheado recomiendo la lectura de la página man de patch y el Núcleo-Cómo. Ahora compilamos el núcleo (Núcleo-Cómo) make clean; make menuconfig; make dep; make bzImage; make modules; make modules_install; make install Bueno algunas cosas que tendremos que configurar en el núcleo serán las siguientes:

• Soporte para código en desarrollo (Code maturity level options)

• Sistema de ficheros UDF,ISO 9660 (Joliet Filesystems - UDF/ISO-9660/Joliet)

• Carga de módulos (LOADABLE MODULE SUPPORT)

• Soporte para IOCTL (IOCTL support) Después de parchear, éste se añadirá automáticamente. Va dentro de «kernel block devices» (dispositivos de bloque) *******y no lo puedes ni elegir va dentro porque si así que no te preocupes.****** Una vez que lo tenemos ya compilado y lo hemos añadido al lilo, podemos reiniciar la máquina y rearrancar con nuestro nuevo núcleo. Además, deciros que al compilar un núcleo lo estamos optimizando para el procesador que tenemos en la máquina. Generalmente los núcleos por defecto no aprovechan al máximo las capacidades del procesador que tengamos instalado.

3. El Controlador De Dispositivo Dxr2 y sus programas

Ya está llegando el momento. Ya tenemos nuestro nuevo núcleo arrancado. Ha llegado la hora de compilar el controlador de dispositivo del DVD y añadirlo al núcleo para poder arrancar las aplicaciones. Lo primero que haremos será ir al directorio donde hemos bajado el controlador de dispositivo con cd /directorio

A continuación vamos a descomprimirlo: tar -zxf dxr2000xxxx.tar.gz con lo que nos creará un directorio llamado dxr2 Entramos en el directorio cd ./dxr2, y lo normal es que nos leamos el "Readme" y el resto de la documentación (que vienen a explicar lo mismo que este Cómo).

Procedamos ahora a compilarlo con make. Si nos da errores es posible que nuestros enlaces directos (***¿no serán simbólicos*****) en el directorio /usr/include al núcleo estén mal o no estén. Debe haber en /usr/include dos enlaces uno asm y otro

linux que apunten a /usr/src/linux/include/asm

y/usr/src/linux/include/linux respectivamente. Si ambos existen debería compilar sin problemas; si no la hace, vaya a la sección Problemas.

Ahora creamos el dispositivo dxr2 en el directorio /dev de la manera siguiente: mknod /dev/dxr2 c 120 0. Con ello creamos en /dev/dxr2 el dispositivo que usará el futuro controlador.

Lo insertamos en el núcleo con make insert que lo añade de forma dinámica. Si hacemos un cat /proc/modules tendríamos que ver algo parecido a

dxr2 21184 0 (unused)
anp82 5240 0 [dxr2]
bt865 3604 0 [dxr2]
zivaDS 9048 0 [dxr2]
vxp524 33648 0 [dxr2]
tc6807af 2860 0 [dxr2]
pcm1723 1944 0 [dxr2]

Como se puede ver, el dxr2 está sin usar y el resto dependen de él. Son. por decirlo de alguna manera, submódulos.

Llegados a este punto lo instalaremos definitivamente. Con make install se creará una carpeta, en caso de que no existiera, llamada /lib/modules/2.X.X/misc en donde se pondrán los módulos. Un depmod -a actualizará las dependencias y creará el nuevo fichero modules.dep Con el proceso de instalación también se nos habrán instalado

en /usr/local/bin los ejecutables. Para ver el DVD: dvdplay, dvdplay-curses
y dvdplay-wrapper.

Además, tendremos que mirar en /etc si se ha copiado el fichero de configuración dxr2player.conf ya que, según mis experiencias personales, a veces se copia y a veces no. En cualquier caso, lo tenemos en dxr2/player/dxr2player.conf. Lo descomprimimos y lo copiamos a /etc con cp ./dxr2player.conf /etc/

4. Configuración

Ahora, desde el principio y para no perdernos, haremos un pequeño resumen:

Hemos compilado el núcleo y reiniciado la máquina; hemos compilado el dxr2 y con make insert se añadió a el núcleo. Pero si un día queremos reiniciar la máquina y queremos cargar de nuevo los módulos que están guardados en /lib/modules/2.X.X/misc, ¿cómo lo haremos? Veamos: modprobe dxr2

Con eso bastará y los tendremos cargados. Llegados a este punto, ahora vamos a configurar el archivo de configuración del ejecutable principal. Normalmente irá ubicado en /etc/dxr2player.conf, como antes dijimos, y su formato es el siguiente:

# Configuration information for the DVD player
# Devices
drive: /dev/hdc  # dispositivo donde esta la unidad de lec-
tura de DVD
dxr2: /dev/dxr2  # dispositivo que creamos
# para que el controlador de dispositivo y el nú-
cleo se comunicasen

firmware: /usr/src/dvd12.ux # este es el sitio donde pondremos
# el fichero dvd12.ux
# (o donde usted prefiera, pero yo prefiero aquí por orden)
mountpoint: /mnt/cdrom punto de montaje
# Other Defaults
3# Audio Format: AC3 / MPEG
audio_format: AC3  #formato de sonido
# Audio Frequency: 44.1 / 48 / 96 / 2205 / 32
audio_freq: 48  #frecuencia de sonido
# Audio bitstream width: 16 / 20 / 24
audio_width: 16
# NTSC / PAL
tv_format:PAL  #formato de salida de televisión
# 30 / 25
video_freq: 30  #frecuencia de refresco del televisor
# letterbox / normal / pan_scan
video_format: normal # formato de video en tamaño
# subpicture: ON / OFF
subpicture: OFF subtítulos
# debo decir que el idioma no se puede elegir
# sale el que venga por defecto
# VGA Overlay Info
# Default overlay status: ON / OFF
overlay: OFF # overlay por el momento mejor apagado en adelante
# cuando el dvd se entienda con las X ya podremos modificar esto

# Overlay geometry... standard X format: <width>x<height>+<x-
offset>+<y-offset>
overlay_geom: 300x300+10+10
# Overlay crop-
ping: <top>x<left>x<vertical_stretch(?)>x<vertical_hold(?)>
overlay_crop: 0x0x20x350
# Overlay Color Key Parameters:
red: 00-20
green: 00-20
blue: 60-ff

Y eso es todo amigos. En el archivo de configuración es sencillo. Y ahora al tajo: cómo ver películas ;-)

5. Video

El DVD ya se puede ver en las X-Window, con lo cual simplemente después de haber montado el cdrom con el mount (mas abajo especificamos cómo) sólo nos queda ejecutarlo con dvdplay -cT1. Normalmente con eso ya deberíamos verlo. Si queremos darle salida a una televisión también es posible hacerlo. Es más, al principio del DVD-linux no había otra manera.

Si pensáis ver el DVD en el televisor estáis de buena suerte.

Para aquellos que no tenemos tele y lo hacemos casi todo en el ordenador, nos queda otra opción aun más elaborada. Cuando comprásteis la tarjeta decodificadora esta traía un bonito cable que espero que no hayáis tirado (a mí me costó tres días dar con él). Lo enchufaremos a la salida de TV de la dxr2 y por el otro extremo tenemos dos posibilidades: o enchufarlo a la tele o a una tarjeta de televisión para ordenador (de esas que se usan para decodificar canales de pago).

Si lo conectamos a la tele, sólo nos quedará ver el DVD en el canal de entrada de vídeo que tengamos programado Más abajo explicaré como ejecutar la aplicación, calma. Y a los que usemos la tarjeta de televisión os recomiendo primero haberos familiarizado con el programa que uséis para ver la tele. Lo normal es que sea el xawtv, da la mejor calidad según tengo entendido. Si alguno discrepa de esta opinión le ruego se ponga en contacto conmigo y me recomiende algo mejor (que sea usable en mi linux por supuesto :-)

Nos queda montar el DVD con la película introducida. Por supuesto: mount -t udf /mnt/cdrom (si es que lo tiene usted en /mnt/cdrom, según donde lo tenga). Algunos tendrán automount. Si hay algún problema la página man de mount es una buena referencia.

Y ahora, a ver las películas: dvdplay -c /mnt/cdrom/video_ts/vts_0.1.0.vob Los archivos .vob son los que tienen la película. El 0.vob es el de comienzo y la c es por si esta encriptada. Si nos da un error como el siguiente:

CSS authentication failed - cannot get disk key

Es porque el disco no está encriptado y le quitaremos el parámetro -c. Otra posibilidad es ejecutar el dvdplay con la opción T y un número generalmente el 0 o el 1. Buscará un fichero llamado XXX.ifo que contiene información relativa al dvd y lo arrancará automágicamente. Mi experiencia personal es que siempre ha funcionado. Además, al ejecutar dvdplay sin opciones nos dará todas las posibles valores que se le pueden dar al programa

linuxx:$ dvdplay
Syntax: dvdplay [-cTO] [-s <bitstream type>] [-a <audio stream>]
[-q <audio freq>] [-v <video freq>] [-s <bitstream>]
[-W <TV type>] [-u <audio type>] [-w <audio width>]
[-r <output ratio>] [-t <output type>] [-S <subtitle jid>]
[-g <geom>] [-p <crop>] [-b <brightness>][-A <angle>] <filename>
-c turns on CSS decryption
-a will select the audio stream to decode (from 0 to 7)
-r is either 0 1 or 2, 0 being letterbox, 1 being 'nor-
mal' and 2 being pan/scan
-t is either 0 to 7 correspond-
ing to: NTSC,NTSC_60,PAL_M,PAL_M_60,PAL_BDGHI,PAL_N,PAL_Nc,PAL_60

-q selects the audio frequency. 0-
4 corresponding to: 44.1, 48. 96, 2205, 32
-v selects the video frequency. 0-1 correspond-
ing to: 30fps, 20fps. 30fps is default for NTSC. 25fps is de-
fault for PAL.
-W Selects whether you have a Widescreen TV(1) or a Normal Tv(0)
-w selects the audio width. 0-2 corresponding to: 16, 20, 24
-s selects the bitstream type. 0-
4 corresponding to: VOB(DVD), CDROM VCD, MPEG VCD, CDDA, Unknown
-u selects the audio bitstream type. 0-
2 corresponding to: AC3 / MPEG / LPCM
-S select subtitle language. 0-
<number of subtitles languages on the DVD -1>
-T turns on IFO parsing. Plays specified title, 1-
? based on the number of titles on your dvd.
-A selects which angle to view. 0-<maxangle>
-O turns on the VGA overlay
-
g sets the geometry of the VGA overlay. standard wxh+x+y format.
-p sets the crop-
ping info. <left shift>x<right shift>x<top shift>x<bottom shift>
-b sets the brightness for the VGA overlay. 0-63

5.1. ¿Hay mas opciones además del dvdplay?

Según mi información, hay un frontend llamado gdxr2-0.2a que está en fase de desarrrollo alfa y está hecho con GTK. Se puede obtener la última versión del mismo en la siguiente dirección http://gdxr2.havoknet.com o buscarlo en http://www.freshmeat.net. Los anteriores programas son para máaquinas potentes (yo tengo un pentium II a 400 y me da pequños pantalleos). La única posibilidad que conozco para máquinas menos potentes es Nist en su versión 0.6; bájesela de http://linuxdvd.webjump.com/ y si la prueba y le va bien me gustaría conocer su opinión.

6. Problemas frecuentes

6.1. Error en la compilación.

make[1]: Entering directory `/home/dxr2/'
gcc -O2 -I../sysinclude -c test.c -o test.o
In file included from test.c:83:
css.h:83: parse error before `dvd_authinfo'
css.h:100: parse error before `dvd_authinfo'
css.h:117: parse error before `dvd_authinfo'
css.h:142: parse error before `dvd_authinfo'
test.c: In function `main':
test.c:112: `dvd_authinfo' unde-
clared (first use in this function)
test.c:112: (Each undeclared identifier is reported only once
test.c:112: for each function it appears in.)
test.c:112: parse error before `authBuf'
test.c:225: `authBuf' undeclared (first use in this function)
make[1]: *** [test.o] Error 1
make[1]: Leaving directory `/home/dxr2/'
make: *** [all] Error 1

Esto puede ser bien porque los parches no están instalados en el núcleo correctamente o no está ejecutándolo como superusuario. Si tuvo problemas en el parcheado del núcleo, vuelva a hacerlo pero con un núcleo nuevo y ejecutando antes make mrproper para hacer una limpieza en profundidad.

6.2. No obtenemos sonido pero sí vemos las imágenes

Esto suele ser porque el dvd trae el sonido en un formato distinto al que tenemos puesto en el archivo de configuración en /etc/dxr2player.conf. Normalmente solemos tener AC3. Cambiándolo a MPEG suele solucionarlo o en la línea de comandos dando la opción de sonido con dvdplay -u 0-2.

6.3. No obtenemos imágenes

Normalmente si usamos la entrada de televisión en una tarjeta en el ordenador es porque debemos cambiar a NTSC, ya que la salida PAL de las televisiones europeas no nos deja ver el dvd. Además, comprobar si estás visualizando S-Video, entrada de vídeo.

6.4. Error CSS Authentication Failed Errors

Esto puede ser por dos causas: o bien porque ejecutamos el dvdplay con la opción -c de desencriptacion y el dvd no esta encriptado; o porque lo estamos haciendo como usuario normal y es que la desencriptación ha de efectuarse como root.

6.5. Posibles órdenes de modificación de dvdplay

Una vez arrancado dvdplay, pulse h y obtendrá una lista como esta:

Modo Normal:
's' = STOP
'q' = QUIT
'p' = PAUSE/RESUME
'f' = SINGLE STEP FORWARD (When paused)
'n' = NEXT CHAPTER
'v' = PREVIOUS CHAPTER
'c' = CHOOSE CHAPTER
'b' = BOOKMARK MODE
'o' = TOGGLE VGA OVERLAY (DISABLED ATM)
'h' = HELP
Modo Bookmark:
'p' = PRINT BOOKMARKS
'c' = CREATE NEW BOOKMARK
'g' = GO TO A BOOKMARk
'l' = LOAD BOOKMARKS

's' = SAVE BOOKMARKS
'h' = HELP
'q' = QUIT BOOKMARK MODE