Streaming video Ubuntu Feisty

De Grupo GNU/Linux de la Universidad del Cauca, la enciclopedia libre.

Enero 9 de 2.007.

Por José Raul Romero Mera.

MiniTutorial Streaming de video en Ubuntu Feisty Fawn (7.10)

Este es un pequeño y sencillo esbozo de un documento en el que se pretende indicar paso a paso una forma de lograr hacer un streaming de Video usando tecnologias de uso Libre. La intención es brindar un documento sencillo e introductorio sobre una prueba inicial de instalacion y configuracion basica de un servidor para streaming de video que se realizó para el Proyecto eStreaming del Grupo de Aplicacion en Software Libre Vultur del Grupo GNU/Linux de la Universidad del Cauca y del GEC (http://www.gec.unicauca.edu.co), este se ha basado en otros trabajos [10], [11], [12] efectuados por integrantes de comunidades libres de Colombia.

Para este propósito se empleó lo siguientes equipos:

  1. Un Pc con Sistema operativo GNU/Linux Ubuntu 7.10 Feisty Fawn.
  2. Una Cámara Genius VideoCAM GE111 con conexión USB.
Tabla de contenidos

Verificación del funcionamiento de la camara web usb:

Para Ubuntu 6.06 (Dapper), 6.10 (Edgy), and 7.04 (Feisty), los drivers estan incluidos [1], solo basta conectar y usar la aplicacion gqcam o kopete

1.1. Conexion de la camara Web

Inicialmente se conecta la camara Genius USB, en este caso, se tiene a disponibilidad una Genius VideoCAM GE111, se verifica la visibilidad de esta camara en los dispositivos usb mediante el comando lsusb

jorarome@spongebob:~$ lsusb
Bus 005 Device 001: ID 0000:0000  
Bus 004 Device 001: ID 0000:0000  
Bus 003 Device 003: ID 093a:2471 Pixart Imaging, Inc. 
Bus 003 Device 001: ID 0000:0000  
Bus 002 Device 002: ID 0583:a000 Padix Co., Ltd (Rockfire) 
Bus 002 Device 001: ID 0000:0000  
Bus 001 Device 003: ID 03f0:7804 Hewlett-Packard 
Bus 001 Device 001: ID 0000:0000  

Se observa que esta en el bus 003, su referencia es la Pixart Imaging.

El driver para la camara Genius VideoCAM GE111, es spca5xx [2] y la camara web se identifica con x093a:0x2471

1.2. Probando funcionamiento de la camara web

Se efectua la prueba con gqcam:

jorarome@spongebob:/dev$ gqcam
/dev/video: No such file or directory
jorarome@spongebob:/dev$ 

jorarome@spongebob:~$ dmesg | grep spca
[   84.370793] ubuntu/media/gspcav1/gspca_core.c: USB SPCA5XX camera found. (PAC207)
[   84.375186] usbcore: registered new interface driver gspca
[   84.375189] ubuntu/media/gspcav1/gspca_core.c: gspca driver 01.00.12 registered
[  138.836000] ubuntu/media/gspcav1/gspca_core.c: USB SPCA5XX camera found. (PAC207)
jorarome@spongebob:~$ 

Para solucionar el inconveniente que se nos ha presentado, recurrimos a buscar por google, encontramos un sitio [3], donde se relacionan una serie de consejos para uso de webcam y encontramos la solucion al inconveniente:

jorarome@spongebob:~$ gqcam -v /dev/video0

logrando observar la imagen de video que captura la camara en su momento.

Instalacion y configuracion del servidor Icecast2

2.1. Instalación de Icecast2

El servidor icecast2 que viene en los paquetes de Ubuntu Feisty Fawn, corresponde a la version 2.3.1-5 [4], la cual contiene la caracteristica de servicio de video, por lo que procede con su instalación mediante el comando:

jorarome@spongebob:~$ sudo apt-get install icecast2
Password:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo información de estado... Hecho
Los siguientes paquetes fueron instalados automáticamente y ya no son necesarios:
  gdesklets-data gdesklets
Use «apt-get autoremove» para desinstalarlos.
Paquetes recomendados
  ices2
Se instalarán los siguientes paquetes NUEVOS:
  icecast2
0 actualizados, 1 se instalarán, 0 para eliminar y 102 no actualizados.
Necesito descargar 270kB de archivos.
Se utilizarán 745kB de espacio de disco adicional después de desempaquetar.
Des:1 http://co.archive.ubuntu.com feisty/universe icecast2 2.3.1-5 [270kB]
Descargados 270kB en 4m33s (986B/s)                                            
Seleccionando el paquete icecast2 previamente no seleccionado.
(Leyendo la base de datos ...  
109515 ficheros y directorios instalados actualmente.)
Desempaquetando icecast2 (de .../icecast2_2.3.1-5_i386.deb) ...
Configurando icecast2 (2.3.1-5) ...
Agregando grupo `icecast' (GID 120) ...
Terminado.
Agregando usuario del sistema `icecast2' (UID 110) ...
Agregando nuevo usuario `icecast2' (UID 110) con grupo `icecast' ...
No se crea el directorio de inicio '/usr/share/icecast2'.
icecast2 daemon disabled - read /etc/default/icecast2.

jorarome@spongebob:~$ 

2.2. Configuracion del servidor Icecast2

Esta es una configuracion muy basica por lo tanto no se tiene aspectos de seguridad.

2.2.1. Se edita con un editor de preferencia en modo superusuario el archivo /etc/init.d/icecast2 :

jorarome@spongebob:/etc$ sudo gedit /etc/init.d/icecast2

2.2.2. Se busca esta linea:

 # Change this to true when done to enable the init.d script
 ENABLE=false

y se procede a modificar ENABLE=false por ENABLE=true


2.2.3. Se edita el archivo de configuracion del servidor icecast

jorarome@spongebob:~$ sudo gedit /etc/icecast2/icecast.xml

2.2.4. Se procede a cambiar los password por defecto, los password no son encriptados [5], por lo que se aconseja configurar el icecast con una clave segura [6], requiriendose de una utilidad muy recomendable llamada makepasswd, Para nuestro ejercicio efectuamos los cambios quedan asi:

     <authentication>
         <source-password>hackme_source</source-password>
         <relay-password>hackme_relay</relay-password>
 
         <admin-user>admin</admin-user>
         <admin-password>hackme_admin</admin-password>
     </authentication>


Ejecución del servidor de Icecast2

3.1. Iniciando Icecast2

Se inicia con el siguiente comando:

jorarome@spongebob:~$ sudo /etc/init.d/icecast2 start
Password:
Restarting icecast2: Starting icecast2
Detaching from the console
icecast2.
jorarome@spongebob:~$ 

3.2. Verificacion ejecucion de Icecast

Se procede a verificar si el servidor esta corriendo con:

jorarome@spongebob:~$ ps aux | grep icecast
icecast2   13491  0.0  0.4   9668  2220 pts/1    Sl   21:54   0:00 /usr/bin/icecast2 -b -c /etc/icecast2/icecast.xml
jorarome   13541  0.0  0.1   2900   764 pts/1    R+   21:56   0:00 grep icecast
jorarome@spongebob:~$ 

3.3. Verificacion acceso a Icecast2 por web.

Se comprueba con el navegador, digitando: http://localhost:8000/admin/

Instalacion y ejecucion de freej

El servidor freej que viene en los paquetes de Ubuntu Fesity Fawn, corresponde a la version 0.8.1 [4], la cual contiene la caracteristica de servicio de video, la version de Freej en Ubuntu 6.06 (Dapper)[7]es anterior a la version 0.8.1 por lo que debe ser instalado manualmente [13]

4.1. Instalacion de Freej

La instalacion de Freej se hace con el comando:

jorarome@spongebob:~$ sudo apt-get install freej

4.2. Arranque de Freej

Se inicia con el siguiente comando:

jorarome@spongebob:~$ freej /dev/video0 -s 160x120 -T 6 -V 3 -i http://localhost:8000/mivideo.ogg - p hackme_source
[*] starting FreeJ 0.8.1 engine
[*] FreeJ version 0.8.1   RASTA SOFTWARE
 .  (c)2001-2005 Jaromil & Kysucix @ dyne.org
 .  ----------------------------------------------
[*] SDL Viewport is x11 160x120 32bpp
[*] JavaScript parser initialized
[*] Using memory-to-memory copy method : MMXEXT optimized memcpy()
[*] loading available plugins
 .  plugged: Water filter v1 by jaromil
 .  plugged: Vertigo filter v1 by Fukuchi Kentarou
 .  plugged: SquareTrans filter v2 by Clifford Smith
 .  plugged: Simura filter v1 by Fukuchi Kentarou
 .  plugged: Rotozoom filter v1 by van Paassen, Ellacott
 .  plugged: Ripple filter v1 by Fukuchi Kentarou
 .  plugged: RandTrans filter v1 by Clifford Smith
 .  plugged: QuadTrans filter v2 by jaromil
 .  plugged: Nervous filter v1 by Edo Tannenbaum
 .  plugged: Edge filter v1 by Fukuchi Kentarou
 .  plugged: Delaymap filter v2 by Andreas Schiffler
 .  plugged: Cartoon filter v1 by Dries Pruimboom
 .  plugged: Blur filter v1 by jaromil
 .  plugged: Baltan filter v1 by Fukuchi Kentarou
 .  plugged: BackLight filter v1 by Pete Warden
[*] Closing video4linux grabber layer
 .  unmapping address 0xb71f6000 sized 2457616 bytes
 .  closing video4linux device 6
[*] JsParser::close()
[*] cu on http://freej.dyne.org
jorarome@spongebob:~$ 

Si desea conocer sobre el comando freej y sus opciones, una explicacion sencilla hay en [8]

Comprobacion del streaming de video

5.1. Ejecucion de aplicacion Mplayer

Se corre la aplicacion mplayer:

jorarome@spongebob:~$ mplayer http://localhost:8000/mivideo.ogg
MPlayer 2:1.0~rc1-0ubuntu9.1 (C) 2000-2006 MPlayer Team
CPU: AMD Athlon(tm) 64 Processor 3200+ (Family: 15, Model: 47, Stepping: 2)
CPUflags:  MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing http://localhost:8000/mivideo.ogg.
Resolving localhost for AF_INET...
Connecting to server localhost[127.0.0.1]: 8000...
Server returned 404: File Not Found
STREAM_ASF, URL: http://localhost:8000/mivideo.ogg
Resolving localhost for AF_INET...
Connecting to server localhost[127.0.0.1]: 8000...
Server returned 404:File Not Found
Failed to parse header.
Failed, exiting.
Resolving localhost for AF_INET...
Connecting to server localhost[127.0.0.1]: 8000...
Server returned 404: File Not Found
File not found: 'localhost:8000/mivideo.ogg'
Failed to open http://localhost:8000/mivideo.ogg.


Exiting... (End of file)
jorarome@spongebob:~$ 

Para solucionar el inconveniente que se nos ha presentado, se revisa la documentacin disponible sin poder encontrar la causa, se recurrió a consultar al canal de IRC de #altred en freenode y gracias a la gran ayuda de kepler y sparkid se determinó la falla: un error en la digitación de comando, ademas suministraron un enlace [9] para mas ayuda.

Se digitaba:

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

cuando el comando correcto es:

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

De acuerdo a esto, ejecutamos freej nuevamente:

jorarome@spongebob:~$ freej /dev/video0 -s 160x120 -T 6 -V 3 -i http://localhost:8000/mivideo.ogg -p hackme_source

ImageLayer :: w[400] h[300] bpp[32] size[480000]                               
 Device detected is /dev/video0                                                 
 Genius VideoCam Ge111
 1 channels detected
 max size w[352] h[288] - min size w[160] h[120]
 Video capabilities:
 VID_TYPE_CAPTURE          can capture to memory
 memory map of 2 frames: 2457616 bytes
 Offset of frame 0: 0
 Offset of frame 1: 1228808

Procedemos a presionar las teclas Ctrl+w:

Ctrl+w
 Streaming to localhost:8000                                                    
 Saving to freej-4.ogg
 Video streaming on http://localhost:8000/mivideo.ogg

Se observa el funcionamiento.

Se ejecuta nuevamente la aplicacion mplayer:

jorarome@spongebob:~$ mplayer http://localhost:8000/mivideo.ogg
MPlayer 2:1.0~rc1-0ubuntu9.1 (C) 2000-2006 MPlayer Team
CPU: AMD Athlon(tm) 64 Processor 3200+ (Family: 15, Model: 47, Stepping: 2)
CPUflags:  MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing http://localhost:8000/mivideo.ogg.
Resolving localhost for AF_INET...
Connecting to server localhost[127.0.0.1]: 8000...
Cache size set to 320 KBytes
Cache fill: 15.00% (49152 bytes)   
[Ogg] stream 0: video (Theora v3.2.0), -vid 0
[Ogg] stream 1: audio (Vorbis), -aid 0
Ogg file format detected.
VIDEO:  [theo]  160x120  24bpp  25.000 fps    0.0 kbps ( 0.0 kbyte/s)
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
open: No such file or directory
[MGA] Couldn't open: /dev/mga_vid
[VO_TDFXFB] Can't open /dev/fb0: No such file or directory.
[VO_3DFX] Unable to open /dev/3dfx.
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
[theora @ 0x8939638]Missing extradata!
Could not open codec.
VDecoder init failed :(
Opening video decoder: [theora] Theora/VP3
VDec: vo config request - 160 x 120 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
VO: [xv] 160x120 => 160x120 Planar YV12 
Selected video codec: [theora] vfm: theora (Theora (free, reworked VP3))
==========================================================================
==========================================================================
Forced audio codec: mad
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
Ogg : bad packet in stream 1
AUDIO: 44100 Hz, 1 ch, s16le, 80.0 kbit/11.34% (ratio: 10000->88200)
Selected audio codec: [ffvorbis] afm: ffmpeg (FFmpeg Vorbis decoder)
==========================================================================
AO: [alsa] 44100Hz 1ch s16le (2 bytes per sample)
Starting playback...
A: 244.0 V: 244.0 A-V:  0.002 ct:  0.673 6100/6100  0%  0%  0.3% 53 0 45% 

Y se puede apreciar el video.

Conclusiones:

A partir de Ubuntu 6.10 se puede efectuar un montaje de un servidor de streaming de video con los paquetes Icecast y Freej que ya viene precompilados y que tiene caracteristica de servicio de video, solo es seguir los pasos aqui indicados y que han sido basados de los que se indican en varios sitios web que algunos integrantes de comunidades de Software Libre de Colombia han trabajado y publicado sus experiencias.

Con un Pc Cliente con Sistema operativo WinXP y con VLC instalado conectado mediante una red LAN al servidor de streaming de video se observó que el video se congela demasiado cuyas causas han de ser analizadas partiendo de en el momento de la prueba no habia trafico en la red por lo que requiere profundizar en la configuracion del servidor Icecast como las opciones de comando de Freej que produce el stream de video que es enviado al servidor Icecast, ademas investigar sobre herramientas libres y/o metodologias que permitan cuantificar aspectos relacionados con la calidad y transmision del video.


ToDo List - Actividades pendientes por hacer:

  1. Revisar la forma correcta para configuracion del archivo icecast2.xml, y ver como lanzar icecast sin estar como superusuario.
  2. Lograr la configuracion optima para el montaje de un servidor Multimedia basado en icecast para colocarlo en produccion.
  3. Revisar los comandos de freej con el fin optimizar el streaming de video.
  4. Investigar la nueva version de freej 0.9 lanzada el 26 de Noviembre de 2007.
  5. Investigar la forma de medir cuantitativamente trafico o canal consumido en una transmision, calidad de video, etc, de un streaming de video, cuales herramientas libres existen para estas mediciones.

Referencia:

[1] Spca5xx - Community Ubuntu Documentation https://help.ubuntu.com/community/Spca5xx (Consultada Julio 2007)

[2] Linux-USB device http://www.qbik.ch/usb/devices/showdevcat.php?id=9 (Consultada Julio 2007)

[3] Installa la tua webcam su Linux << Ubuntu nella scatola http://ubuntubox.wordpress.com/2007/03/20/installa-la-tua-webcam-su-linux/

[4] Package: freej (0.8.1-3) [universe] http://packages.ubuntu.com/feisty/x11/freej (Consultada Julio 2007)

[5] Icecast v2.x Documentation http://icecast.org/docs/icecast-2.3.1/icecast2_config_file.html (Consultada Julio 2007)


[6] Monta tu radio online con icecast y XMMS | Ubuntu-es http://www.ubuntu-es.org/index.php?q=node/30031 (Consultada Julio 2007)

[7] Package: freej (0.7.1-2) [universe] http://packages.ubuntu.com/dapper/x11/freej (Consultada Julio 2007)

[8] Interacción de freej con icecast http://www.altred.net/altred/streaming#head-bb0cdc55994f23db54c30056706b80eea4dff618 (Consultada Julio 2007)

[9] STREAMING VIDEO WITH FREEJ http://lab.dyne.org/FreejStreaming (Consultada Julio 2007)


[10] Cómo hacer streams de video? (usando software y codecs libres!) http://www1.autistici.org/communa/platanal/2006/02/25/usando-freej-streaming-de-video-con-codecs-libres/ (Consultada Julio 2007)

[11] HacerStreamDeVideoConSoftwareyCodecsLibres http://www.slec.net/HacerStreamDeVideoConSoftwareyCodecsLibres (Consultada Julio 2007)

[12] Video en tiempo real y usando codecs libres http://www.altred.net/altred/streaming (Consultada Julio 2007)

[13] Compilación del freej desde el subversion para Streaming de Audio y Video http://www.altred.net/altred/streaming#head-c4107162e5064941ce83ee6c56b904480bc2815a (Consultada Julio 2007)


Otras Referencias

HOW TO: Montar Radio en Ubuntu http://www.taringa.net/posts/info/808096/How-To:-Montar-Radio-en-Ubuntu.html (Consultada Julio 2007)

Montaje de drivers spca50x http://curioseandolinux.blogspot.com/2005/04/montaje-de-drivers-spca50x.html (Consultada Julio 2007)

Ogg Theora Video streaming with Icecast2 http://www.oddsock.org/guides/video.php (Consultada Julio 2007)

Montando um servidor de Webradio http://docs.indymedia.org/view/Sysadmin/IceCastPtBr (Consultada Julio 2007)

Icecast Release 2.3.1 http://www.icecast.org/ (Consultada Julio 2007)

Ubuntu packages http://packages.ubuntu.com/ (Consultada Julio 2007)


Licencia

Este articulo esta bajo la Licencia: Creative Commons Attribution-NonCommercial-ShareAlike License (http://creativecommons.org/licenses/by-nc-sa/3.0/)

Otros

Agradecimiento a la gente de Altred (http://www.altred.net/) por su gran labor en favor de las redes sociales en Colombia.

Este articulo es dedicado a mi hijo Juan Daniel quien ha sugerido que le colocaramos el nombre al PC de Bob Esponja, porque es su programa favorito de TV.

Opiniones, Comentarios, Correcciones, dudas e inquietudes son bienvenidas en Discusión Streaming de video en Ubuntu Feisty Fawn.


El contenido del material publicado por nuestros columnistas es responsabilidad de sus autores.

Para saber más sobre la programación y naturaleza de nuestros artículos, columnas y pistas técnicas, haga clic aquí.


Herramientas Personales
MediaWiki GNU Free Documentation License 1.2