Streaming video Ubuntu Feisty
De Grupo GNU/Linux de la Universidad del Cauca, la enciclopedia libre.
Enero 9 de 2.007.
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:
- Un Pc con Sistema operativo GNU/Linux Ubuntu 7.10 Feisty Fawn.
- 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:
- Revisar la forma correcta para configuracion del archivo icecast2.xml, y ver como lanzar icecast sin estar como superusuario.
- Lograr la configuracion optima para el montaje de un servidor Multimedia basado en icecast para colocarlo en produccion.
- Revisar los comandos de freej con el fin optimizar el streaming de video.
- Investigar la nueva version de freej 0.9 lanzada el 26 de Noviembre de 2007.
- 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í.

