Actualmente desarrollo transmisión en línea a partir de 3 cámaras miniDV conectadas a través de FireWire, que es bastante similar a sus necesidades.
Sugerencia rápida: vlc + flowplayer / jw player
En primer lugar, hay dos formatos de video que puede usar en la transmisión en línea: FLV y h264. FLV es más fácil de transcodificar, h264 tiene una mejor relación tamaño / calidad, pero la transcodificación consume mucho más CPU. Ambos pueden ser mostrados por reproductores flash en la página web.
En segundo lugar, la infraestructura de transmisión. Dado que su ancho de banda desde la computadora portátil es limitado (un par de Mbps como máximo), necesita transmitir a su servidor y transmitirlo a los clientes. Entonces la secuencia fluirá 1 vez al servidor y luego N veces a los clientes desde allí. No ha descrito su conexión a Internet para su computadora portátil, por lo que el escenario se divide en dos secciones:
La computadora portátil está conectada con una dirección IP pública O puede conectar el puerto NAT a la computadora portátil . Este escenario es mucho más fácil, ya que puede conectarse de un servidor a una computadora portátil de manera agradable y fácil. La gran desventaja es que está vinculado a una ubicación (una dirección IP).
La computadora portátil no está conectada con la dirección pública . Esto es un poco complicado, pero funcionará desde cualquier red que le permita SSH a su servidor y tenga una carga suficiente (1 Mbps debería hacerlo).
Independientemente del escenario utilizado, el infractor se verá así
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
Streaming desde laptop
Capture video de la cámara web . Nunca he capturado transmisiones de cámaras web conectadas localmente, pero hay muchos ejemplos de cómo hacerlo a través de V4L, por ejemplo:
Configuración de cámara web . La única parte que debería interesarte es:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
Cuál es la primera parte del comando VLC para conectarse a la cámara web. Para más detalles, siga el CÓMO mencionado. Mire especialmente la parte del "grupo de video" y la ruta correcta del dispositivo a / dev / video y / dev / audio. Esos pueden ser diferentes en su computadora portátil.
Transcodificar video a FLV . Yo personalmente uso FLV, ya que requiere menos CPU. La cadena de transcodificación que uso es esta:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
Que transcodificará la transmisión de video a formato FLV con audio MPGA (MP3 no está disponible en mi Ubuntu). La frecuencia de muestreo es obligatoria de alguna manera, no funcionará sin ella. Pero puede elegir más pequeño, como 22050. Esto transcodificará la transmisión de video 'tal cual', por lo que la escala es 1: 1. Puede agregar parámetros de ancho y alto, o incluso parámetros de escala. Mira en la documentación de VLC.
Transmítelo desde la computadora portátil . Ahora tiene que hacer una transmisión local, en la que se conectará el servidor:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Esto vinculará la transmisión VLC a 0.0.0.0:8081/stream.flv. Todo el comando se verá así:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2" --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}'
Restreaming en el servidor
Captura de la corriente en el servidor y que ReStream . Nuevamente, usamos VLC para capturar y transmitir. El uso se basa en el escenario de infraestructura desde principios de esta publicación. Como mostré, VLC en la computadora portátil transmite video en algún puerto. Este puerto debe ser accesible desde el servidor. Si tiene una dirección IP pública de una computadora portátil o un puerto NAT, puede probarla con telnet:
server$ telnet public_ip_address 8081
Todo lo que no sea "tiempo de espera de conexión" revelará que puede conectarse a la transmisión de su computadora portátil. Si no tiene una dirección IP pública o no puede utilizar el puerto NAT, debe hacerlo al revés. Puede SSH desde la computadora portátil al servidor y reenviar remotamente el puerto de su computadora portátil al servidor. El comando SSH correcto sería:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
Este comando mágico 'vinculará' el puerto 8081 de su computadora portátil al puerto 8081 del servidor. Eso significa que cuando se conecta al servidor a 8081, se conectará en silencio al puerto 8081 de su computadora portátil a través del túnel SSH. Genial, ¿eh? :) Entonces, todo lo que tenemos que hacer es conectar y transmitir VLC:
server$ vlc http://localhost:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
O en caso de dirección IP pública o puerto NAT:
server$ vlc http://public_ip_address:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
Al igual que en la parte de la computadora portátil, su VLC en el servidor está vinculado al puerto 8082. ¿Por qué 8082 y no 8081? El control remoto SSH ya ha tomado 8081. ¿Por qué no usamos la parte de transcodificación como en el primer ejemplo? El video ya está en el formato correcto, por lo que todo lo que tenemos que hacer es transmitirlo tal cual.
Las pruebas . En ambos ejemplos, puede probar la funcionalidad al ver transmisiones a través de VLC. Puedes probar tu transmisión local:
laptop$ vlc http://localhost:8081/stream.flv
Y puede probar la transmisión de su servidor:
laptop$ vlc http://server_ip_address:8082/stream.flv
En ambos casos, debería ver la entrada de su cámara web.
Mostrar secuencia en la web
La visualización de la transmisión en la web, que funcionará en la mayoría de los casos, se realiza a través de Flash Player. Probé dos productos, que son gratuitos para uso no comercial: JW Player y Flowplayer . Me quedé con Flowplayer, pero no recuerdo la razón, tal vez por los complementos (que no uso :)) o por una mejor documentación.
Aquí se cubre cómo mostrar la transmisión FLV desde VLC en la página web: Transmita VLC al sitio web con asf y Flash
Solución de problemas
Tenga en cuenta muchos problemas que surgirán. Lo primero, como en todo, leer . VLC es un programa muy hablador, por lo que le dirá dónde está el problema. Podría haber un problema con los permisos para acceder al dispositivo de video / audio, los códecs faltantes, los parámetros mal escritos --out, ... Aprenda a usar iftop
para ver si los datos realmente fluyen a través de la red, etc.