Alby's blog

世上没有巧合,只有巧合的假象。

0%

mediasoup 3.13.16 worker 的编译及生成 xcodeproj 和 sln

一、准备工作

1、安装 node

1
brew install node

可以不预先安装 meson(ninjia)flatc, 编译时会自动使用 pip 安装。故需确保安装了 python3

2、获取源码并安装 node 包

1
2
3
4
5
# 当前目录:/Users/alby/Workspace/OpenSource/Multimedia/versatica
git clone https://github.com/versatica/mediasoup
cd mediasoup
# 如果不关心 node 部分,可以不运行下行。
npm i

二、默认编译

默认编译将产出 mediasoup-worker 可执行程序。

1
2
3
4
# 当前目录:/Users/alby/Workspace/OpenSource/Multimedia/versatica/mediasoup
export MEDIASOUP_BUILDTYPE=Release # 可选,默认 Release
export MEDIASOUP_OUT_DIR=$(pwd)/out # 可选,默认 out 子目录
npm run build worker:build # node npm-scripts.js worker:build

当然,也可以直接执行 make :

1
2
3
4
5
# 当前目录:/Users/alby/Workspace/OpenSource/Multimedia/versatica/mediasoup
# 默认是:mediasoup-worker
make -C worker
# 或者 Debug 版
# MEDIASOUP_BUILDTYPE=Debug make -C worker

如果报”ERROR: Subproject exists but has no meson.build file”之类的错误,执行命令 make -C worker clean-all 后重试。

三、生成 xcodeproj

1
2
3
4
# 当前目录:/Users/alby/Workspace/OpenSource/Multimedia/versatica/mediasoup
make -C worker xcode
# 或者:
# cd worker && meson setup --buildtype debug --backend xcode ./out/xcode

四、生成 sln

首先确保 meson 安装:

1
pip install meson
1
2
3
4
# 当前目录:C:\Workspace\OpenSource\mediasoup
npm run flatc:worker
cd worker
meson setup --buildtype debug --backend vs out\vs

Makefile 没有相关配置,所有不能执行 make -C worker vs
如有必要:执行 npm run flatc:worker 之前将 task.py 中的 PTY_SUPPORTED 的值硬编码为 False
如有需要:set https_proxy=http://127.0.0.1:10809

五、编译 libmediasoup-worker 静态库

1
2
3
4
# 当前目录:/Users/alby/Workspace/OpenSource/Multimedia/versatica/mediasoup
export MEDIASOUP_BUILDTYPE=Release # 可选,默认 Release
export MEDIASOUP_OUT_DIR=$(pwd)/out # 可选,默认 out 子目录
make -C worker libmediasoup-worker

六、编译 libmediasoup-worker 动态库

首先打开 meson.build 文件,搜索 libmediasoup_worker = library,将 library 改为 shared_library

1
2
3
4
# 当前目录:/Users/alby/Workspace/OpenSource/Multimedia/versatica/mediasoup
export MEDIASOUP_BUILDTYPE=Release # 可选,默认 Release
export MEDIASOUP_OUT_DIR=$(pwd)/out # 可选,默认 out 子目录
make -C worker libmediasoup-worker

生成 P/Invoke 代码(尚未测试):

1
2
dotnet tool install --global ClangSharpPInvokeGenerator --version 14.0.0-beta2
DYLD_LIBRARY_PATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib ClangSharpPInvokeGenerator -n Tubumu.Mediasoup -m MediasoupNative -o MediasoupNative.cs -l ./worker/out/Release/libmediasoup-worker.dylib -f ./worker/include/lib.hpp

七、备注

后来在较新版本上的 mediasoup 上尝试生成 xcodeproj 失败,并且提示警告 WARNING: xcode backend is currently unmaintained, patches welcome

参考资料

npm-scripts.js
Makefile
task.py
meson.build