mediasoup udp端口分配策略

news/2025/2/12 23:41:54/

mediasoup-worker多进程启动时,rtcMinPort/rtcMaxPort可以使用相同的配置。
  for (let i = 0; i < numWorkers; i++) {
    let worker = await mediasoup.createWorker({
      logLevel: config.mediasoup.worker.logLevel,
      logTags: config.mediasoup.worker.logTags,
      rtcMinPort: minPort,
      rtcMaxPort: maxPort
    })
  }
如何避免port冲突呢?答案是mediasoup的node主进程来处理的。
async function createWorker({ logLevel = 'error', logTags, rtcMinPort = 10000, rtcMaxPort = 59999, dtlsCertificateFile, dtlsPrivateKeyFile, libwebrtcFieldTrials, appData } = {}) {
    const worker = new Worker_1.Worker({
        logLevel,
        logTags,
        rtcMinPort,
        rtcMaxPort,
        dtlsCertificateFile,
        dtlsPrivateKeyFile,
        libwebrtcFieldTrials,
        appData
    });
    return new Promise((resolve, reject) => {
        worker.on('@success', () => {
            observer.safeEmit('newworker', worker);
            resolve(worker);
        });
        worker.on('@failure', reject);
    });
}

class Worker extends EnhancedEventEmitter_1.EnhancedEventEmitter {
    // mediasoup-worker child process. mediasoup-worker是node.js的子进程。
    // const child_process_1 = require("child_process"); //

    #child;
    let spawnBin = workerBin;
    let spawnArgs = [];
    if (typeof rtcMinPort === 'number' && !Number.isNaN(rtcMinPort)) {
        spawnArgs.push(`--rtcMinPort=${rtcMinPort}`);
    }
    if (typeof rtcMaxPort === 'number' && !Number.isNaN(rtcMaxPort)) {
        spawnArgs.push(`--rtcMaxPort=${rtcMaxPort}`);
    }
    spawnArgs.join(' '));
    this.#child = (0, child_process_1.spawn)(
        spawnBin, 
        spawnArgs, 
    }

    //这个webrtcServer是属于node.js的。
    async createWebRtcServer({ listenInfos, appData }) {
        const webRtcServer = new WebRtcServer_1.WebRtcServer({
            internal: { webRtcServerId: reqData.webRtcServerId },
            channel: this.#channel,
            appData
        });
        this.#webRtcServers.add(webRtcServer);
        return webRtcServer;
    }

}
node.js的webRtcServer是c++ mediasoup-worker的封装。
关于RTP port,包括组成medsoup-cluster的pipeToRemoteRouter的RTP转发port,
是由node.js主进程统一管理使用的,在各个子进程间不会有冲突。
 


http://www.ppmy.cn/news/1200770.html

相关文章

Vite 的基本原理,和 webpack 在开发阶段的比较

目录 1&#xff0c;webpack 的流程2&#xff0c;Vite 的流程简单编译 3&#xff0c;总结 主要对比开发阶段。 1&#xff0c;webpack 的流程 开发阶段大致流程&#xff1a;指定一个入口文件&#xff0c;对相关的模块&#xff08;js css img 等&#xff09;先进行打包&#xff0…

Python某建筑平台数据, 实现网站JS逆向解密

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: 首先我们先来安装一下写代码的软件&#xff08;对没安装的小白说&#xff09; Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 专业版是付费的 <文章下方名片可获取魔法永久用~> 社区版是免费的 模块…

代码随想录算法训练营第四十五天 | LeetCode 518. 70. 爬楼梯、322. 零钱兑换、279. 完全平方数

代码随想录算法训练营第四十五天 | LeetCode 518. 70. 爬楼梯、322. 零钱兑换、279. 完全平方数 文章链接&#xff1a;爬楼梯 零钱兑换 完全平方数 视频链接&#xff1a;零钱兑换 完全平方数 1. LeetCode 70. 爬楼梯 1.1 思路 我们做动态规划基础时做过这题&#xff0c;现在可…

反序列化 [网鼎杯 2020 青龙组]AreUSerialz 1

打开题目 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {protected $op;protected $filename;protected $content;function __construct() {$op "1";$filename "/tmp/tmpfile";$content "Hello World!&qu…

yolov5 obb旋转框 tensorrt部署

文章目录 1.生成engine文件2.检测图像3.代码yolov5-obb tensorRT部署代码结合王新宇和fish-kong两者的代码,可以多batch批量检测旋转框 yolov5旋转框检测: https://blog.csdn.net/qq_42754919/article/details/134145174 1.生成engine文件 首先需要将pt文件转换成wts文件,…

遇到python程序是通过sh文件启动的,如何调试

说明 下载的源码总会遇到这样启动的&#xff1a; 并且发现shell文件内容很多&#xff0c;比较复杂&#xff0c;比如&#xff1a; 解决方案 这时候想要调试&#xff0c;可以通过端口连接的方式调试&#xff0c;具体方法如下&#xff1a; 在vscode调试按钮中添加远程附加调试…

Linux内核学习

文章目录 前言在这里插入图片描述 前言 非常好的Linux内核视频 - Linux内核精讲 Linux源码下载 Linux源码下载 LInux源码下载

数组的存储结构、特殊矩阵和稀疏矩阵的压缩存储

数组的存储结构、特殊矩阵和稀疏矩阵的压缩存储 1.数组的存储结构、特殊矩阵、稀疏矩阵的压缩存储1.1 数组的存储结构1.1.1 一维数组的存储结构关系式1.1.2 多维数组的存储结构关系式 1.2 特殊矩阵的压缩存储1.2.1 对称矩阵1.2.2 下三角矩阵1.2.3 上三角矩阵1.2.4 三对角矩阵 1…