问题描述
我正在使用ffmpeg和child_process启动多个RTSP流。这些RTSP流中的某些流在第一次连接期间不会连接并失败,并且需要不断地重试重新连接才能启动流。
以下是ffmpeg选项:
setoptions() {
const options = {
"-rtsp_transport": "tcp","-i": this.url,"-f": "mpegts","-s": "1280x720","-speed": "6","-codec:v": "mpeg1video","-codec:a": "mp2","-stats": "","-b:v": "1000k","-ar": "44100","-r": 30,"-bf": 0,"-ac": "1","-b:a": "128k","-muxdelay": "0.001",};
let params = [];
for (let key in options) {
params.push(key);
if (String(options[key]) !== "") {
params.push(String(options[key]));
}
}
params.push("-");
return params;
}
这是我用来启动进程的方法,如果连接失败,则使用“尝试”方法重新启动它:
startStream() {
const self = this;
const wss = new WebSocket.Server({ port: this.port });
const childSpawn = child_process.spawn(
"ffmpeg",this.setoptions(this.url),{
detached: true,}
);
childSpawn.stdout.on("data",(data) => {
wss.clients.forEach((client) => {
client.send(data);
/// console.log(data);
if (self.retries > 0) {
console.log("-- STREAM HAS CONNECTED");
}
});
self.child = childSpawn;
});
childSpawn.on("close",(code,signal) => {
console.log("process closed");
if (code === 1) {
setTimeout(() => {
console.log("retrying stream",self.url);
self.startStream();
},50000);
}
});
}
想法是等待X秒钟,然后尝试重新启动。
正确的最佳方法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)