Objetivo y Aplicación.
Compartir lo mostrado en la pantalla de mi computador, junto con el flujo de audio proveniente de la entrada de micrófono, a otros pares de la Internet.
Esquema de Implementación
Este primer esquema de implementación, sugiere el uso de la transmisión en modo unicast tal y como se muestra en la figura a continuación:
Elementos necesarios por parte del servidor
- Servidor Web (Apache2)+ Página alojada (Flash embebido).
- Un dominio público (DynDns, p.e.)
- Herramientas libres para streaming: Proyecto FFmpeg.
- Herramienta para control de servidor de streaming y alimentador de información (Tópicos de Programación de Sistemas: Java-Runtime-Process más adelante).
Elementos necesarios por parte del cliente
- Navegador + plugins flash.
Este esquema presentado coloca al servidor toda la carga de funcionamiento, ya que es donde corren todas las aplicaciones: El servidor de streaming(ffserver), el alimentador (ffmpeg) que entrega la información de la pantalla del computador junto con el audio proveniente de la entrada de micrófono empaquetados en formato swf, la herramienta de control de flujo multimedia explicada más adelante y la página alojada en el servidor Web Apache
Explicación de elementos más importantes
Repaso a FFMpeg
Ffmpeg es un programa sin interfaz gráfica que permite convertir o transformar entre formatos multimedia, tanto de video como de audio. Aunque existen otros programas, algunos sin necesidad de usar comandos, es una de las opciones con más posibilidades y es muy rápida. El paquete viene con tres programas:
- ffmpeg: ffmpeg es una herramienta en línea de comandos para convertir ficheros de vídeo, flujos de red o la entrada de una tarjeta de TV a varios formatos de vídeo.
- ffserver: es un servidor de flujo para todo lo que ffmpeg pueda usar como entrada (ficheros, flujos, entrada de la tarjeta de TV, cámara web, etc)
- ffplay: es un reproductor de medios muy simple y portable que utiliza las librerías ffmpeg y la librería SDL.
Instalación
Paquetes de desarrollo anexos necesarios, por ejemplo:
- libfaac-dev: An AAC audio encoder.
- libxvidcore4-dev: High quality ISO MPEG4 codec library.
- libvorbis-dev: The Vorbis General Audio Compression Codec.
dpkg-dev libimlib2-dev texi2html liblame-dev libfaad2-dev libmp4v2-dev libfaac-dev libxvidcore4-dev libtheora-dev libgsm1-dev libogg-dev libvorbis-dev liba52-dev libdts-dev libsdl1.2-dev libraw1394-dev libdc1394-13-dev quilt
Al momento de compilar las fuentes antes de instalar es necesario para nuestros fines habilitar ciertos módulos:
En Linux la compilación se realiza mediante:
./configure --enable-gpl --enable-libmp3lame --enable-x11grab
Tal y como se muestra si se necesita congurar otros módulos para otras aplicaciones de ffmpepg se agregan en forma similar.
Utilizando FFmpeg
La sintaxis del comando es :
Algunos ejemplos:
ffmpeg -i test1.mpg -vcodec mpeg4 -s 320x240 -b 300k -r 10 -acodec mp3 -ar 22050 -ab 64k -f avi test1.avi
Donde por ejemplo:
- vcodec: Especifica el codec de video para compresión usado.
- s: Especifica el size de compresión del vídeo de entrada.
- b: Especifica el bitrate de vídeo de compresión.
- r: Especifica la taza de cuadros por segundo de captura.
- acodec: Especifica el codec de audio usado.
- ar: Especifica la taza de audio usada.
- ab: Especifica bitrate de audio usado.
- f: Fuerza al formato de salida.
Otro ejemplo de uso es:
ffmpeg -i test2.flv -vn -acodec pcm\_s16le -ar 44100 -ac 2 test2.wav
FFserver.
¿Qué es FFserver?
FFserver es un componente anexo que permite servir flujos de video y audio a través de HTTP/RTP/RTSP.
Soporta archivos multimedia almacenados o que están siendo recibidos en tiempo real.
Para su uso es necesario conocer acerca de su archivo de configuración:
Se necesita configurar el archivo ffserver.conf que tiene una sección previa antes de configurar los streams de salida del servidor.
Port 8090
BindAddress 0.0.0.0
MaxClients 1000
MaxBandwidth 1000
NoDaemon
Lo cual determina el puerto usado por ffserver para realizar el streaming, la dirección de bind, la cual es necesaria si tenemos más de una interfaz de red, la máxima cantidad de clientes conectados, el ancho de banda máximo permitido entre todos los clientes y por último si este funcionará como demonio o será iniciado manualmente.
El resto del archivo de configuración tiene dos importantes secciones:
Feed: Cada Feed contiene una secuencia de Video y/o Audio proveniente de la salida de alguna instancia de ffmpeg. Es en sí una sección del archivo de configuración.
Por ejemplo:
< Feed feed1.ffm >
File /tmp/feed1.ffm
FileMaxSize 200K
ACL allow 127.0.0.1
< Feed >
Stream: Aquí se definen los parámetros de reproducción de los streams provenientes de los archivos previamente codificados por FFmpeg.
Ejemplo :
# ASF compatible
< Stream test.asf >
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoBufferSize 40
AudioBitRate 64
< Stream >
Por cada Feef pueden existir varios Streams que determinan varios tipos de formatos o de diferentes características.
Haciendo Streaming
Como iniciar el streaming:
./ffserver -f doc/ffserver.conf &
./ffmpeg -i INPUTFILE http://localhost:8090/feed1.ffm
Herramienta de Control de flujo de audio/vídeo
Se muestra la Gui de control.
Mediante esta Api se puede controlar el streaming de manera eficiente. En caso de necesitar cambiar los parámetros del flujo para modificar las características del video a enviar hacia los clientes.
Esta aplicación hace uso de la Clase Runtime de Java, con la cual se ejecutan los programas ffserver y ffmpeg los cuales están originalmente escritos en lenguaje c e instalados como se dijo anteriormente.
Se muestra la situación al iniciar la aplicación:
El diagrama de estado de la aplicación es el siguiente:
News :
[01.11.2008]
Segunda versión de la página Web del proyecto.
[15.10.2008]
Se está comienza con el estudio de los proyectos FFMPeg y XVidcap.
[02.10.2008]
Comienza la ejecución del proyecto de Trasmisión de multimedia
por internet.Se realiza la primera presentación.
Links :
- Página del Proyecto FFMPeg.
- FFMPeg.Frequently Asked Questions.
- FFMpeg.General documentation.
- Documentación FFMpeg.
- Documentación FFserver.
- Documentación FFplay.
- Página del Proyecto XVidCap.
- FFMpeg.Video hook documentation
- Sample ffserver configuration file.
- History Timelines
- Free templates
- Web Design Directory