FFmpeg通过Nodejs将webmvideo直播到多个http客户端

我试图通过ExpressJS服务器共享我的屏幕直播。 性能原因,我无法将ffmpeg输出保存到文件或启动多个ffmpeg实例。 我目前的解决scheme是pipe道ffmpeg的标准输出和stream到每个连接的客户端。

index.js

const express = require('express'); const app = express(); const request = require('request'); const FFmpeg = require('./FFmpeg'); const APP_PORT = 3500; app.get('/stream', function (req, res) { const recorder = FFmpeg.getInstance(); res.writeHead(200, { "content-type": "video/webm", }); recorder.stdout.on('data', res.write); req.on('close', FFmpeg.killInstance); }); app.listen(APP_PORT, function () { console.log(`App is listening on port ${APP_PORT}!`) }); 

FFmpeg.js

 const spawn = require('child_process').spawn; const ffmpegPath = 'ffmpeg'; const ffmpegOptions = [ '-loglevel', 'panic', '-y', '-f', 'alsa', '-ac', '2', '-i', 'pulse', '-f', 'x11grab', '-r', '25', '-i', ':0.0+0,0', '-acodec', 'libvorbis', '-preset', 'ultrafast', '-vf', 'scale=320:-1', "-vcodec", "libvpx-vp9", '-f', 'webm', 'pipe:1', ]; module.exports = { start, getInstance, killInstance, }; let instance = null; let connections = 0; function killInstance() { connections -= 1; if (connections < 1) { instance.kill(); instance = null; } }; function getInstance() { connections += 1; if (!instance) instance = start(); return instance; }; function start() { return spawn(ffmpegPath, ffmpegOptions); }; 

它对于一个客户来说工作得很好,但是我不能同时stream向几个客户(可能与丢失关键帧有关)。