/OpenRTCClient

BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

这个仓库包含了 WebRTC 的源码,构建 WebRTC SDK 所需的大部分构建工具,如 LLVM,以及一套主要用 Python 编写的简单构建系统。

这套构建系统支持在 Mac 平台上为 Mac、iOS 和 Android 编译 WebRTC SDK,支持在 Windows 平台上为 Windows 编译 WebRTC SDK,支持在 Linux 平台上为 Linux 和 Android 编译 WebRTC SDK。

构建系统中预埋了大部分构建过程所需的工具,WebRTC 依赖的许多 Git Repo 也以源码的形式提交进了 webrtc/ 目录下,因而通过这套构建系统无需执行 gclient 等命令来同步依赖。这套构建系统用一个统一的命令 webrtc_build 作为入口,以一种统一的方式支持各个主机平台上不同目标系统平台 WebRTC SDK 的构建。

在运行 webrtc_build 命令之前,首先需要为它准备构建环境,包括 Python3 安装,IDE 和构建工具安装等,如通过原生的 WebRTC 构建系统来构建那样。当在不同主机平台上为不同目标系统平台构建 WebRTC SDK 时,所要做的环境准备也不尽相同。

在 Mac 平台上为 Mac 编译 WebRTC SDK 准备

  1. 安装 Git。

  2. 安装 Xcode 9 及以上,建议安装最新版 Xcode。

  3. 安装 Python3。

  4. 安装 depot_tools,并将其路径添加进 PATH 环境变量。

(1). 下载 depot_tools,如在 ~/bin 目录下:

bin % git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

(2). 修改 ~/.zshrc (假设用的 shell 为 zshell,如果用 bash,修改 ~/.bashrc),添加如下行:

export PATH=~/bin/depot_tools:$PATH

更多详情,请参考 Prerequisite Software

在 Mac 平台上为 iOS 编译 WebRTC SDK 准备

同上 在 Mac 平台上为 Mac 编译 WebRTC SDK 准备

在 Mac 平台上为 Android 编译 WebRTC SDK 准备

首先完成 在 Mac 平台上为 Mac 编译 WebRTC SDK 准备。为 Android 编译 WebRTC 需要一些额外的工具:

  1. 安装 JDK 8

当前 WebRTC 的大部分代码的编译通过 Java 11 完成,但部分 Java 工具的执行需要 Java 8 环境。

Oracle 网站 下载 JDK 8,安装 JDK 8,并修改 ~/.zshrc (假设用的 shell 为 zshell,如果用 bash,修改 ~/.bashrc),添加环境变量 JAVA_8_HOME 指向 JDK 8 的安装路径,如:

export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home
  1. 安装 JDK 11

Oracle 网站 下载 JDK 11,安装 JDK 11,并修改 ~/.zshrc (假设用的 shell 为 zshell,如果用 bash,修改 ~/.bashrc),添加环境变量 JAVA_HOME 指向 JDK 11 的安装路径,如:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.13.jdk/Contents/Home

更多详情,可参考 Mac OS 安装 Java JDK 11

  1. 安装 Android SDK

可通过 Android Studio 安装 Android SDK,并修改 ~/.zshrc (假设用的 shell 为 zshell,如果用 bash,修改 ~/.bashrc),添加环境变量 ANDROID_SDK 指向 Android SDK 的安装路径,如:

export ANDROID_SDK=~/Library/Android/sdk
  1. 安装 Android NDK

可通过 Android Studio 安装 Android NDK,也可以直接下载 NDK 安装包,并修改 ~/.zshrc (假设用的 shell 为 zshell,如果用 bash,修改 ~/.bashrc),添加环境变量 ANDROID_NDK 指向 Android NDK 的安装路径,Android NDK 的安装路径可以是具体的某个版本的 NDK 的安装路径,如:

export ANDROID_NDK=~/Library/Android/sdk/ndk/23.1.7779620

也可以是 Android Studio 的 NDK 集的路径,如:

export ANDROID_NDK=~/Library/Android/sdk/ndk/

在 Linux 平台上为 Linux 编译 WebRTC SDK 准备

  1. 安装 Git。

  2. 安装 Python3。

  3. 安装 Python 2.7。

构建系统的大部分脚本需要 Python 3 来执行,但有少部分脚本仍然依赖 Python 2.7。

  1. 安装 depot_tools,并将其路径添加进 PATH 环境变量。

(1). 下载 depot_tools,如在 ~/bin 目录下:

bin $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

(2). 修改 ~/.bashrc,添加如下行:

export PATH=~/bin/depot_tools:$PATH
  1. 执行 webrtc/build/install-build-deps.sh 脚本安装其它依赖,如:
$ sudo bash webrtc/build/install-build-deps.sh

更多详情可参考 Prerequisite SoftwareChecking out and building Chromium on Linux 等。

在 Linux 平台上为 Android 编译 WebRTC SDK 准备

首先执行 在 Linux 平台上为 Linux 编译 WebRTC SDK 准备,然后为 Android 构建安装额外的工具。

  1. 安装 JDK 8
$ sudo apt-get install openjdk-8-jdk

修改 ~/.bashrc,添加环境变量 JAVA_8_HOME 指向 JDK 8 的安装路径,如:

export JAVA_8_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  1. 安装 JDK 11
$ sudo apt-get install openjdk-11-jdk

修改 ~/.bashrc,添加环境变量 JAVA_HOME 指向 JDK 11 的安装路径,如:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
  1. 安装 Android SDK

可通过 Android Studio 安装 Android SDK,修改 ~/.bashrc,添加环境变量 ANDROID_SDK 指向 Android SDK 的安装路径,如:

export ANDROID_SDK=~/data/tools/development_tools/android/Sdk
  1. 安装 Android NDK

可通过 Android Studio 安装 Android NDK,也可以直接下载 NDK 安装包,并修改 ~/.bashrc,添加环境变量 ANDROID_NDK 指向 Android NDK 的安装路径,Android NDK 的安装路径可以是具体的某个版本的 NDK 的安装路径,如:

export ANDROID_NDK=~/data/tools/development_tools/android/android-ndk-r21e

也可以是 Android Studio 的 NDK 集的路径,如:

export ANDROID_NDK=~/Library/Android/sdk/ndk/

在 Windows 平台上为 Windows 编译 WebRTC SDK 准备

1、 安装 depot_tools,并将 depot_tools 的路径设置到环境变量 PATH 中。设置到用户环境变量中就可以了,避免重启。安装请参考:depot_tools

2、使用管理员权限打开 cmd.ext,并执行 gclient(不带任何参数),第一次执行时,gclient将安装 msysgit 和 python 在内的 Windows相关的依赖。

3、 下载 Visual Studio 2019 社区版,用 visual studio 2019 的安装程序执行下面的命令,如:

 $ vs_community__de2da9e0d3114609b6724eaa8f0e96c4.exe ^
 --add Microsoft.VisualStudio.Workload.NativeDesktop ^
 --add Microsoft.VisualStudio.Component.VC.ATLMFC ^
 --add Microsoft.VisualStudio.Component.VC.Tools.ARM64 ^
 --add Microsoft.VisualStudio.Component.VC.MFC.ARM64 ^
 --includeRecommended

设置环境变量 vs2019_install 指向 Visual Studio 2019 的安装路径,如 set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community

4、在 windows 的程序和功能里找到 window software development kit,选中后点上面的更改,把 debugging tools for windows 前面的勾打上。

4.1 打开 "控制面板",选择 "程序",然后点击 "程序和功能"。你也可以在开始菜单中直接搜索 "程序和功能"。

4.2 在程序列表中找到 "Windows Software Development Kit",点击它,然后点击上面的 "更改" 按钮。

4.3 这将启动 Windows SDK 的安装程序,在这个程序中,你可以选择或取消选择 SDK 的各种组件。找到 "Debugging Tools for Windows",并在前面的复选框中打上勾。

4.4 点击 "更改" 或 "安装" 按钮,安装程序将会安装或更新你选择的组件。

5、另外需要添加两个环境变量

DEPOT_TOOLS_WIN_TOOLCHAIN=0
WINDOWSSDKDIR=c:\Program Files (x86)\Windows Kits\10

其中 WINDOWSSDKDIR 需要只想 Windows 10 SDK 的安装路径,请按自己的实际情况来。

webrtc_build 命令的基本使用

  1. clone OpenRTCClient,如:
 % git clone git@github.com:hanpfei/OpenRTCClient.git
  1. 进入 OpenRTCClient 目录,并切换到 OpenRTCClient 的 m98_4758 branch,如:
OpenRTCClient %  git checkout -t origin/m98_4758
  1. 将 OpenRTCClient/build_system 的路径添加进环境变量 PATH 里

webrtc_build 命令的用法如下:

OpenRTCClient % webrtc_build 

Must provide build_command in command line.

Usage: webrtc_build command[:target] target_os target_cpu [build_type] [build_options_set] [dir] [generator]
	 command:      gen|build|clean|info
	 target_os:    win|mac|ios|android|linux
	 target_cpu:   x86|x64|arm|arm64
	 build_type:   debug|release, by default is release
	 options_set:  build_options_set name you want to build, by default the file name is "default.conf"
	 dir:          output directory, by default "build" dir under current directory
	 generator     cmake|make|vs|xcode

It is strongly recommended that you put "~/OpenRTCClient/build_system"
into your system environment variable PATH so that you can run webrtc_build anywhere
  1. 执行 gen

如在 OpenRTCClient 目录下执行:

webrtc_build gen win x64 debug
  1. 执行 build

如在 OpenRTCClient 目录下执行:

webrtc_build build win x64 debug

或者,如对于 Android,在 OpenRTCClient 目录下执行:

//1. 生成配置
webrtc_build gen android arm64 debug
//2. 开启本地编译服务
python3 webrtc/build/android/fast_local_dev_server.py
//开始编译
webrtc_build build:webrtc android arm64 debug

生成的二进制文件将位于 OpenRTCClient/build 目录下,如对于 Windows 来说,位于 OpenRTCClient/build/win/x64/debug 目录下。

编译生成的静态库位于 OpenRTCClient/build/win/x64/debug/obj 目录下。

对于 iOS:

如编译报错

  1. ../../../../../webrtc/third_party/ffmpeg/libavutil/macros.h:28:10: fatal error: 'libavutil/avconfig.h' file not found
cd webrtc/third_party/ffmpeg/

 ./configure
  1. 配置签名,不然会导致安装失败
#1. gen 之后 ,在 args.gn 上配置如下信息
ios_enable_code_signing = true
ios_code_signing_identity = ""
#2. Bundle Identifier & info.list 修改保持一致
<key>CFBundleIdentifier</key>
<string>xxx.xxx</string>
  1. Xcode 14 - Cannot code sign because the target does not have an Info.plist file
Select Build Settings --> Packaging --> Generate info.plist File = info.plist 绝对路径
% webrtc_build gen ios arm64 debug
% webrtc_build build:webrtc ios arm64 debug

生成的静态库为 OpenRTCClient/build/ios/arm64/debug/obj/libwebrtc.a

为 iOS 和 Mac 生成多架构静态库包

为 iOS 和 Mac 生成多架构静态库包可以通过 webrtc_pack 命令实现。在这个命令中,将自动通过 gnninja 为多个架构编译生成静态库和动态库,并通过 libtoollipo 等工具生成包含多个架构的目标文件的静态库文件。

webrtc_pack 命令的用法如下:

Usage: webrtc_pack target_os build_type
     target_os:    win|mac|ios|android|linux
     build_type:   debug|release, by default is release

如,为 iOS 生成 debug 版的包:

% webrtc_pack ios debug

生成的静态库的包将位于 build/ios/debug/libwebrtc.a