webrtc 踩坑实录

1. webrtc编译参考:Windows平台WebRTC编译(持续更新) - 剑痴乎

2. webrtc 版本对应关系:WebRTC 的版本号与代码分支 - 简书

3. webrtc 源码:https://webrtc.googlesource.com/src.git

4. 由于工作需要,拉了最新webrtc最新版本的代码,vs2022编译一次搞定,没有异常。这很幸运是吧。但坑的就是peerconnection在windows上跑着有问题,查了一下是client和server交互有问题。新版本中将Win32SocketServer换掉了,然后就留下一个坑。查了一下资料,这个坑埋很久了,至今没有解决。相关讨论在这个位置:13498 - webrtc - Web-based real-time communication - Monorail,可能需要外网访问。

 然后我就把源码reset到这个提交之前去编译了,使用的是vs2017的编译器,然后吧,又是很大一个坑,这次问题出在了编译上。这次出现了几个编译错误。

  • 错误1打印如下:

In file included from ../../third_party/ffmpeg/libavutil/autorename_libavutil_cpu.c:2:
../../third_party/ffmpeg/libavutil/cpu.c(50,31): error: macro 'ATOMIC_VAR_INIT' has been marked as deprecated
      [-Werror,-Wdeprecated-pragma]
static atomic_int cpu_flags = ATOMIC_VAR_INIT(-1);
                              ^
..\..\third_party\llvm-build\Release+Asserts\lib\clang\15.0.0\include\stdatomic.h(50,41): note: macro marked
      'deprecated' here
#pragma clang deprecated(ATOMIC_VAR_INIT)
                                        ^
1 error generated.

最快的解决办法就是stdatomic.h这里面的#pragma clang deprecated(ATOMIC_VAR_INIT)注释掉。

  • 错误2打印如下:

[802/1423] CC obj/third_party/zlib/zlib/deflate.obj
FAILED: obj/third_party/zlib/zlib/deflate.obj
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes:user "-imsvcC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" "-imsvcC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" "-imsvcC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-imsvcC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt" "-imsvcC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared" "-imsvcC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um" "-imsvcC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt" "-imsvcC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt" -DUSE_AURA=1 "-DCR_CLANG_REVISION=\"llvmorg-13-init-12881-g4017d033-1\"" -D_LIBCPP_ABI_UNSTABLE -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS -D_LIBCPP_ENABLE_NODISCARD -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -D_LIBCPP_DEBUG=0 -D_LIBCPP_NO_AUTO_LINK -D__STD_C -D_CRT_RAND_S -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE -D_ATL_NO_OPENGL -D_WINDOWS -DCERT_CHAIN_PARA_HAS_EXTRA_FIELDS -DPSAPI_VERSION=2 -DWIN32 -D_SECURE_ATL -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -DWIN32_LEAN_AND_MEAN -DNOMINMAX -D_UNICODE -DUNICODE -DNTDDI_VERSION=NTDDI_WIN10_VB -D_WIN32_WINNT=0x0A00 -DWINVER=0x0A00 -D_DEBUG -DDYNAMIC_ANNOTATIONS_ENABLED=1 -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -DZLIB_IMPLEMENTATION -DZLIB_DEBUG -DADLER32_SIMD_SSSE3 -DX86_WINDOWS -DINFLATE_CHUNK_SIMD_SSE2 -DINFLATE_CHUNK_READ_64LE -DCRC32_SIMD_SSE42_PCLMUL -DDEFLATE_FILL_WINDOW_SSE2 -I../.. -Igen -I../../third_party/zlib -fno-delete-null-pointer-checks -fno-ident -fcolor-diagnostics -fmerge-all-constants -fcrash-diagnostics-dir=../../tools/clang/crashreports -mllvm -instcombine-lower-dbg-declare=0 -fcomplete-member-pointers /Gy /FS /bigobj /utf-8 /Zc:twoPhase /Zc:sizedDealloc- /D__WRL_ENABLE_FUNCTION_STATICS__ -fmsc-version=1916 -m64 -msse3 /Brepro -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Xclang -fdebug-compilation-dir -Xclang . -no-canonical-prefixes /Od /Ob0 /GF /Z7 -gcodeview-ghash -ftrivial-auto-var-init=pattern /guard:cf,nochecks /MTd -Xclang -add-plugin -Xclang find-bad-constructs -Xclang -plugin-arg-find-bad-constructs -Xclang checked-ptr-as-trivial-member -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare /W3 /wd4800 /wd4267 /wd4996 -Wno-unused-variable -Wno-misleading-indentation /WX /wd4091 /wd4127 /wd4251 /wd4275 /wd4312 /wd4324 /wd4351 /wd4355 /wd4503 /wd4589 /wd4611 /wd4100 /wd4121 /wd4244 /wd4505 /wd4510 /wd4512 /wd4610 /wd4838 /wd4995 /wd4996 /wd4456 /wd4457 /wd4458 /wd4459 /wd4200 /wd4201 /wd4204 /wd4221 /wd4245 /wd4267 /wd4305 /wd4389 /wd4702 /wd4701 /wd4703 /wd4661 /wd4706 /wd4715 -Wno-missing-field-initializers -Wno-unused-parameter -Wno-c++11-narrowing -Wno-unneeded-internal-declaration -Wno-undefined-var-template -Wno-nonportable-include-path -Wno-psabi -Wno-ignored-pragma-optimize -Wno-implicit-int-float-conversion -Wno-final-dtor-non-final-class -Wno-builtin-assume-aligned-alignment -Wno-deprecated-copy -Wno-non-c-typedef-for-linkage -Wno-unused-but-set-parameter -Wno-unused-but-set-variable -Wmax-tokens -Wno-incompatible-pointer-types /TC -Wno-implicit-fallthrough /c ../../third_party/zlib/deflate.c /Foobj/third_party/zlib/zlib/deflate.obj /Fd"obj/third_party/zlib/zlib_c.pdb"
../../third_party/zlib/deflate.c(189,12): error: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
local void slide_hash(s)

这次错误有点多,不能简单粗暴修改源码了。看错误提示,编译器版本和源码兼容问题,因为新版本编译没有问题,我比较了一下最新版源码中BUILD.gn的修改,发现cflags中多了-Wdeprecated-non-prototype,嗯,和错误提示中的一样。git blame后将相关提交cherry-pick过来后问题解决。这里有个问题,这个编译问题应该是21年6月就已经有了,然后我看到的提交是22年的。。。

5. 至此,填坑完毕。开始不想填坑,试了好几个分支,最后发现满满的坑,还是自己填了吧。。。云服务器1M的带宽,同步的好慢啊。。。


版权声明:本文为u012783669原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。