Files
taoyao/taoyao-client-media/src/Server.js
2023-03-04 23:33:40 +08:00

78 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
const config = require("./Config");
const mediasoup = require("mediasoup");
const { Taoyao, signalChannel } = require("./Taoyao");
// 线程名称
process.title = config.name;
// 禁止校验无效证书
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
// Mediasoup Worker列表
const mediasoupWorkers = [];
// 桃夭
const taoyao = new Taoyao(mediasoupWorkers);
/**
* 创建Mediasoup Worker列表
*/
async function buildMediasoupWorkers() {
// 监听事件
// mediasoup.observer.on("newworker", fn(worker));
const { workerSize } = config.mediasoup;
console.info("创建Mediasoup Worker数量", workerSize);
for (let index = 0; index < workerSize; index++) {
const worker = await mediasoup.createWorker({
logTags: config.mediasoup.workerSettings.logTags,
logLevel: config.mediasoup.workerSettings.logLevel,
rtcMinPort: Number(config.mediasoup.workerSettings.rtcMinPort),
rtcMaxPort: Number(config.mediasoup.workerSettings.rtcMaxPort),
});
// 配置WebRTC服务
const webRtcServerOptions = JSON.parse(
JSON.stringify(config.mediasoup.webRtcServerOptions)
);
for (const listenInfo of webRtcServerOptions.listenInfos) {
listenInfo.port = listenInfo.port + mediasoupWorkers.length;
}
const webRtcServer = await worker.createWebRtcServer(webRtcServerOptions);
worker.appData.webRtcServer = webRtcServer;
mediasoupWorkers.push(worker);
// 监听事件
worker.on("died", (error) => {
console.warn("Mediasoup Worker停止服务", worker.pid, error);
setTimeout(() => process.exit(1), 2000);
});
worker.observer.on("close", () => {
console.warn("Mediasoup Worker关闭服务", worker.pid);
});
// worker.observer.on("newrouter", fn(router));
// worker.observer.on("newwebrtcserver", fn(router));
}
}
/**
* 连接信令服务
*/
async function connectSignalServer() {
signalChannel.taoyao = taoyao;
await signalChannel.connect(`wss://${config.signal.host}:${config.signal.port}/websocket.signal`);
}
/**
* 启动方法
*/
async function main() {
console.log(`
桃之夭夭,灼灼其华。
之子于归,宜其室家。
`);
console.info("开始启动:", config.name);
await buildMediasoupWorkers();
await connectSignalServer();
console.info("启动完成:", config.name);
}
main();