当前位置: 首页 > 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主进程统一管理使用的,在各个子进程间不会有冲突。
 

相关文章:

  • [笔记] 汉字判断
  • 学电脑编程零基础,计算机编程入门先学什么
  • Android startActivity流程
  • ruby语言怎么写个通用爬虫程序?
  • gcc -static 在centos stream8 和centos stream9中运行报错的解决办法
  • Linux中的进程等待
  • Spring-Spring 之底层架构核心概念解析
  • Zabbix如何监控腾讯云NAT网关
  • 离散傅里叶变换中的能量守恒公式(帕斯瓦尔定理)及其程序举例验证
  • 根据Word模板,使用POI生成文档
  • Datawhale-AIGC实践
  • 【服务器】Java连接redis及使用Java操作redis、使用场景
  • pytorch笔记 GRUCELL
  • mediasoup-cluster横向扩容机制
  • mac flutter pb解析报错:protoc-gen-dart: program not found or is not executable
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • conda常用的命令
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • JavaScript新鲜事·第5期
  • jquery ajax学习笔记
  • Puppeteer:浏览器控制器
  • python3 使用 asyncio 代替线程
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Theano - 导数
  • Vim 折腾记
  • 官方解决所有 npm 全局安装权限问题
  • 来,膜拜下android roadmap,强大的执行力
  • 什么软件可以剪辑音乐?
  • 无服务器化是企业 IT 架构的未来吗?
  • 线上 python http server profile 实践
  • 中文输入法与React文本输入框的问题与解决方案
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • ( 10 )MySQL中的外键
  • (1)(1.13) SiK无线电高级配置(五)
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (接口自动化)Python3操作MySQL数据库
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (译) 函数式 JS #1:简介
  • (转)ORM
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • ./configure、make、make install 命令
  • .NET 8.0 发布到 IIS
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET基础篇——反射的奥妙
  • @Bean注解详解
  • @html.ActionLink的几种参数格式
  • @拔赤:Web前端开发十日谈
  • [20170728]oracle保留字.txt
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例