Después de haber instalado Wowza en nuestro servidor, probaremos si se está ejecutando simplemente poniendo nuestra IP y añadiendo el puerto 1935 en el navegador de esta manera:

http://[ip del servidor]:1935

¿problemas?

Si la página no se puede cargar, el servidor no se está ejecutando, y es probable que Apache haya entrado en conflicto con Wowza, para ello habrá que finalizar el servicio apache2:

service apache2 stop

o bien:

sudo /etc/init.d/apache2 stop

Otra opción es mantener apache2 y Wowza dos ejecutándose en el puerto 80, para ello, echad un ojo a esta entrada.

Y ahora arrancamos Woza:

service WowzaMediaServer start

primer live stream

Ahora que ya está arrancado Wowza, vamos a proceder a crear nuestro primer streaming en directo, para ello necesitaremos emitir a nuestro servidor video y este lo retransmitirá de nuevo a nuestros clientes. Pero primero, la configuración.
Necesitamos saber que el directorio de la instalación del servidor es ‘/usr/local/WowzaMediaServer’. Si hacemos un listado, obtendremos los siguientes directorios:

cd /usr/local/WowzaMediaServer
ls
applications  bin  conf  content  documentation  examples  keys  lib  logs

Descripción:

  • applications: el directorio donde crearemos el nombre y los ficheros de configuracion de nuestras aplicaciones live, on demand, codificadores..etc.
  • bin: ejecutables binarios de Wowza.
  • conf: todos los ficheros de configuración generales.
  • content: lugar para almacenar archivos de video para reproducirlos on demand o listas SMIL.
  • documentation: pdfs con documentación.
  • examples: ejemplos de aplicaciones, incluye archivos flash y html.
  • keys:
  • lib: librerias y plugins.
  • logs: registros de error, de reproducción, etc.

Ahora vamos a crear nuestra primera aplicación en directo, para ello, instalamos la del ejemplo:

sudo ./examples/LiveVideoStreaming/install.sh

Nos habrá creado en la carpeta ‘applications’ dos carpetas: live y rtplive. Ambos dos son ejemplos para transmitir en vivo, solo se diferencian en el protocolo entrante (del programa que codifica y emite) que aceptan. También estarán ambas carpetas en el directorio ‘conf’. Si queremos probar cambios siempre que modifiquemos algo de la configuración del servidor, debemos de reiniciarlo:

sudo service WowzaMediaServer restart

Si no funciona, miramos el ejemplo de Wowza.

Ahora vamos a probar con el programa wirecast, si la emision en vivo funciona, nos descargamos Wirecast desde www.wirecast.com (previo registro) y despues de instalarlo, reproducimos un video (File -> Import Media) y hacemos click en el dibujo de la antena de emitir, elegimos el perfil de ‘Flash Low Bandwith’ y en la URL, ponemos ‘rtmp://laipdelservidor/live’ y en el campo stream ‘myStream’. Damos a aceptar y comenzará a emitir.

También podemos elegir retransmitir desde la linea de comandos (mejor rendimiento en PC’s viejos) haciendo uso de ffmpeg mediante:

 ffmpeg -i archivoejemplo.mp4 -re -acodec copy -vcodec copy -f flv rtmp://[ip del servidor]/live/myStream

o desde una webcam, con:

ffmpeg -r 25 -re -f video4linux2 -i /dev/video0 -pix_fmt yuv420p -r 25 -re -vcodec libx264 -f flv -y rtmp://[ip del servidor]/live/myStream

Para ver si está emitiendo, abrimos VLC y damos a Medio -> Abrir volcado de Red y ponemos la url anterior, pero añadiendo el stream: ‘rtmp://localhost/live/myStream’ y le damos a reproducir. Si todo ha ido bien, debería de verse el vídeo que estamos emitiendo en el VLC.

Aqui teneis un script en bash para hacer un bucle infinito, de tal manera que si se interrumple la emisión por pérdida de red o saturación del sistema, el script lo volverá a intentar:

#!/bin/bash
while true; do
        ffmpeg -r 25 -re -f video4linux2 -i /dev/video0 -pix_fmt yuv420p -r 25 -re -vcodec libx264 -f flv -y rtmp://[ip del servidor]/live/myStream
        sleep 2
done

También podemos añadir el profile baseline a nuestro stream en ffmpeg para que sea mas compatible con iOS y Android:

-profile:v baseline

pero hay que tener en cuenta que emitirá mas Kbps que sin ello.

proteger el streaming

Vamos a proceder a proteger la emisión del streaming, para que nadie, conociendo nuestra IP pueda emitir su contenido. Para ello, existen varios plugins en Wowza:

ModuleRTMPAuthenticate

Nota: para que funcione, hay que añadir en /lib los ficheros wms-plugin-collection.jar y wms-plugin-security.jar que se pueden descargar desde aquí y aquí.

La autentificación mendiante Flash sería de la siguiente forma:

... rtmp://usuario:contrasenya@[ip del servidor]/live/myStream

Editamos el fichero Application.xml de nuestra aplicacion live y en la parte <Modules> le añadimos:

<Module>
	<Name>ModuleRTMPAuthenticate</Name>
	<Description>ModuleRTMPAuthenticate</Description>
	<Class>com.wowza.wms.plugin.security.ModuleRTMPAuthenticate</Class>
</Module>

Si queremos un mismo usuario y contraseña para todas las aplicaciones, el fichero publish.password debera de estar en /conf , después añadimos el siguiente bloque en <Properties>

<Property>
	<Name>rtmpEncoderAuthenticateFile</Name>
	<Value>${com.wowza.wms.context.VHostConfigHome}/conf/publish.password</Value>
</Property>

por el contrario, si queremos una autentificacion por cada tipo de aplicacion, copiaremos el fichero publish.password en /conf/live y después añadimos el siguiente bloque en <Properties>

<Property>
	<Name>rtmpEncoderAuthenticateFile</Name>
	<Value>${com.wowza.wms.context.VHostConfigHome}/conf/${com.wowza.wms.context.Application}/publish.password</Value>
</Property>

El fichero publish.password es un fichero en texto plano con el siguiente formato: [usuario] [espacio] [contraseña]

Este metodo de autentificacion se usa para programas como Wirecast3 o Adobe Flash Media Live Encoder y al conectarnos, nos solicitará mediante una nueva pantalla el usuario y contraseña. No sirve para FFMPEG.

ModuleSecureURLParams

Nota: para que funcione, hay que añadir en /lib los ficheros wms-plugin-collection.jar y wms-plugin-security.jar que se pueden descargar desde aquí y aquí.

La autentificación mediante ffmpeg sería de la siguiente forma:

... rtmp://[ip del servidor]/live?doPublish=12345/myStream

Editamos el fichero Application.xml de nuestra aplicacion live y en la parte <Modules> le añadimos:

<Module>
	<Name>ModuleSecureURLParams</Name>
	<Description>ModuleSecureURLParams</Description>
	<Class>com.wowza.wms.plugin.security.ModuleSecureURLParams</Class>
</Module>

después añadimos el siguiente bloque en <Properties>

<Property>
	<Name>secureurlparams.publish</Name>
	<Value>12345.doPublish</Value>
</Property>

donde 12345 es la contraseña que pondremos para poder emitir y doPublish es la cadena de conexión.
Nota: para que funcione, hay que añadir en /lib los ficheros wms-plugin-collection.jar y wms-plugin-security.jar.
Este metodo de autentificacion se para linea de comandos en FFMPEG.

¿problemas?
En Lubuntu 12.04 LTS funcionan los comandos anteriores sin problemas, pero si usais otra versión de ffmpeg y no encuentra la librería libx264, hay que compilarlo con dicho soporte de la siguiente manera, también puedes echar un ojo al post sobre cómo compilarlo en raspberry Pi.

listas de reproducción SMIL

SMIL es un tipo de fichero XML usado para programar la emision de contenido en Wowza. Admite ficheros de video flv y mp4 de diferente bitrate y también emisiones live para cuando llega el momento programado, interrumpir los ficheros y conectar ‘en directo’ con la emision live.
Para reproducir una lista SMIL, hace falte tener una aplicación live instalada, como es nuestro caso.
En el directorio /content es donde se almacena tanto la lista de reproduccion como los ficheros de video de la lista. No pueden estar fuera de este directorio.En nuestro caso, tenemos esto en la carpeta /content:

streamschedule.smil.
enlace.mp4
/videos
/videos/video1.flv
/videos/video2.flv

y este es nuestro fichero streamschedule.smil (se tiene que llamar asi, sino no funciona):

<smil>
	<head>
	</head>
	<body>
		<stream name="stream1"></stream>
 
		<playlist name="pl1" playOnStream="stream1" repeat="true" scheduled="2009-04-04 13:30:00">
			<video src="mp4:enlace.mp4" start="0" length="-1"/>
			<video src="flv:videos/video1.flv" start="0" length="-1"/>
			<video src="mp4:enlace.mp4" start="0" length="-1"/>
			<video src="flv:videos/video2.flv" start="0" length="-1"/>
		</playlist>
		<playlist name="pl2" playOnStream="stream1" repeat="false" scheduled="2013-04-05 18:15:00">
			<video src="myStream" start="-2" length="-1"/>
		</playlist>
	</body>
</smil>

Explicación: hemos creado un único stream «stream1», que es el stream que emitira las listas de reproducción. A continuación hay dos listas (pl1 y pl2) que tienen varios atributos:
playOnStream: indica en que stream se va a emitir esta lista de reproducción, en nuestro caso, como solo tenemos «stream1», pues «stream1».
repeat: es un booleano (true o false) si esta a true se repetira infinitamente siempre que le toque reproducirse.
scheduled: esta es la fecha de programacion de esta lista de reproducción, si la fecha ya ha pasado, se reproducirá (y si el atributo repeat esta a true, pues se repetirá indefinidamente). Sin embargo puede ocurrir que esta lista de reproducción (pl1), sea interrumpida porque hay otra lista programada para emitir en «stream1», como es el caso de «pl2» cuya fecha aun no ha llegado.Cuando llegue la fecha scheduled de «pl2», comenzará a reproducirse y cuando acabe, volverá a «pl1», ya que contunuaba reproduciendose indefinidamente en background.

Recomiendo leer la guia de Wowza sobre listas SMIL para más información.

Pero para que la lista SMIL funcione, hay que añadir en el fichero Server.xml situado en /conf dentro de la etiqueta <ServerListeners> :

<ServerListener>
    <BaseClass>com.wowza.wms.plugin.collection.serverlistener.ServerListenerStreamPublisher</BaseClass>
</ServerListener>

por último, añadir esta linea en <Properties> del Server.xml:

<Property>
<Name>PublishToApplication</Name>
<Value>live</Value>
</Property>

donde «live» es la aplicacion del tipo live a la que se enviara el stream desde el SMIL. Ej: rtmp://[ip del servidor]/live/stream1 -> se emitira en stream1 por la configuración del SMIL.
Nota: para que funcione, hay que añadir en /lib el fichero wms-plugin-collection.jar.

de RTMP a RTSP

Al emitir en formato RTMP, Wowza lo vuelve a retransmitir en RTMP, pero si necesitamos usar el protocolo RTSP (dispositivos móviles como Android), lo unico que tenemos que hacer es cambiar la cadena de conexión RTMP por:

rtsp://[ip del servidor]:1935/live/myStream

Ahora bien, algunos dspositivos buscan el puerto 554 para rtmp y para que wowza haga uso de el, dimplemente hay que añadirselo en el fichero /conf/VHost.xml

<Port>1935,554</Port>

Y ya podremos usar la cadena de conexión sin necesidad de añadirle el puerto, la propia aplicacion lo buscara.

rtsp://[ip del servidor]/live/myStream

previsualizar nuestros streams

Para visualizar nuestros streams tenemos dos opciones:

  • VLC: «Archivo-> Abrir volcado de red…«
  • Internet: Vamos es esta página, pegamos la URL del streamy pulsamos sobre reproducir.