FFmpeg: Solución para convertir, grabar y stream A/V (II)

Continuando con la serie sobre FFmpeg, que hace mucho deje en pendiente (realmente olvidada, suele pasar ya saben por cosas del día a día). Para que recuerden el primer capitulo FFmpeg: Solución para convertir, grabar y stream A/V (I).

ffplay, es un simple reproductor multimedia que usa las librerías FFmpeg además de las SDL (es una librería multiplataforma de desarrollo diseñada para proporcionar acceso a bajo nivel a hardware mediante OpenGL y Direct3D), ffplay, es generalmente usado como banco de pruebas para las distintas API’s FFmpeg.

Existe un tutorial completo sobre ffmpeg y SDL, revísenlo si requieren mucho más información http://dranger.com/ffmpeg/tutorial01.html.

ffplay [opciones] archivo

ffprobe, recopila información de flujos multimedia, mostrándolos de forma que sea legible para la maquina o “humano”.

ffprobe [opciones] archivo

La salida mostrada será definida por editores, default, compact o csv, flat, ini, json y xml.

info extra

ffserver, es un servidor de streaming de audio y video, se puede usar para transmisiones en directo, streaming de archivos continuado, etcétera, claro siempre y cuando se tenga la suficiente cantidad de archivos para transmitir. Entiendo que hasta una radio por ejemplo, transmitiendo tantas horas, programas x,y o z, durante el día.

ffserver [opciones]

Se configura a través de un archivo de configuración ubicado de manera default en /etc/ffserver.conf, para que reciba archivos pregrabados o flujo FFM desde una instancia ffmpeg como entrada y luego ser transmitido por los protocolos RTP/RTSP/HTTP. Los flujos de entrada se llaman feeds y cada uno se especifica por una sección <Feed> en el archivo de configuración, y ya que los feeds pueden tener diferentes flujos de salida en varios formatos cada uno se especifica  en la sección <Stream> dentro del archivo de configuración.

http://dirección-IP-ffserver:http-port/nombre-feed

Donde:

  • dirección-IP-ffserver, es la dirección IP de la maquina donde ffserver ha sido instalado.
  • http-port, es el puerto del servidor http.
  • nombre-feed, nombre del correspondiente feed asignado en el archivo de configuración.

FFM y FFM2 son formatos utilizadas por ffserver. Permiten almacenar una amplia variedad de flujos de vídeo/audio y opciones de codificación, y pueden almacenar un segmento de tiempo en movimiento de una película.

Green_screen_live_streaming_production_at_Mediehuset_København

By Rehak (Own work) CC BY 3.0 vía Wikimedia Commons

FFM es la versión específica, y no hay compatibilidad limitada de archivos FFM generados por una versión de ffmpeg / ffserver y otra versión de ffmpeg / ffserver.

FFM 2 es extensible mientras mantiene la compatibilidad y debe trabajar entre diferentes versiones de herramientas. FFM2 es el predeterminado.

El archivo de configuración /etc/ffserver.conf suele tener la siguiente configuración, las secciones de <Feed> como de <Stream>, perfectamente claras para realizar nuestras propias configuraciones y claro un mejor control de la herramienta.

Port 8090                      # Port to bind the server to
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 10000             # Maximum bandwidth per client
# set this high enough to exceed stream bitrate
CustomLog -
NoDaemon                       # Remove this if you want FFserver to   daemonize after start

<Feed feed1.ffm>               # This is the input feed where FFmpeg will send
File ./feed1.ffm            # video stream.
FileMaxSize 1G              # Maximum file size for buffering video
ACL allow 127.0.0.1         # Allowed IPs
</Feed>

<Stream test.webm>           # Output stream URL definition
Feed feed1.ffm              # Feed from which to receive video
Format webm

# Audio settings
AudioCodec vorbis
AudioBitRate 64

# Video settings
VideoCodec libvpx
VideoSize 720x576
VideoFrameRate 25
AVOptionVideo flags +global_header  # Parameters passed to encoder
# (same as ffmpeg command-line parameters)
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42
AVOptionVideo quality good
AVOptionAudio flags +global_header
PreRoll 15
StartSendOnKey
VideoBitRate 400
</Stream>

<Stream status.html>             # Server status URL
Format status
# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>

<Redirect index.html>

URL http://www.ffmpeg.org/
</Redirect>

 

Para verificar el estado de la configuración del server, bastaría abrir en tu navegador preferido la siguiente URL

http://localhost:8090/status.html

 

Ya que comprobamos que el servidor esta en correcto funcionamiento, y satisfechos con el archivo de configuración, arrancamos el ffserver ya sea como un demonio en el arranque del sistema o vía el comando

ffserver -f /etc/ffserver.conf

Ahora FFserver se quedará escuchando. Lo que aparezca en pantalla es el log del servicio.

Ejecutamos el comando de FFmpeg. Similar a:
ffmpeg -r 25 -s 640x480 -f video4linux2 -i /dev/video0 -f alsa -i plughw:0,0 http://localhost:8090/feed1.ffm
Con esto empezará a recoger la imagen de la webcam USB, que en el sistema está en /dev/video0, y el sonido del micrófono. Podemos reproducir el vídeo con un reproductor que pueda reproducir streaming, por ejemplo VLC, que puede leer multitud de codecs.
Si usamos VLC para reproducir el ejemplo anterior, tenemos que ir a “Medio > Abrir volcado de red” y añadimos la siguiente URL:
http://localhost:8090/test1.mpg
Pulsamos en “Reproducir” y veremos como se carga el buffer de VLC y aparece la imagen de la webcam y el sonido del micrófono.
Hasta otro post y buenas vibras lectores.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s