ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## Linux下webrtc 编译 环境基本配置和依赖下载 ``` apt-get update apt-get install -y g++ curl wget python git lsb-release sudo export PATH=$PATH:$WORKSPACE/depot_tools cd $WORKSPACE/webrtc/src ./build/install-build-deps.sh ``` 生成build.gn文件和 qtcreator文件, 通过ninja编译 ``` gn gen out/Release --args="use_rtti=true use_custom_libcxx=false proprietary_codecs=true use_openh264=true ffmpeg_branding=\"Chrome\" rtc_include_tests=false is_debug=false" --ide="qtcreator" ninja -C out/Release ``` ## MacOS 下载depot_tools ``` export PATH=$PATH:$WORKSPACE/depot_tools export CDS_CLANG_BUCKET_OVERRIDE=https://chromiumsrc.gitlab.io/commondatastorage/chromium-browser-clang git.sh cd $WORKSPACE rm -rf depot_tools && git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools cd $WORKSPACE/depot_tools && git checkout gitlab chmod +x $WORKSPACE/depot_tools/cipd ``` 下载webrtc源码 ``` cd $WORKSPACE rm -rf $WORKSPACE/webrtc && mkdir $WORKSPACE/webrtc cd $WORKSPACE/webrtc && \ gclient config --name src https://chromium.googlesource.com/external/webrtc.git@gitlab cd $WORKSPACE/webrtc && \ gclient sync\ --patch-ref=https://chromium.googlesource.com/chromium/src/build.git@gitlab sudo xcode-select -s /Applications/Xcode.app/Contents/Developer ``` 生成build.gn文件和 qtcreator文件, 通过ninja编译 ``` cd $WORKSPACE/webrtc/src && \ gn gen out/mac --args="use_rtti=true use_custom_libcxx=false proprietary_codecs=true use_openh264=true ffmpeg_branding=\"Chrome\" rtc_include_tests=false is_debug=false" --ide="qtcreator" cd $WORKSPACE/webrtc/src && \ ninja -C out/mac ``` ## Windows ***** 设置环境变量 set DEPOT_TOOLS_UPDATE=0 #不更新depot_tools set DEPOT_TOOLS_WIN_TOOLCHAIN=0 #编译时使用本机VS工具链 set GYP_MSVS_VERSION = 2017 #指定VS版本 set GYP_MSVS_OVERRIDE_PATH = C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise #vs安装路径,替换成自己的 set GYP_GENERATORS=msvs-ninja,ninja #使用ninja编译 1.不需要单独安装python环境。python-2.7.6 安装好depot_tools后,把 depot_tools\win_tools-2_7_6_bin\python\bin\目录设置为python环境变量 2.需要下载[Debugging Tools for Windows 10 (WinDbg)](https://go.microsoft.com/fwlink/p/?linkid=2120843) 3.建议在powershell环境下使用 ``` set PY27=depot_tools\win_tools-2_7_6_bin\python\bin\ set PATH=%PATH%;depot_tools\win_tools-2_7_6_bin\python\bin\ set PYTHONHOME=%PY27% set PYTHONPATH=%PYTHONHOME%\lib ``` ``` # 1. git - https://git-scm.com/download/win 2. visualstudio2017community - https://download.visualstudio.microsoft.com/download/pr/aaebc214-bc67-4137-9bea-04fcb0c90720/2e18f27594472d0c7515d9cbe237bd56/vs_community.exe > 2.1 Modify "Windows Software Development Kit" > +Debugging Tools for Windows 3. python2 - https://www.python.org/downloads/release/python-2716/ > 3.1 pip install pywin32 #设置 1. 执行git.sh #安装depot_tools cd %USERPROFILE% rd /s /q depot_tools webrtc & git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git -b gitlab #配置 set PATH=%PATH%;%USERPROFILE%\depot_tools cd %USERPROFILE% && ^ rd /s /q webrtc & mkdir webrtc cd %USERPROFILE%\webrtc && ^ gclient config --name src https://chromium.googlesource.com/external/webrtc.git@gitlab #同步 set CDS_CLANG_BUCKET_OVERRIDE=http://120.92.49.206:3232/chromiumsrc/commondatastorage/raw/master/public/chromium-browser-clang set DEPOT_TOOLS_WIN_TOOLCHAIN=0 cd %USERPROFILE%\webrtc && ^ gclient sync --patch-ref=https://chromium.googlesource.com/chromium/src/build.git@gitlab #生成 cd %USERPROFILE%\webrtc\src &&& ^ gn gen out/win --args="use_rtti=true is_clang=false rtc_build_tools=false rtc_include_tests=false rtc_build_examples=false is_debug=false use_custom_libcxx=false target_cpu=\"x64\" use_openh264=true proprietary_codecs=true ffmpeg_branding=\"Chrome\"" --ide=vs2017 #编译 cd %USERPROFILE%\webrtc\src && ^ ninja -C out/win ``` ` ` 参考链接:[https://www.ctolib.com/topics-113745.html](https://www.ctolib.com/topics-113745.html) ## 编译参数 | 参数 | 解析 | | --- | --- | | is_debug | 是否是Debug版,默认true,false:表示编译Release版。 | | target_os | 平台类型,可以取值win、android、ios、linux等,这里取win,表示Windows平台。| | target_cpu | cpu类型,Windows下可以取x86、x64 | | is_component_build | 是否使用动态运行期库,这里取false,使用静态运行期库,Release版本将对应MT,Debug版将对应MTd。| | proprietary_codecs | 是否使用版权编码,也就是H264,这里取true。 | | rtc_use_h264 | 是否使用H264,这里取true,注意Windows平台编码使用OpenH264,解码使用ffmpeg。| | ffmpeg_branding | ffmpeg的分支名,这里采用Chrome的分支。 | | rtc_build_ssl | 是否编译BoringSSL,这里取false,因为后面我们要替换成OpenSSL。| | rtc_ssl_root | OpenSSL的头文件路径,会被写到生成的ninja文件中。 | ## win下编译android的webrtc.jar ``` gn gen out/armeabi-v7a "--args target_os=android target_cpu=arm is_debug=false is_component_build=false rtc_include_tests=false rtc_use_h265=true" --ide="vs2017" ninja -C out/armeabi-v7a ``` ` ` ### 配合QT编译 ***** 编译webrtc时候加上参数 ``` use_custom_libcxx=false和use_custom_libcxx_for_host=false这是用来控制编译WebRtc时使用的c++库的 ``` >原因很简单,如果不加这个编译开关的话,WebRtc编译默认使用libc++来编译,而Qt使用GCC编译的时候使用的是libstdc++,这样在编译的过程中就会导致用到std::string的地方,就会编译报错。 避免和webrtc的信号槽冲突方法一: 项目中定义宏: ``` QT_DEPRECATED_WARNINGS QT_NO_KEYWORDS ``` 避免和webrtc的信号槽冲突方法二: sigslot.h中的emit函数名会和Qt中的emit宏冲突,我将sigslot.h中的emit改成了Emit,当然改完之后,需要重新编译rtc\_base工程 ``` ninja -C out/mac rtc_base ``` 打开h264编解码的编译开关 ``` proprietary_codecs=true ffmpeg_branding=\\"Chrome\\" ``` ### 编译webrtc项目时需要宏定义: ``` HAVE_WEBRTC_VOICE  WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE WEBRTC_USE_H264 WEBRTC_INITIALIZE_FFMPEG FFMPEG_H264_DECODER WEBRTC_POSIX ``` ## 将所有生成的.a文件合成一个静态库 ### linux下的脚本 将整个.a文件集合成一个webrtc库 ``` for i in `find /Users/zf/webrtc1128/webrtc-checkout/src/out_ios32 -name "lib*.a"` do echo $i cp $i ./out_ios32/ done libtool -static -v -o out_ios32/libwebrtc32.a out_ios32/*.a strip -S -X out_ios32/libwebrtc32.a ``` 整合所有头文件 ``` #!/bin/bash src=`find src/ -name "*.h|*.hpp"` echo $src for obj in $src do echo "cp header file $obj" cp --parents $obj include/ ``` ### window下的脚本 使用gitbash执行脚本 ``` #!/bin/bash src=`find src/ -name "*.lib"` echo $src for obj in $src do echo "cp header file $obj" cp $obj lib/ done ``` ## webrtc注意点 1.如果是用虚拟机共享目录。则需要用到samba共享文件。不同的文件系统,软连接创建不成功。 如果是macos上的ubuntu虚拟机则没问题。 2.一个平台一份代码。webrtc在同步的时候会自动备份旧代码然后成一份新的代码。 ## windows使用webrtc.lib库,提示“文件损坏或无效,无法读取” 解决办法 这个问题 在用vs调用webrtc.lib时出现,在gn时 增加 is\_clang=false 可以解决掉