diff --git a/taoyao-client-media/.env b/taoyao-client-media/.env new file mode 100644 index 0000000..8db2994 --- /dev/null +++ b/taoyao-client-media/.env @@ -0,0 +1,28 @@ +# 服务名称 +NAME=taoyao-client-media +# 终端ID +CLIENT_ID=taoyao-client-media +# 终端名称 +CLIENT_NAME=桃夭媒体服务 +# 信令版本 +SIGNAL_VERSION=1.0.0 +# 信令地址 +SIGNAL_HOST=127.0.0.1 +# 信令端口 +SIGNAL_PORT=8888 +# 信令帐号 +SIGNAL_USERNAME=taoyao +# 信令密码 +SIGNAL_PASSWORD=taoyao +# 工作线程数量(生产环境不要配置) +MEDIASOUP_WORKER_SIZE=2 +# Mediasoup最小端口 +MEDIASOUP_MIN_PORT=40000 +# Mediasoup最大端口 +MEDIASOUP_MAX_PORT=49999 +# Mediasoup监听地址 +MEDIASOUP_LISTEN_IP=0.0.0.0 +# Mediasoup监听端口(起始端口) +MEDIASOUP_LISTEN_PORT=44444 +# Mediasoup声明地址(不能配置环回地址) +MEDIASOUP_ANNOUNCED_IP=192.168.1.110 \ No newline at end of file diff --git a/taoyao-client-media/.env.node-a b/taoyao-client-media/.env.node-a new file mode 100644 index 0000000..6ac4ccc --- /dev/null +++ b/taoyao-client-media/.env.node-a @@ -0,0 +1,14 @@ +NAME=taoyao-client-media-a +CLIENT_ID=taoyao-client-media-a +CLIENT_NAME=桃夭媒体服务A +SIGNAL_VERSION=1.0.0 +SIGNAL_HOST=127.0.0.1 +SIGNAL_PORT=8888 +SIGNAL_USERNAME=taoyao +SIGNAL_PASSWORD=taoyao +MEDIASOUP_WORKER_SIZE=2 +MEDIASOUP_MIN_PORT=40000 +MEDIASOUP_MAX_PORT=49999 +MEDIASOUP_LISTEN_IP=0.0.0.0 +MEDIASOUP_LISTEN_PORT=41111 +MEDIASOUP_ANNOUNCED_IP=192.168.1.110 \ No newline at end of file diff --git a/taoyao-client-media/.env.node-b b/taoyao-client-media/.env.node-b new file mode 100644 index 0000000..7a54600 --- /dev/null +++ b/taoyao-client-media/.env.node-b @@ -0,0 +1,14 @@ +NAME=taoyao-client-media-b +CLIENT_ID=taoyao-client-media-b +CLIENT_NAME=桃夭媒体服务B +SIGNAL_VERSION=1.0.0 +SIGNAL_HOST=127.0.0.1 +SIGNAL_PORT=8888 +SIGNAL_USERNAME=taoyao +SIGNAL_PASSWORD=taoyao +MEDIASOUP_WORKER_SIZE=2 +MEDIASOUP_MIN_PORT=40000 +MEDIASOUP_MAX_PORT=49999 +MEDIASOUP_LISTEN_IP=0.0.0.0 +MEDIASOUP_LISTEN_PORT=42222 +MEDIASOUP_ANNOUNCED_IP=192.168.1.110 \ No newline at end of file diff --git a/taoyao-client-media/.env.prd b/taoyao-client-media/.env.prd new file mode 100644 index 0000000..132286a --- /dev/null +++ b/taoyao-client-media/.env.prd @@ -0,0 +1,13 @@ +NAME=taoyao-client-media +CLIENT_ID=taoyao-client-media +CLIENT_NAME=桃夭媒体服务 +SIGNAL_VERSION=1.0.0 +SIGNAL_HOST=127.0.0.1 +SIGNAL_PORT=8888 +SIGNAL_USERNAME=taoyao +SIGNAL_PASSWORD=taoyao +MEDIASOUP_MIN_PORT=40000 +MEDIASOUP_MAX_PORT=49999 +MEDIASOUP_LISTEN_IP=0.0.0.0 +MEDIASOUP_LISTEN_PORT=44444 +MEDIASOUP_ANNOUNCED_IP=192.168.1.110 \ No newline at end of file diff --git a/taoyao-client-media/package.json b/taoyao-client-media/package.json index b6d5ab0..6c37751 100644 --- a/taoyao-client-media/package.json +++ b/taoyao-client-media/package.json @@ -7,11 +7,15 @@ "homepage" : "https://gitee.com/acgist/taoyao", "description": "taoyao client media", "scripts": { - "dev": "node src/Server.js", - "prd": "node src/Server.js" + "dev" : "node src/Server.js", + "prd" : "cross-env NODE_ENV=prd node src/Server.js", + "node-a": "cross-env NODE_ENV=node-a node src/Server.js", + "node-b": "cross-env NODE_ENV=node-b node src/Server.js" }, "dependencies": { "ws" : "^8.12.0", + "dotenv" : "^16.3.1", + "cross-env": "^7.0.3", "mediasoup": "^3.11.10" } } \ No newline at end of file diff --git a/taoyao-client-media/src/Config.js b/taoyao-client-media/src/Config.js index ac645c8..e8c9389 100644 --- a/taoyao-client-media/src/Config.js +++ b/taoyao-client-media/src/Config.js @@ -1,38 +1,38 @@ const os = require("os"); +const dotenv = require("dotenv"); -/** - * 桃夭媒体服务地址 - * 注意:这里即使是本机也不能配置127.0.0.1 - */ -const defaultTaoyaoHost = "192.168.1.110"; +if(process.env.NODE_ENV) { + dotenv.config({ path: `.env.${process.env.NODE_ENV}` }); +} else { + dotenv.config({ path: `.env` }); +} /** * 配置 */ module.exports = { // 服务名称 - name: "taoyao-client-media", + name: process.env.NAME || "taoyao-client-media", // 信令配置 signal: { // 信令版本 - version : "1.0.0", - // 终端标识 - clientId : "taoyao-client-media", + version : process.env.SIGNAL_VERSION || "1.0.0", + // 终端ID + clientId : process.env.CLIENT_ID || "taoyao-client-media", // 终端类型 clientType: "MEDIA", // 终端名称 - name : "桃夭媒体服务", + name : process.env.CLIENT_NAME || "桃夭媒体服务", // 信令地址 - host : "127.0.0.1", - // host : "192.168.1.100", + host : process.env.SIGNAL_HOST || "127.0.0.1", // 信令端口 - port : 8888, + port : process.env.SIGNAL_PORT || 8888, // 信令协议 scheme : "wss", // 信令帐号 - username : "taoyao", + username : process.env.SIGNAL_USERNAME || "taoyao", // 信令密码 - password : "taoyao", + password : process.env.SIGNAL_PASSWORD || "taoyao", }, // 录像配置 record: { @@ -44,7 +44,7 @@ module.exports = { // Mediasoup mediasoup: { // Worker数量 - workerSize: Object.keys(os.cpus()).length, + workerSize: process.env.MEDIASOUP_WORKER_SIZE || Object.keys(os.cpus()).length, // Worker配置:https://mediasoup.org/documentation/v3/mediasoup/api/#WorkerSettings workerSettings: { // 日志标记 @@ -64,7 +64,7 @@ module.exports = { "simulcast", ], // 日志级别:debug | warn | error | none - logLevel: "warn", + logLevel : "warn", // RTP端口范围 rtcMinPort: process.env.MEDIASOUP_MIN_PORT || 40000, rtcMaxPort: process.env.MEDIASOUP_MAX_PORT || 49999, @@ -133,15 +133,15 @@ module.exports = { listenInfos: [ { protocol : "udp", - ip : process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - port : 44444, - announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || defaultTaoyaoHost || "127.0.0.1", + ip : process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", + port : process.env.MEDIASOUP_LISTEN_PORT || 44444, + announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "127.0.0.1", }, { protocol : "tcp", - ip : process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - port : 44444, - announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || defaultTaoyaoHost || "127.0.0.1", + ip : process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", + port : process.env.MEDIASOUP_LISTEN_PORT || 44444, + announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "127.0.0.1", }, ], }, @@ -150,7 +150,7 @@ module.exports = { listenIps: [ { ip : process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || defaultTaoyaoHost || "127.0.0.1", + announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "127.0.0.1", }, ], initialAvailableOutgoingBitrate: 1000000, @@ -162,16 +162,9 @@ module.exports = { plainTransportOptions: { listenIp: { ip : process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || defaultTaoyaoHost || "127.0.0.1", + announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP || "127.0.0.1", }, maxSctpMessageSize: 262144, }, }, }; - -/** - * PipeTransport : RTP(router) - * PlainTransport : RTP - * DirectTransport: NodeJS - * WebRtcTransport: WebRTC - */ diff --git a/taoyao-client-media/src/Server.js b/taoyao-client-media/src/Server.js index e263e0b..e4fe535 100644 --- a/taoyao-client-media/src/Server.js +++ b/taoyao-client-media/src/Server.js @@ -17,7 +17,7 @@ const taoyao = new Taoyao(mediasoupWorkers); */ async function buildMediasoupWorkers() { mediasoup.observer.on("newworker", (worker) => { - console.info("mediasoup newworker", worker); + console.info("mediasoup newworker", worker.pid); }); const { workerSize } = config.mediasoup; console.info("工作线程数量", workerSize); @@ -46,7 +46,7 @@ async function buildMediasoupWorkers() { // 创建WebRTC服务 const webRtcServerOptions = JSON.parse(JSON.stringify(config.mediasoup.webRtcServerOptions)); for (const listenInfos of webRtcServerOptions.listenInfos) { - listenInfos.port = listenInfos.port + mediasoupWorkers.length; + listenInfos.port = Number(listenInfos.port) + mediasoupWorkers.length; } const webRtcServer = await worker.createWebRtcServer(webRtcServerOptions); // 监听事件