当前位置: 首页 > news >正文

mediasoup udp端口分配策略

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.lryc.cn/news/219735.html

相关文章:

  • 山西电力市场日前价格预测【2023-11-07】
  • Microsoft Dynamics 365 CE 扩展定制 - 5. 外部集成
  • 手机升级STM32单片机,pad下载程序,手机固件升级单片机,局域网程序下载,STM32单片机远程下载升级
  • 【漏洞复现】weblogic-SSRF漏洞
  • FreeSWTCH dialplan check nosdp
  • 微信小程序案例3-1 比较数字
  • 哈希表----数据结构
  • 可达矩阵-邻接矩阵-以及有向图的python绘制
  • react typescript @别名的使用
  • C++性能优化笔记-6-C++元素的效率差异-7-类型转换
  • c#中switch常用模式
  • Flink SQL 常用作业sql
  • nodejs国内镜像及切换版本工具nvm
  • 用Rust和Scraper库编写图像爬虫的建议
  • Java 语言环境搭建
  • 酷开科技 | 酷开系统里萌萌哒小维在等你!
  • Bash 4关联数组:错误“声明:-A:无效选项”
  • 干货|AI辅助完成论文的正确打开方式!
  • SpringBoot--Web开发篇:含enjoy模板引擎整合,SpringBoot整合springMVC;及上传文件至七牛云;restFul
  • 线上JAVA应用平稳运行一段时间后出现JVM崩溃问题 | 京东云技术团队
  • 进口跨境商城源码:高效、安全、可扩展的电商平台解决方案
  • GEE数据集——2019、2020、2021、2022和2023年全球固定宽带和移动(蜂窝)网络性能Shapefile 格式数据集
  • 什么是防火墙?详解三种常见的防火墙及各自的优缺点
  • 动态规划算法实现0-1背包问题Java语言实现
  • linux查看系统版本
  • pg14-sql基础(四)-多表联查
  • el-date-picker 日期时间选择器 限时时间范围 精确到时分秒
  • 轮廓线dp:GYM103446C
  • 羊驼免疫制备纳米抗体
  • 【AI好好玩02】利用Lama Cleaner本地实现AIGC试玩:擦除对象、替换对象、更换风格等等