无论是Windows还是Linux平台,都是先按常规的步骤部署mediasoup-demo。简单来说分以下四步:
- 部署node.js环境
- 拉取GitHub - versatica/mediasoup-demo: mediasoup official demo application
- 进入server目录执行npm install
- 进入app目录执行npm install
- 复制config.example.js为config.js,修改配置
如果上述步骤都可以成功完成,那么再来做编译debug的worker的步骤
修改和构建步骤:
进入server\node_modules\mediasoup\目录,mediasoup-worker的源码就在这里,在npm install的过程中生成的mediasoup-worker.exe,在out\Release里面。生成过程中的obj等的文件,在npm install完成之后就删除了。
需要修改的是3个文件:
1)npm-scripts.js:这是npm install实际执行的脚本,修改这个脚本目的是不要在npm install完成之后删除生成的过程文件,否则生成出来的pdb也删除了
119 case 'postinstall':
120 {
121 if (!process.env.MEDIASOUP_WORKER_BIN)
122 {
123 execute('node npm-scripts.js worker:build');
124 // Clean build artifacts except `mediasoup-worker`.
125 //execute(`${MAKE} clean-build -C worker`);
126 // Clean downloaded dependencies.
127 //execute(`${MAKE} clean-subprojects -C worker`);
128 // Clean PIP/Meson/Ninja.
129 execute(`${MAKE} clean-pip -C worker`);
130 }
131
132 break;
133 }
注释125行和127行,在npm install之后保留编译过程中生成的中间文件,还有拉取的依赖项目的源码。
2)worker\Makefile:这个文件控制生成Debug还是Release,除了编译选项还有生成的目录不同。
10 # Controls build types, `Release` and `Debug` are presets optimized for those use cases.
11 # Other build types are possible too, but they are not presets and will require `MESON_ARGS` use to customize build
12 # configuration.
13 # Check the meaning of useful macros in the `worker/include/Logger.hpp` header file if you want to enable tracing or
14 # other debug information.
15 MEDIASOUP_BUILDTYPE ?= Debug
第15行默认是Release,改成Debug
3)重新构建
在 server\node_modules\mediasoup\worker目录下,执行npm rebuild,重新构建worker,生成的exe在out\Debug下,同时构建的过程文件在out\Debug\build里,pdb也在里面。
4)让server使用debug版本的worker
要让server启动Debug版本的worker,需要设置环境变量。设置环境变量可以在package.json中设置,我们执行npm start命令,实际是读取了package.json中的scripts.start的值,然后作为命令执行。
默认package.json如下,其中scripts.start的值前面的DEBUG=${DEBUG:='*mediasoup* *INFO* *WARN* *ERROR*'} INTERACTIVE=${INTERACTIVE:='true'}就是设置DEBUG和INTERACTIVE环境变量。
1 {
2 "name": "mediasoup-demo-server",
3 "version": "3.0.0",
4 "private": true,
5 "description": "mediasoup demo server",
6 "author": "Iñaki Baz Castillo <ibc@aliax.net>",
7 "license": "All Rights Reserved",
8 "main": "lib/index.js",
9 "scripts": {
10 "lint": "eslint -c .eslintrc.js server.js lib connect.js",
11 "start": "DEBUG=${DEBUG:='*mediasoup* *INFO* *WARN* *ERROR*'} INTERACTIVE=${INTERACTIVE:='true'} node server.js",
12 "connect": "node connect.js"
13 },
......
但是默认的值,只适合Linux,在Windows上需要改。而我们需要加上额外的环境变量,控制启动的worker是debug的版本。用到的环境变量如下:
- MEDIASOUP_BUILDTYPE:取值为Debug时就是运行Debug版本的worker,不是Debug时就是运行Release的版本
- MEDIASOUP_WORKER_BIN:直接指定mediasoup-worker.exe的路径。这个环境变量更加优先,只要设置了这个变量,就用这个变量指定的mediasoup-worker.exe
在Windows上,设置环境变量需要使用set命令:
set MEDIASOUP_BUILDTYPE=Debug
设置多个变量需要多个set命令调用,中间可以用&&连接。注意变量的值是“=”到“&&”之间的所有内容,包括空格,所以不要有任何多余的空格,也不需要任何的'(单引号)和"(双引号)!!!比如DEBUG的值是*mediasoup* *INFO* *WARN* *ERROR*,中间即使有空格,也不需要加任何引号。
改完之后的package.json如下:
1 {
2 "name": "mediasoup-demo-server",
3 "version": "3.0.0",
4 "private": true,
5 "description": "mediasoup demo server",
6 "author": "Iñaki Baz Castillo <ibc@aliax.net>",
7 "license": "All Rights Reserved",
8 "main": "lib/index.js",
9 "scripts": {
10 "lint": "eslint -c .eslintrc.js server.js lib connect.js",
11 "start": "set DEBUG=*mediasoup* *INFO* *WARN* *ERROR*&&set INTERACTIVE=true&&set MEDIASOUP_BUILDTYPE=Debug&&node server.js",
12 "connect": "node connect.js"
13 },
......
再次提醒,MEDIASOUP_BUILDTYPE=后面和Debug后面不要有空格!!!
然后rpm start启动server,任务管理器里就能看到mediasoup-worker.exe的路径是Debug的了