78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
#!/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();
|