webrtc编译和mediasoup部署

复制代码


set GYP_MSVS_VERSON=2019
set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
set WINDOWSSDKDIR=C:\Program Files (x86)\Windows Kits\10
set GYP_GENERATORS=msvs-ninja,ninja
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

[编译
//webrtc编译 src目录下 git bash
依赖环境:python3.10 DirectX SDK Debugging Tools vs2019 c++各组件

根据项目需求对源码做出修改:
‪音频参数配置(aec回音消除)—src\media\engine\webrtc_voice_engine.cc
‪ Windows端d3d渲染—src\test\win\d3d_renderer.cc
reverb_decay混响因数调节—src\modules\audio_processing\aec3\residual_echo_estimator.cc

MTd:链接VC的运行时库(msvcrt.lib)采用静态库 MDd:不链接VC的运行时库(msvcrt.lib)采用动态库

WIN32/_WIN32 可以用来判断是否 Windows 系统(对于跨平台程序),而 _WIN64 用来判断编译环境是x86还是x64

release-64
gn gen out/Default --ide=vs2019 --args="use_custom_libcxx=false is_debug=false target_cpu=\"x64\" is_clang=true proprietary_codecs=true treat_warnings_as_errors=false rtc_include_tests=false rtc_enable_protobuf=false rtc_use_h264=true use_rtti=true"
debug-32
gn gen out/Default --ide=vs2019 --args="use_custom_libcxx=false is_debug=true enable_iterator_debugging=true target_cpu=\"x86\" is_clang=true proprietary_codecs=true treat_warnings_as_errors=false rtc_include_tests=false rtc_enable_protobuf=false rtc_use_h264=true use_rtti=true"

gn clean out/Default

双击打开out/Default/all.sln
加载完成之后,在vs2019中找到src/webrtc项目进行编译(也可尝试 ninja -C out/Default //-j 1),这个过程比较漫长
编译完成后会在out/Default/obj/目录生成webrtc.lib文件

is_clang: 默认开启 | is_clang置为false后ninja报错
use_rtti 默认不开启 如果在代码中使用typeid将引起链接失败
use_custom_libcxx 默认libcxx的c++标准库,链接时会与vc++的libcxx冲突,使用use_custom_libcxx=false从而链接vs++版本
enable_iterator_debugging=true –VS默认debug版本会设置_ITERATOR_DEBUG_LEVEL=0,所以我们编译的时候也要打开这个宏,该宏最后会设置_ITERATOR_DEBUG_LEVEL=2
rtc_use_h264:用h264编解码
rtc_include_tests:关闭测试代码,如果开着,可能会报一些错误
rtc_build_ssl:是否编译BoringSSL
is_component_ffmpeg: 是否使用ffmpeg
ffmpeg_branding: ffmpeg的分支名,这里采用Chrome的分支

windows error LNK2019
https://www.jianshu.com/p/3fd9f84b5de8

//libmediasoupclient cmake-gui编译出vs工程

cmake . -Bbuild -DLIBWEBRTC_INCLUDE_PATH:PATH=G:\libs\webrtc\webrtc\src -DLIBWEBRTC_BINARY_PATH:PATH=G:\libs\webrtc\webrtc\src\out\Default\obj

mediasoupclient依赖于sdptransform和ZERO_CHECK,所以首先编译生成ZERO_CHECK,再编译生成sdptransform

sdptransform-附加包含目录
G:\libs\libmediasoupclient\deps\libsdptransform\include;%(AdditionalIncludeDirectories)
附加包含目录
G:\libs\libmediasoupclient\include;
G:\libs\libmediasoupclient\deps\libsdptransform\include;
G:\libs\libmediasoupclient\src;
G:\libs\libmediasoupclient\src\third_party\abseil-cpp;
G:\libs\webrtc\webrtc\src;
G:\libs\webrtc\webrtc\src\third_party\abseil-cpp;
%(AdditionalIncludeDirectories)
预处理器定义

%(PreprocessorDefinitions);WIN32;_WINDOWS;WEBRTC_WIN;NOMINMAX;WIN32_LEAN_AND_MEAN;CMAKE_INTDIR="Debug"
%(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;WEBRTC_WIN;NOMINMAX;WIN32_LEAN_AND_MEAN;CMAKE_INTDIR="Release"

[boost和openssl 最新工程使用asio和webrtc自带openssl,此处跳过
x64 Native Tool
//boost编译
bootstrap.bat
b2.exe stage link=static runtime-link=static threading=multi variant=debug address-model=64
//OpenSSL编译
perl Configure VC-WIN64A no-asm --prefix=G:\libs\openssl-1.1.1g\build //
nmake
nmake test
nmake install
]

 

errors
值“0”不匹配值“2” 外来lib为0 本项目为2
模块计算机类型“X64”与目标计算机类型“X86”冲突 Perl设定为x64位 命令行为x86

_WEBSOCKETPP_CPP11_RANDOM_DEVICE_ 报错 属性-c/c++-命令行填入 /Zc:__cplusplus
]

[dll 32位 依赖
附加包含目录
G:\libs\webrtc\webrtc\src;G:\libs\webrtc\webrtc\src\third_party;G:\libs\webrtc\webrtc\src\third_party\abseil-cpp;G:\libs\webrtc\webrtc\src\third_party\libyuv\include;G:\libs\webrtc\webrtc\src\third_party\boringssl\src\include;G:\libs\webrtc\webrtc\src\sdk\objc;G:\libs\webrtc\webrtc\src\sdk\objc\base;G:\libs\libmediasoupclient\include;G:\libs\libmediasoupclient\deps\libsdptransform\include;.\deps\asio\asio\include;.\deps\concurrentqueue;G:\libs\websocketpp;G:\libs\simpleini;G:\libs\ffmpeg\include;%(AdditionalIncludeDirectories)

预处理器定义
WIN32;_DEBUG;MEDIASOUPDLL_EXPORTS;_WINDOWS;_USRDLL;UNICODE;_UNICODE;_ENABLE_EXTENDED_ALIGNED_STORAGE;GL_SILENCE_DEPRECATION;BUILD_STATIC;USE_AURA=1;NO_TCMALLOC;FULL_SAFE_BROWSING;SAFE_BROWSING_CSD;SAFE_BROWSING_DB_LOCAL;CHROMIUM_BUILD;_HAS_EXCEPTIONS=0;__STD_C;_CRT_RAND_S;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_ATL_NO_OPENGL;CERT_CHAIN_PARA_HAS_EXTRA_FIELDS;PSAPI_VERSION=2;_SECURE_ATL;_USING_V110_SDK71_;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WIN32_LEAN_AND_MEAN;NOMINMAX;NTDDI_VERSION=NTDDI_WIN10_RS2;_WIN32_WINNT=0x0A00;WINVER=0x0A00;DYNAMIC_ANNOTATIONS_ENABLED=1;WTF_USE_DYNAMIC_ANNOTATIONS=1;WEBRTC_ENABLE_PROTOBUF=1;WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE;RTC_ENABLE_VP9;HAVE_SCTP;WEBRTC_USE_H264;WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0;WEBRTC_WIN;ABSL_ALLOCATOR_NOTHROW=1;HAVE_WEBRTC_VIDEO;HAVE_WEBRTC_VOICE;ASIO_STANDALONE;ELPP_NO_DEFAULT_LOG_FILE;%(PreprocessorDefinitions)

附加库目录
G:\libs\webrtc\webrtc\src\out\Default;G:\libs\webrtc\webrtc\src\out\Default\obj;G:\libs\libmediasoupclient\build\libsdptransform\Debug;G:\libs\libmediasoupclient\build\Debug;%(AdditionalLibraryDirectories)

附加依赖项
Advapi32.lib;comdlg32.lib;dbghelp.lib;dnsapi.lib;gdi32.lib;msimg32.lib;odbc32.lib;odbccp32.lib;oleaut32.lib;shell32.lib;shlwapi.lib;user32.lib;usp10.lib;uuid.lib;version.lib;wininet.lib;winmm.lib;winspool.lib;ws2_32.lib;delayimp.lib;kernel32.lib;ole32.lib;crypt32.lib;iphlpapi.lib;secur32.lib;dmoguids.lib;wmcodecdspuuid.lib;amstrmid.lib;msdmo.lib;strmiids.lib;opengl32.lib;glu32.lib;webrtc.lib;mediasoupclient.lib;sdptransform.lib;%(AdditionalDependencies)
]

复制代码

 

复制代码

环境:Ubuntu18 nodejs和npm最新版本 mediasoup-demo不使用最新版,使用3.0版
server:package.json("mediasoup": "3.8.4") server下新建cert文件夹,将./node_modules/mediasoup/test/data/dtls-key.pem和dtls-cert.pem拷贝过来,修改config.js-tls上述cert和key路径和名称
config.js 多个ip访问
listenIps :
[{ip : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0',
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP || '192.168.0.4'
},
{ip : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0',
announcedIp : process.env.MEDIASOUP_ANNOUNCED_IP || '36.xxx.xxx.xxx'}

]
app:package.json("mediasoup-client": "3.6.37" | "react": "^16.0.0" | "react-dom": "^16.0.0")
安装 npm install --legacy-peer-deps (不用默认npm install)
启动 gulp live (不用默认npm start)

复制代码

 

posted @   jzdcf  阅读(900)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示