mediasoup源码分析--worker启动

官网提供的demo启动方式

官方提供的mediasoup-demo是由js(信令)+c++(流媒体服务)两部分服务,mediasoup的worker进程是nodejs通过child_process 的spawn()接口启动的

async function runMediasoupWorkers()
{const { numWorkers } = config.mediasoup;logger.info('running %d mediasoup Workers...', numWorkers);for (let i = 0; i < numWorkers; ++i){const worker = await mediasoup.createWorker({dtlsCertificateFile : config.mediasoup.workerSettings.dtlsCertificateFile,dtlsPrivateKeyFile  : config.mediasoup.workerSettings.dtlsPrivateKeyFile,logLevel            : config.mediasoup.workerSettings.logLevel,logTags             : config.mediasoup.workerSettings.logTags,rtcMinPort          : Number(config.mediasoup.workerSettings.rtcMinPort),rtcMaxPort          : Number(config.mediasoup.workerSettings.rtcMaxPort)});......}}

根据当前机器cpu核数,选择创建几个worker进程
跳转到mediasoup-demo/server/node_modules/mediasoup/src/index.ts
在这里插入图片描述
在跳转到mediasoup-demo/server/node_modules/mediasoup/src/Worker.ts
在这里插入图片描述

自行启动mediasoup

如果读者仅仅是需要学习mediasoup c++部分,则可以编辑脚本启动mediasoup服务
参考:
vim config.ini

[General]
servercount = 2[Server0]
id = 1
udpport = 52000
ip = 127.0.0.1
vrvmeetingport = 8108[Server1]
id = 2
udpport = 53000
ip = 127.0.0.1
vrvmeetingport = 8108

vim start.sh

 #!/bin/bash
ulimit -c unlimited
configFile="./config.ini"
function ReadINIfile()
{Key=$1Section=$2Configfile=$3ReadINI=`awk -F '=' '/\['$Section'\]/{a=1}a==1&&$1~/'$Key'/{print $2;exit}' $Configfile`echo "$ReadINI"
}serverCount=`ReadINIfile "servercount" "General" "$configFile"`
for((i=0; i<serverCount; i++))
doSection="Server""$i"id=`ReadINIfile "id" "$Section" "$configFile"  | sed -e 's/^[ \t]*//g'`udpPort=`ReadINIfile "udpport" "$Section" "$configFile"  | sed -e 's/^[ \t]*//g'`Ip=`ReadINIfile "ip" "$Section" "$configFile" | sed -e 's/^[ \t]*//g'`Port=`ReadINIfile "port" "$Section" "$configFile"  | sed -e 's/^[ \t]*//g'`nohup ./rtcMediaServer $id $vrvmeetingIp $vrvmeetingPort --logLevel=warn --logTag=info --logTag=ice --logTag=dtls --logTag=rtp --logTag=srtp --logTag=rtcp --logTag=rbe --logTag=rtx --rtcIPv4=true --rtcIPv6=false --singlePort=true --getkeyframe=5000 --rtcMinPort=$udpPort --rtcMaxPort=65535 & echo $! >> pid
done

执行sh start.sh

总结

mediasoup启动后会连接信令服务,也就是上述配置的"IP"和"port",因此读者可以单独启动mediasoup,而不是依赖于mediasoup的官网demo,通过nodejs的spawn接口启动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696978.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 发布到 Win7+

.Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 实测可以完整运行在 win7sp1/win10/win11. 如果用其他工具打包,还可以运行在mac/linux下, 传送门BlazorHybrid 发布为无依赖包方式 安装 WebView2Runtime 1.57 MB或136 MB 测试DEMO 发布为依赖包方式 安装 WebView2Runtime 1.…

ONVIF系列三:ONVIF客户端实现

ONVIF系列&#xff1a; ONVIF系列一&#xff1a;ONVIF介绍 ONVIF系列二&#xff1a;Ubuntu安装gSOAP、生成ONVIF代码框架 ONVIF系列三&#xff1a;ONVIF客户端实现 在系列二中完成了在Ubuntu上安装gSOAP并生成ONVIF代码框架&#xff0c;接下来我们利用生成的框架实现ONVIF客户端…

基于STM32H750的DCMI接口OV5640摄像头条码识别

好久没写文章了&#xff0c;闭上眼睛&#xff0c;算了一下&#xff0c;大概有十年了&#xff0c;近来接到一个项目&#xff0c;需要做条码识别&#xff0c;客户要求用MCU做&#xff0c;理由成本低、价格可控。 于是乎&#xff0c;打开某宝软件&#xff0c;搜索后发现STM32H7/ST…

线性表(2)

第二章、线性表&#xff08;linear list&#xff09; 线性表是第一个数据结构&#xff0c;再提一遍&#xff0c;学习一个具体的数据结构需要关注它的逻辑结构&#xff0c;物理结构和数据的运算&#xff0c;即三要素。 2.1、线性表的定义和基本操作 线性表的定义 需要注意的是…

Windows2016系统禁止关闭系统自动更新教程

目录 1.输入cmd--适合系统2016版本2.输入sconfig&#xff0c;然后按回车键3.输入5&#xff0c;然后按回车键4.示例需要设置为手动更新&#xff0c;即输入M&#xff0c;然后按回车键 1.输入cmd–适合系统2016版本 2.输入sconfig&#xff0c;然后按回车键 3.输入5&#xff0c;然后…

基于SpringBoot + Vue的扶贫助农管理系统设计与实现+毕业论文

系统介绍 系统分为用户和管理员两个角色 用户&#xff1a;登录、注册、论坛信息、查看扶贫公告信息、查看扶贫任务信息、报名任务、查看新闻信息&#xff08;新闻收藏、新闻留言&#xff09;、个人中心、在线客服等功能 管理员&#xff1a;登录、管理员管理、基础信息管理、客…

2000-2022年上市公司供应链效率数据(含原始数据+结果)

2000-2022年上市公司供应链效率数据&#xff08;含原始数据结果&#xff09; 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;年份、股票代码、省份、城市、区县、省份代码、城市代码、区县代码、首次上市年份、上市状态、股票简称、行业名称、行业代码、库存周转率、供…

docker安装时报错:Error: Nothing to do

安装docker时报以下错误 解决方法&#xff1a; 1.下载关于docker的相关依赖环境 yum -y install yum-utils device-mapper-persistent-data lvm22.设置下载Docker的镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3…

【RabbitMQ】消息队列 - RabbitMQ的使用记录

目录 一、什么是消息队列 二、什么是RabbitMQ 三、安装RabbitMQ 3.1 安装Erlang环境 3.2 安装RabbitMQ 3.3 打开服务管理界面 3.4 常用命令 四、Python示例代码 4.1 发送数据 4.2 接收数据 一、什么是消息队列 消息队列(Message Queue)是一种用于在应用程序之间传递消…

鸿蒙ArkUI开发:常用布局【弹性布局方向图】

弹性布局方向图 Flex({ direction: FlexDirection.Row }) FlexDirection.Row&#xff08;默认值&#xff09;&#xff1a;主轴为水平方向&#xff0c;子组件从起始端沿着水平方向开始排布FlexDirection.RowReverse&#xff1a;主轴为水平方向&#xff0c;子组件从终点端沿着F…

物联网设计竞赛_3_Jetson Nano连接摄像头

ls /dev/video* 查看是否有摄像头 camorama 开启摄像头 关闭摄像头用&#xff1a; ctr c结束进程 若有camorama被启动用ps aux 或者 ps aux l grep camorama 找到对应进程用 kill -9 <PID>杀死进程再启动 必要的时候也能重启系统再试试&#xff1a; shutdown -r …

Java入门基础学习笔记21——Scanner

在程序中接收用户通过键盘输入的数据&#xff1a; 需求&#xff1a; 请在程序中&#xff0c;提示用户通过键盘输入自己的姓名、年龄、并能在程序中收到这些信息&#xff0c;怎么解决&#xff1f; Java已经写好了实现程序&#xff0c;我们调用即可。 API&#xff1a;Applicat…