• 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主进程统一管理使用的,在各个子进程间不会有冲突。
     

  • 相关阅读:
    Yolov8目标识别与实例分割——算法原理详细解析
    【C#】MQTT
    Android Studio 打包 Maker MV apk 详细步骤
    系统应用--android 10.0去掉系统USB权限弹窗
    Chrome漏洞分析与利用(十三)——issue-1182647(CVE 2021-21195)漏洞分析
    开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化
    状态压缩DP 图文详解(二)
    Spring Webflux HttpHandler源码整理
    Redis(11)Hyperloglog
    Day04 Spring和SpringBoot
  • 原文地址:https://blog.csdn.net/freeman1975/article/details/134226453