Blackhold

Stream de Icecast 2.4.0 con webm

Posted on juny 1st, 2014 by admin

Webm es el nuevo protocolo estándard de stream de vídeo compatible con html5.

El día 4 de Mayo salió la nueva release de este software de streaming y una de las novedades es el soporte de webm.

Vamos a instalar icecast 2.4.0 en una debian 7:

Instalamos primero algunas dependencias

root@capa8-icecast:/usr/local# apt-get install build-essential libxslt1-dev libvorbis-dev curl

Y vamos a instalar la nueva versión de icecast.

root@capa8-icecast:/usr/local# wget http://downloads.xiph.org/releases/icecast/icecast-2.4.0.tar.gz
root@capa8-icecast:/usr/local# tar xvzf icecast-2.4.0.tar.gz
root@capa8-icecast:/usr/local/icecast-2.4.0# cd /usr/local/icecast-2.4.0
root@capa8-icecast:/usr/local/icecast-2.4.0# ./configure
root@capa8-icecast:/usr/local/icecast-2.4.0# make
root@capa8-icecast:/usr/local/icecast-2.4.0# make install

Ahora modificamos el fichero de configuración que se encuentra en /usr/local/etc/icecast.xml, recomiendo hacer una copia del fichero ejemplo y trabajar con este nuevo fichero, de esta forma podemos definir varias configuraciones para el servidor y así simplemente si queremos aplicar otra configuración es tan simple como al momento de arrancar iceast llamar al otro fichero de configuración.

root@capa8-icecast:/usr/local/etc# cp icecast.xml stream-capa8.xml
<authentication>
<!-- Sources log in with username 'source' -->
<source-password>hackme</source-password>
<!-- Relays log in username 'relay' -->
<relay-password>hackme</relay-password>

<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>hackme</admin-password>
</authentication>

Y añadimos un punto de montaje donde hacer las pruebas:

<mount>
 <mount-name>/test.webm</mount-name>
 <username>test</username>
 <password>test</password>
 <dump-file>/opt/dump_icecast/test_dump.webm</dump-file>
</mount>

 

Esto antes de la línea: <fileserve>1</fileserve>

Si no tenemos mucha idea de icecast, la documentación nos recomienda simplemente cambiar los passwords y el servidor ya está listo para funcionar. Después entraremos con ello :)

Icecast no se deja arrancar como root, a menos que se lo permitas en el fichero de configuración:

root@capa8-icecast:~# icecast -c /usr/local/etc/stream-capa8.xml 
ERROR: You should not run icecast2 as root
Use the changeowner directive in the config file

Así que si nos lo recomiendan vamos a crear un usuario de icecast y le vamos a crear un directorio donde pueda guardar felizmente los ficheros de log :)

root@capa8-icecast:~# adduser icecast
root@capa8-icecast:~# mkdir -p /usr/local/var/log/icecast/
root@capa8-icecast:~# chown -R icecast:icecast /usr/local/var/log/icecast/

Ahora arrancamos el servicio:

root@capa8-icecast:~# su - icecast
icecast@capa8-icecast:~$ icecast -c /usr/local/etc/stream-capa8.xml &
[1] 22383

Y verificamos que está arrancado:

icecast@capa8-icecast:~$ ps aux |grep icecast
root     22366  0.0  0.1  35608  1304 pts/0    S    20:35   0:00 su - icecast
icecast  22367  0.0  0.2  18716  2932 pts/0    S    20:35   0:00 -su
icecast  22383  0.0  0.1  28532  1884 pts/0    Sl   20:36   0:00 icecast -c /usr/local/etc/stream-capa8.xml
icecast  22390  0.0  0.1  15264  1128 pts/0    R+   20:36   0:00 ps aux
icecast  22391  0.0  0.0   6260   720 pts/0    S+   20:36   0:00 grep icecast
icecast@capa8-icecast:~$ netstat -lanp |grep 8000     
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      22383/icecast 

Si accedemos por http al puerto 8000 hay un interfaz web con el que podemos acceder a alguna información adicional con los passwords que hemos definido en el fichero de configuración.

http://10.228.192.220:8000/

Ahora vamos a mandar un stream webm con gstreamer.

Al igual que icecast, el día 21 de Mayo salió la versión 1.3.2 de gstreamer, así que esta también vamos a instalarla desde los sources. La instalación de gstreamer la hacemos desde otra máquina que no es donde está instalado el servidor de icecast.

La versión 1.2 disponible en los backports de wheezy es mucho más fácil de instalar y también soporta webm.

root@salnitre:~# vi /etc/apt/sources.list
# debian backports
deb http://ftp.de.debian.org/debian wheezy-backports main

root@salnitre:~# apt-get update
root@salnitre:~# apt-get install gstreamer1.0-tools libgstreamer1.0-0 libgstreamer-plugins-base0.10-0 -t wheezy-backports

Me he encontrado problemas con las dependencias del fichero libgstreamer-plugins-base0.10-0 y he tenido que forzar la instalación modificando las versiones de las dependencias (poco ortodoxo, lo reconozco).

dpkg-deb -x foo.deb tmpdir
dpkg-deb --control foo.deb tmpdir/DEBIAN
nano tmpdir/DEBIAN/control
dpkg -b tmpdir hacked.deb

Mañana instalo una debian unstable a ver si da menos problemas con la stable, olvídate! :(

#############################

Ahora lo siguiente es streamear con gst-launch. Aquí algunos ejemplos que tendrían que funcionar, pero no funcionan! :( así que me vuelvo a atascar al final del post xD he pedido ayuda a ver si puedo acabar esta documentación :P

root@salnitre:/lib/x86_64-linux-gnu# gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=320,height=240 ! vp8enc ! webmmux !  shout2send ip=10.228.192.220 port=8000 user=test password=test mount=/test.webm
ERROR: no s'ha pogut construir el conducte: no hi ha cap element «v4l2src».
root@salnitre:/lib/x86_64-linux-gnu# gst-launch-1.0 v4l2src device=/dev/video0 ! videoscale! video/x-raw,width=320,height=240 ! ffmpegcolorspace ! jpegenc ! tcpserversink host=10.228.192.220 port=8000
ERROR: no s'ha pogut construir el conducte: no hi ha cap element «v4l2src».
root@salnitre:/lib/x86_64-linux-gnu# gst-launch-1.0 v4l2src device=/dev/video0 ! videoscale! video/x-raw,width=320,height=240 ! vp8enc ! ffmpegcolorspace ! jpegenc ! tcpserversink host=10.228.192.220 port=8000
ERROR: no s'ha pogut construir el conducte: no hi ha cap element «v4l2src».
root@salnitre:/lib/x86_64-linux-gnu# 

« »

guy fawkes