Solución:
Aquí hay una entrada de blog, o un tutorial si se quiere, que logra algo muy similar.
Su configuración es ligeramente diferente, pero este es el resumen:
usar ffmpeg
para convertir su entrada en mpeg1video:
ffmpeg -i rtsp://whatever -f mpeg1video -b 800k -r 30 http://localhost:8082/yourpassword/640/480/
Instalar en pc node.js
con stream-server.js
script de jsmpeg y ws
ws paquete WebSocket.
Para ver la transmisión, use el stream-example.html
y jsmpg.js
desde el jsmpeg. Cambie la URL de WebSocket en stream-example.html
para localhost
y ábralo en su navegador favorito.
Actualizar un tema SO sugiere otras dos soluciones de trabajo, con
Si desea transmitir eso solo a unos pocos clientes, entonces puede usar un cgi (o en nodejs, un child_process) que ejecute directamente ffmpeg:
Ejemplo de NodeJS:
app.getExpressApp().get("https://foroayuda.es/camera/feed", (req, res) => {
// Thanks to https://stackoverflow.com/q/28946904/1954789
const child_process = require('child_process');
res.header('content-type', 'video/webm');
const cmd = `ffmpeg -i rtsp://user:[email protected]/videoSub -c:v copy -c:a copy -bsf:v h264_mp4toannexb -maxrate 500k -f matroska -`.split(' ');
var child = child_process.spawn(cmd[0], cmd.splice(1), {
stdio: ['ignore', 'pipe', process.stderr]
});
child.stdio[1].pipe(res);
res.on('close', () => {
// Kill ffmpeg if the flow is stopped by the browser
child.kill();
});
CGI debería ser aún más fácil.
En el navegador, puedes
<video autoplay=1 poster="camera.png" ><source src="https://foroayuda.es/camera/feed"></video>
(Utilice un póster porque el video puede tardar algunos segundos en aparecer).
Advertencia: esto lanzará un ffmpeg para cada conexión a su configuración, por lo que no se escala en absoluto. Esto debe usarse solo para un sitio web muy personal, donde las conexiones son limitadas (por ejemplo, solo para usted).
PD: el comando ffmpeg puede necesitar algunos ajustes.