WEBRTC +QT(5.15.2 + MSVC2019)
一、编译
下载编译参考博客https://blog.csdn.net/aggs1990/article/details/118230538
我的编译环境:
vs2019
windows11
SDK_VERSION = '10.0.22621.0'//(setup_toolchain.py中可以指定sdk版本)
我的编译选项:
gn gen out/win --ide="vs2019" --args="use_custom_libcxx=false use_custom_libcxx_for_host=false use_cxx17=false"
ninja -C out/win
这些个编译选项要根据自己实际情况来判定开启哪些选项,而不是照抄别人的,因为每个人的开发环境,编译工具等可能不一样,所以,最好是先不要在参数中指定任何的选项,先编译一次,如果出现错误,我们再根据出现的错误去指定对应的选项。
(1)比如我上面的use_custom_libcxx=false use_custom_libcxx_for_host=false
这俩选项开启是因为我编译出的webrtc.lib库,在引入qt中的时候,提示我下面的错误
这是因为WebRtc编译默认使用libc++来编译,而Qt使用GCC编译的时候使用的是libstdc++,这样在编译的过程中就会导致用到std::string的地方,就会编译报错,所以加上了use_custom_libcxx=false use_custom_libcxx_for_host=false
。
(2)use_cxx17=false
这个选项开启是因为编译webrtc源码过程中提示我某些源码需要至少c++20的支持,查看D:\3rdpat\webrtc\webrtc-check\src\build\config\compiler\BUILD.gn
该文件下,发现这样一段代码
if (use_cxx17) {
cflags_cc += [ "-std=c++17" ]
} else {
cflags_cc += [ "-std=c++20" ]
}
所以设置use_cxx17=false这个选项就可以使用c++20,如果不设置默认为c++17,而有的人则默认是c++14,需要指定c++17,这都要根据实际情况来指定。
(3)还有一个编译错误没有截图了,大概意思是这些代码在c++20中已经弃用了,所以我在
D:\3rdpat\webrtc\webrtc-check\src\build\config\compiler\BUILD.gn
文件中增加了以下的宏定义
defines += ["_SILENCE_CXX20_IS_POD_DEPRECATION_WARNING=1","_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS=1"]
(4)链接不到windows库
这里的timeKillEvent是windowssdk的函数,这里链接不到,那就是windows的库找不到或者版本不对,在pro文件中链接下库文件
#windows系统库
LIBS += -lwinmm -liphlpapi -lwbemuuid -lSecur32 -lAdvapi32 -lMmdevapi -lMfuuid -lmsdmo -ldmoguids -lwmcodecdspuuid
总结:webrtc源码编译的过程其实是一个解决问题的过程,基本思路就是根据错误信息,指定不同的编译选项,或者配置需要的编译环境,基本可以解决大部分问题,实在不行也可以直接修改部分源码。
二、qtcreater中引入webrtc库
pro文件配置如下
# 添加WebRTC库路径
WEBRTC_ROOT = D:/3rdpat/webrtc/webrtc-check/src
#头文件
INCLUDEPATH += $$WEBRTC_ROOT/third_party/abseil-cpp
INCLUDEPATH += $$WEBRTC_ROOT
#库文件
LIBS += -L$$WEBRTC_ROOT/out/win/obj
LIBS += -lwebrtc
#windows系统库
LIBS += -lwinmm -liphlpapi -lwbemuuid -lSecur32 -lAdvapi32 -lMmdevapi -lMfuuid -lmsdmo -ldmoguids -lwmcodecdspuuid
DEFINES += WEBRTC_WIN NOMINMAX
#解决运行时库的问题
win32:CONFIG(debug, debug|release): {
QMAKE_CFLAGS_DEBUG += -MTd
QMAKE_CXXFLAGS_DEBUG += -MTd
}
else:win32:CONFIG(release, debug|release): {
QMAKE_CFLAGS_RELEASE += -MT
QMAKE_CXXFLAGS_RELEASE += -MT
}
三、qt+webrtc实现简单的音视频采集+显示
未完,更新中…