mediasoup也是学习入门WebRTC的优秀的项目,而且从前到后一条龙学到底,本文会说明mediasoup项目本地调试环境(js/nodejs/c++)的搭建。
使用到的工具与环境为:
mediasoup主要提供了三个github项目,下面括号里为写文档时对应的commit_id,分别为:
首先clonemediasoup-demo项目,目录结构如下:
接下来去启动后端服务
opensslreq-new-newkeyrsa:1024-x509-sha256-days3650-nodes-outfullchain.pem-keyoutprivkey.pem将生成的fullchain.pem和privkey.pem复制到server/certs目录
虽然vscode/webstorm也可以调试nodejs程序,但总感觉没有Chrome浏览器方便,因此我们主要使用Chrome来调试,方法可以将server/package.json里的start命令稍微修改下:
"start":"node--inspect=8888server.js",运行命令后,去Chrome浏览器打开:chrome://inspect/#devices
打开OpendedicatedDevToolsforNode,配上本地的8888端口,然后稍等片刻就能看到inspect按钮,打开后就可以愉快地给代码打断点了。
首先我们要下载mediasoup项目,然后自己编译一个Debug版本,因为只有Debug版本才会生成pdb文件,在vs里配置好pdb后才能愉快地打断点。
在package.json里已经配置好了编译的脚本,因此不需要做什么额外的工作,只是需要将python环境里有MEDIASOUP_BUILDTYPE改为Debug字符串,如果不改环境变量就直接改task.py里的这行:
MEDIASOUP_BUILDTYPE=os.getenv('MEDIASOUP_BUILDTYPE')or'Debug';改完之后就开始编译
"worker:build":"nodenpm-scripts.mjsworker:build",编译过程中遇到一个问题,是python里的PTY错误,查了半天没有搞定,然后看到task.py里有个PTY_SUPPORTED=sys.stdout.isatty();根据系统能力探测,可能是探测支持,但实际又有什么问题,索性把PTY_SUPPORTED改为False,结果跑通。
编译完成的程序在mediasoup/worker/out/Debug/mediasoup-worker.exe,pdb文件在mediasoup/worker/out/Debug/build/mediasoup-worker.pdb
这个在nodejs程序里也有环境变量,使用的话是在mediaosup/node/src/Worker.ts里,如果有环境变量优先使用环境变量
exportconstworkerBin=process.env.MEDIASOUP_WORKER_BINprocess.env.MEDIASOUP_WORKER_BIN:process.env.MEDIASOUP_BUILDTYPE==='Debug'path.join(__dirname,'..','..','worker','out','Debug','mediasoup-worker'):path.join(__dirname,'..','..','worker','out','Release','mediasoup-worker');因此我们在上步指定IP的位置再加一行代码:
process.env.MEDIASOUP_WORKER_BIN='D:\...\mediasoup\worker\out\Debug\mediasoup-worker.exe';重新运行命令,看下我们自己编译的worker是否运行正常。
上步使用我们自己编译的exe是为了让编译出来的pdb和exe配套,下面在vs里配置pdb,打开工具-选项-符号,在右侧添加pdb的目录(注意是目录,不是pdb文件),配置完点击确定
在程序运行的前提下,打开调试-附加到进程,在里面过滤mediasoup,找到程序后点击附加
随便打个断点测试下,生效!断点要打开源码的位置,即vs打开mediasoup项目,附加进程后,添加断点没有黄色的叹号就是成功。