下面是将peerconnection_client从整个webrtc工程文件中分离出来的过程记录
一 webrtc项目的本地编译
生成Ninja配置文件
gn gen --target=x64 --args=“is_clang = false use_lld=false use_custom_libcxx = false use_rtti=true rtc_include_tests=false enable_iterator_debugging=true symbol_level=0 is_component_build=false” --ide=vs2019 out/x64_debug_20210212
编译
ninja -C out/x64_debug_20210212
编译的debug版本的,ide用的是vs2019,我的webrtc的版本是2019年4月份的,69
二 创建桌面应用程序
这里要创建空的桌面项目,而不是控制台项目。
然后将webrtcDemo中的peerconnection_client的源文件复制到创建的vs项目中
vs工程文件
三 配置vs项目的属性
根据peerconnection_client.ninja文件配置项目属性,右键项目,打开属性页。
设置包含目录
根据Ninja配置文件中include_dirs设置包含的头文件目录,这里是我的
G:\webrtc\code\src\out\x64_debug_20210212\gen
G:\webrtc\code\src
G:\webrtc\code\src\third_party\abseil-cpp
G:\webrtc\code\src\third_party\libyuv\include
G:\webrtc\code\src\third_party\jsoncpp\overrides\include
G:\webrtc\code\src\third_party\jsoncpp\source\include
添加预处理器
_DEBUG
_WINDOWS
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
CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
PSAPI_VERSION=2
WIN32
_SECURE_ATL
WIN32_LEAN_AND_MEAN
NOMINMAX
_UNICODE
UNICODE
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_NON_STATIC_TRACE_EVENT_HANDLERS=0
WEBRTC_WIN
ABSL_ALLOCATOR_NOTHROW=1
HAVE_WEBRTC_VIDEO
设置运行库
选择MTd不用拷贝系统运行期库,但是生成文件会比较大。MDd,生成文件比较小,但是需要拷贝一些系统文件
webrtc debug版本默认的是MTd release版本默认的是MT
设置附加库
我用的是绝对路径,也可以将相关的库文件添加到项目本身目录中,设置相对路径
添加链接库依赖项
obj/webrtc.lib
obj/third_party/jsoncpp/jsoncpp/json_reader.obj
obj/third_party/jsoncpp/jsoncpp/json_value.obj
obj/third_party/jsoncpp/jsoncpp/json_writer.obj
obj/test/field_trial/field_trial.obj
obj/rtc_base/rtc_json/json.obj
obj/test/video_test_common/test_video_capturer.obj
obj/test/platform_video_capturer/vcm_capturer.obj
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
项目依赖的库主要是在peerconnection_client.ninja文件中查找的
和操作系统本身相关的lib很好确定,主要是和webrtc项目相关的库,一直报各种链接错误,LNK2019啥的,不太好确定是哪些,即便把ninja文件中的出现的所有.lib都添加进去,依然是各种链接错误。这里借鉴了PeerConnectionClientDemo(和这里添加的库又有点不同),添加了几个obj文件。
但是其中有一个vcmCaputurer相关的链接错误搞了很久,就是缺少下面两个obj文件
obj/test/video_test_common/test_video_capturer.obj
obj/test/platform_video_capturer/vcm_capturer.obj
这两个obj是后来我自己加上去的
四 总结
配置项目环境真的是巨坑,需要耐心。webrtc整个项目虽然是宝藏,但是太大了,对于新手真的很不友好,现在从十几G的大项目中分离出来了peerconnection_client,希望能快速上手吧。
全部生成成功了,还是很爽的。
参考:
1、https://www.jianshu.com/p/351b29e36243
2、https://my.oschina.net/u/4257773/blog/4559837
3、https://blog.csdn.net/CrystalShaw/article/details/108507064