Javascript 如何拥有多个websocket RTSP流?
在花了一些时间阅读了关于如何开发RTSP和WebSocket流的各种开源项目之后,我几乎构建了一个简单的项目,它允许我在页面上显示多个流 我有一个只使用下面代码的一个流的工作示例。数组中的一个URL通过WebSocket发送到客户端,通过JSMPeg,它可以成功地显示它 但是,我不知道如何构建这样一个系统:我有多个套接字,每个套接字中都有一个RTSP流,以及如何为每个套接字url提供自己的id。方法是加密url,当客户端请求流列表时,将其作为套接字id发回,并使用JSMPeg请求该数据 服务器:Javascript 如何拥有多个websocket RTSP流?,javascript,node.js,websocket,ffmpeg,jsmpeg,Javascript,Node.js,Websocket,Ffmpeg,Jsmpeg,在花了一些时间阅读了关于如何开发RTSP和WebSocket流的各种开源项目之后,我几乎构建了一个简单的项目,它允许我在页面上显示多个流 我有一个只使用下面代码的一个流的工作示例。数组中的一个URL通过WebSocket发送到客户端,通过JSMPeg,它可以成功地显示它 但是,我不知道如何构建这样一个系统:我有多个套接字,每个套接字中都有一个RTSP流,以及如何为每个套接字url提供自己的id。方法是加密url,当客户端请求流列表时,将其作为套接字id发回,并使用JSMPeg请求该数据 服务器:
class Stream extends EventEmitter {
constructor() {
super();
this.urls = ["rtsp://someIPAddress:554/1"];
this.urls.map((url) => {
this.start(url);
});
}
start(url) {
this.startStream(url);
}
setOptions(url) {
const options = {
"-rtsp_transport": "tcp",
"-i": url,
"-f": "mpegts",
"-codec:v": "mpeg1video",
"-codec:a": "mp2",
"-stats": "",
"-b:v": "1500k",
"-ar": "44100",
"-r": 30,
};
let params = [];
for (let key in options) {
params.push(key);
if (String(options[key]) !== "") {
params.push(String(options[key]));
}
}
params.push("-");
return params;
}
startStream(url) {
const wss = new WebSocket.Server({ port: 8080 });
this.child = child_process.spawn("ffmpeg", this.setOptions(url));
this.child.stdout.on("data", (data) => {
wss.clients.forEach((client) => {
client.send(data);
});
return this.emit("data", data);
});
}
}
const s = new Stream();
s.on("data", (data) => {
console.log(data);
});
在构造函数中,有一个URL数组,而我这里只有一个,我想添加多个。我创建了一个websocket并将其发回。我想做的是用Crypto.createHash('md5').update(URL).digest('hex')
加密该URL,给它自己的ID并基于该ID创建一个websocket,将数据发送到该websocket,并将其与其他ID列表一起发送到客户端
客户:
<canvas id="video" style="width: 100%"></canvas>
<script type="text/javascript">
var player = new JSMpeg.Player("ws://localhost:8080", {
loop: true,
autoplay: true,
canvas: document.getElementById("video"),
});
</script>
var player=new JSMpeg.player(“ws://localhost:8080”{
循环:对,
自动播放:对,
画布:document.getElementById(“视频”),
});
我想在这里做的是从/api/streams请求并返回一个streams/socket id数组,然后从该数组请求它们
但是我如何用多个URL打开多个套接字呢