Este documento presenta cómo se puede hacer streams de video con theora y ogg, ambos de especificaciones abiertas y software libre que pueden ser visualizables con herramientas NO privativas. Fue realizado en colaboracion con altred.net para preparar los streams del FLISOL 2006 (Festival Latinoamericano de Instalacion de Software Libre)

Para el FLISOL este año (2007) esperamos realizar la actualizacion de esta guia.

Resumen de configuración

Hacer el streaming en tiempo real a través de un medio capturador de vídeo tiene tres pasos iniciales y otros opcionales

  1. Configuración de la entrada, por ejemplo : webcam, tarjeta capturadora de video....
  2. Configuración de un servidor apropiado para hacer stream de video. En este caso : icecast2
  3. Configuración de un programa para capturar la entrada de video y generar .ogg con codec theora.

  4. Pruebas de visualización del stream

En este documento asumimos que su webcam o medio de entrada está correctamente configurado, para una webcam vea UsoCamarasWeb

Reproductor de video, antes de continuar

Pero antes de comenzar, por favor verifique que su reproductor de ogg funciona, por ejemplo :

No es ningún video profesional, si tiene uno mejor, por favor no dude en enlazarlo ;) .

Paquete de mplayer para Sarge

Asegúrese de tener mplayer en una versión con soporte para theora, la 1.0pre7-1 que encuentra en este listado de repositorios útiles para Debian.

 apt-get update
 apt-get install mplayer libdvdcss2 ttf-freefont netselect fping libdv-bin netselect-apt

Por otra parte puede

Compilar mplayer desde las fuentes con soporte de ogg-theora

En ubuntu-hoary

Bajar las fuentes de mplayer

Visitar area para bajar ultima version de mplayer en http://www.mplayerhq.hu/design7/dload.html
eligiendo un sitio para bajarla por ftp o por http.
puede ser:
 wget http://www4.mplayerhq.hu/MPlayer/releases/MPlayer-1.0pre7try2.tar.bz2
 tar -jxvf MPlayer-1.0pre7try2.tar.bz2

Algunos requisitos:

 apt-get install xlibs-dev

 apt-get install libtheora-dev

 wget http://archive.ubuntu.com/ubuntu/pool/universe/s/svgalib/libsvga1-dev_1.4.3-20ubuntu2_i386.deb
 wget http://archive.ubuntu.com/ubuntu/pool/universe/s/svgalib/libsvga1_1.4.3-20ubuntu2_i386.deb
 dpkg -i libsvga1_1.4.3-20ubuntu2_i386.deb
 dpkg -i libsvga1-dev_1.4.3-20ubuntu2_i386.deb

 apt-get install libgtk1.2-dev

 wget http://www1.mplayerhq.hu/MPlayer/releases/codecs/all-20050412.tar.bz2
 tar -jxvf all-20060501.tar.bz2
 mkdir /usr/local/lib/codecs
 mv all-20050412/*  /usr/local/lib/codecs/
 cd MPlayer-1.0pre7try2
 ./configure --enable-gui --enable-menu
 make
 make install

 wget http://ftp5.mplayerhq.hu/mplayer/releases/fonts/font-arial-iso-8859-1.tar.bz2
 tar -jxvf font-arial-iso-8859-1.tar.bz2
 mv font-arial-iso-8859-1/*  /usr/local/share/mplayer/font/

mkdir /usr/local/share/mplayer/skins/
cd /usr/local/share/mplayer/skins/
bajar algunas skins o
todas:

wget http://www.mplayerhq.hu/design7/dload.html

cat dload.html |grep href|grep skins|grep -v images|awk -F\" '{print  $2 }'|grep "^ftp" \
|awk -F\/ '{print "wget ftp://ftp.mplayerhq.hu/MPlayer/skins/" $6 "\n tar -jxvf " $6}' > bajar-skins.sh
chmod a+x bajar-skins.sh
./bajar-skins

Configuración de un servidor de stream

En este documento describimos el uso de icecast2, dado que se requiere usar el codec de theora, es indispensable obtener icecast con parche de theora, no tema bajar la última versión. El servidor icecast que viene con Debian no tiene soporte para theora.

Algunas instrucciones para configurar el servidor icecast en debian (Sarge)

1. Haga apt-get install icecast2 esto instalara el paquete que viene por defecto en la distribucion, esto con el fin de usar el /etc/init.d/icecast2 que genera este.

2. apt-get remove icecast2

3. apt-get install libxslt1-dev libcurl3-dev (son algunas dependencias necesarias)

4. wget http://downloads.xiph.org/releases/theora/libtheora-1.0alpha5.tar.gz (para el libtheora codec que usaremos en el stream)

5. wget http://mediacast1.com/~karl/icecast-2.3-kh4.tar.gz (para descargar la version mas reciente del icecast al 27 de Marzo de 2006)

6. tar xzvf icecast-2.3-kh4.tar.gz libtheora-1.0alpha5.tar.gz

7. ./configure; make; make install; en ambos casos

8. como ya hemos instalado los paquetes necesarios vamos a cambiar una linea en el /etc/init.d/icecast2 por supuesto sera necesario abrirlo con el editor de nuestra religion ;), esto para arrancar el servicio.

9. la lineas a editar es en la que se especifica el Daemon, puesto la ruta de este con la compilacion debe haber cambiado a /usr/local/bin/ por tanto esta linea deberia quedar como: DAEMON=/usr/local/bin/icecast, guardamos y salimos.

10. si no se modifica nada mas en este archivo /etc/icecast2/icecast.xml sera tomada con la ruta por defecto del archivo de configuracion.

11. tambien es necesario editar /etc/default/icecast2 y poner la ultima linea ENABLE, en true.

12. acomodamos el /etc/icecast2/icecast.xml de acuerdo a nuestras necesidades

13. Mientras el archivo de configuracion este bien, /etc/init.d/icecast2 restart deberia resultar.

  1. Primero descargue la librería de desarrollo de theora(libtheora), haga el proceso usual de compilación de un .tar.gz.

  2. Instale librerías de desarrollo necesarias : libxslt1-dev libcurl3-dev
  3. Después descargue icecast, de nuevo el proceso de compilación usual.

  4. Configure su servidor, teniendo en cuenta cambiar las claves para evitar ser crackeado. Una explicación del archivo de configuración.

Verificar ejecución de icecast

Para verificar que Icecast está ejecutándose en su máquina, puede probar con estos comandos:

 ps aux | grep  icecast
 lsof -i | grep icecast
 nmap localhost | grep ice

No olvide revisar /var/log/ cuando esté haciendo pruebas de conexión con cualquier navegador web, por ejemplo a la interfaz de administración que está en el subdirectorio http://miserver:mipuertoicecast/admin/mountpoints.

Icecast2 es poderoso y le permitirá hacer emisión de varios formatos, además de contar con arquitecturas con servidores master y slaves.

Más adelante se mostrará un poco más de esto.

Programa para captura de video y generación de ogg

Usaremos freej de www.dyne.org (los mismos de DyneBolic) que se encargará de controlar la webcam, es decir, generar .ogg a partir de su entrada.

Si se quiere tener la posibilidad de sobre imponer texto al video, es necesario instalar libfreetype6, en debian: apt-get install libfreetype6-dev libsdl1.2-dev libtheora0 gstreamer0.8-theora libtheora-dev libvorbis-dev libpng12-dev

La versión de FreeJ que trae Debian en la versión estable es longeva y por lo tanto es mejor obtener las fuentes y compilar localmente, requerirá instalar varias librerías de desarrollo -dev como la previamente mencionada para completar la compilación exitósamente, No se preocupe, no es dificil pero si bastante gratificante. La version actual de FreeJ es la 0.8.1. Si usted compiló theora como en la sección anterior, descárguelo y adelante.

Versión más reciente

(Nota: kysucix el developer de FreeJ acaba de agregar la opción que permite determinar el numero de cuadros por segundo a lo que emitiremos -f <#fps>, si ud. se siente con ganas de tener la version más fresca lo invitamos a usar subversion, los siguientes pasos permitirán una instalación indolora.

Asegúrese de tener los paquetes : libtool y automake1.9

apt-get install libtool automake1.9

Posteriormente descargue las fuentes de freej

svn co svn://code.dyne.org/rastasoft/freej

Vaya al directorio trunk y comience la instalación

cd trunk
./autogen.sh

Como de costumre :

make
make install

NOTA: La version de SVN nos permite usar el flag -f (framerate o número de cuadros por segundo). }}}

Instalación

Despues tener el paquete freej-0.8.1.tar.gz en caso de bajarse esa version, procedemos a la instalacion:

Primero descomprimimos el paquete

 tar -zvxf freej-0.8.1.tar.gz
 cd freej-0.8.1

Configuramos las fuentes

 ./configure

Compilamos

 make

Instalamos *Recuerde que este paso lo debe hacer como root

 make install

Es probable que usted no tenga la libreria SDL que es necesaria para la instalaciond de Freej puede instalarla haciendo

 apt-get install libsdl1.2-dev

Pruebas de uso de freej

Una vez instalado, se puede usar :

 freej /dev/video0 -s 160x120 -T 6

Hay que asegurarse que el device video0 si corresponda al lugar donde monta el dispositivo (webcam) puede ser que este en video1 dependiendo de las cosas que se tengan conectadas o si se usa una tarjeta de video, etc. el flag -s en freej obecede al tamaño (size) de la ventana de visualización, para este caso decidimos usar 160x120 ya que es una prueba y nuestra intención es hacer streamings a personas que posiblemente usan un módem para conectarse y no tienen ancho de banda suficiente para bajar un stream de mayor tamaño. la -T en freej obedece al codec (compresion/decompresion de video) theora que es ogg video, la calidad escogida es 6, baja tambien debido a las restricciones de ancho de banda, pero se puede experimentar con números mayores, por defecto es 16.

Hay más opciones, como sobreimponer un logo en formato png o algún subtítulo, simplemente se requiere agregar las rutas a ambos archivos: mask.png subtitle.txt si se quiere hacer un stream de solo video se puede agregar el flag -a, para que no capture el sonido, porque por defecto freej lo hace.

Es importante tener claro que freej es una herramienta para mezclar video en tiempo real y que se puede jugar con video sin hacer necesariamente un stream (emision en tiempo real a traves de internet)-

Interacción de freej con icecast

La ejecución de freej de la siguiente forma, permitiría que icecast pueda ofrecer a muchas personas la visualización.

 freej /dev/video0 -s 160x120 -T 6 -V 3 -i http://localhost:8000/mivideo.ogg -p miclave

La -V obedece al bitrate, lastimosamente no esta bien documentada por parte de sus desarrolladores asi que se debe jugar con el valor y comparar con mplayer como esta llegando la señal al otro lado, mplayer nos dira el bit rate exacto. La -i determina el lugar donde está el servidor de stream, suponiendo que icecast está configurado en el puerto 8000 en localhost. Por último la -p obecede al password en en servidor que recibe sl stream y debe encargarse de su d distribucion, por supuesto que debe coincidir :)

En la ventana de ncurses de freej puede usar C-h para obtener ayuda, para que efectivamente inicie la interacción entre freej e icecast se emplea C-w, y para poder visualizar localmente el streaming se emplearía :

Notará que la ventana que despliega mplayer tiene un retardo comparada con la pantalla de visualización de freej. Delay debido al viaje de los paquetes a traves de la red.

Freej graba todo lo que emite en formato de video ogg theora, los archivos son nombrados freej-*.ogg, para evitar la generacion de dichos archivos se puede agregar esto a la linea de comando: -e /dev/null

Binarios precompilados para Sarge

Puede obtener estos binarios para instalarlos en su máquina y poder hacer el streaming fácilmente, obviamente make install como root :) :

 cd /tmp
 wget http://recursos.slec.net/streaming/libtheora-1.0alpha5-sargex86.tgz
 wget http://recursos.slec.net/streaming/binfreej-0.8.1-sargex86.tgz
 wget http://recursos.slec.net/streaming/binicecast-2.3-kh3a-sargex86.tgz
 cd libtheora-1.0alpha5 ; make install
 cd freej-0.8.1 ; make install
 cd icecast-2.3-kh3a ; make install

Si desea, puede hacer paquetes precompilados para facilitar la instalación para otros usuarios, si encuentra que al tratar de ejecturalos hay dependencias que hacen falta, por favor coloque los nombres de los paquete en este documento a continuación para facilitar a otros el trabajo :

Para instalar el libtheora necesita al menos la libreria sdl, para esto bastaria hacer:

apt-get install libsdl1.2-dev

Para instalar el icecast parchado hay que tener al menos estas 3 librerias: libssl-dev, libcurl-dev y libspeex-dev

apt-get install libssl-dev
apt-get install libcurl-dev
apt-get install libspeex-dev

Es posible que al tratar de arrancar el icecast este no arranque debido a que trata de buscar /usr/lib/libtheora.so.0 y no lo encuentra, lo que sucede es que la instalacion copia las librerias de theora a /usr/local/lib/ , en tal caso se puede hacer lo siguiente:

agregar /usr/local/lib al archivo /etc/ld.so.conf y ejecutar:

ldconfig

Referencias

Autoría

WikiSlec: HacerStreamDeVideoConSoftwareyCodecsLibres (last edited 2010-01-24 23:09:50 by 120)