497 lines
15 KiB
Markdown
497 lines
15 KiB
Markdown
# 桃夭终端
|
||
|
||
## 支持版本
|
||
|
||
* SDK 9
|
||
|
||
## C++终端
|
||
|
||
* [libmediasoupclient源码](https://github.com/versatica/libmediasoupclient)
|
||
* [libmediasoupclient文档](https://mediasoup.org/documentation/v3/libmediasoupclient)
|
||
* [libmediasoupclient接口](https://mediasoup.org/documentation/v3/libmediasoupclient/api)
|
||
|
||
## 项目配置
|
||
|
||
* https://gitee.com/openharmony-sig/ohos_webrtc/blob/master/doc/webrtc_build.md
|
||
|
||
```
|
||
# WebRTC版本:m114
|
||
# libmediasoupclient版本:m120
|
||
|
||
gn gen ./out/ohos_webrtc --args='target_os="ohos" target_cpu="arm64" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=false rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false libyuv_include_tests=false rtc_use_dummy_audio_file_devices=true ohos_sdk_native_root="/data/dev/ohos-sdk/linux/native"'
|
||
|
||
ninja -C ./out/ohos_webrtc -j 32
|
||
```
|
||
|
||
## openharmony-sig/ohos_webrtc
|
||
|
||
* https://gitee.com/openharmony-sig/ohos_webrtc
|
||
* https://gitee.com/openharmony-sig/ohos_webrtc/tree/master/doc
|
||
|
||
## openharmony-tpc/chromium_third_party_webrtc
|
||
|
||
* https://gitee.com/openharmony-tpc
|
||
* https://gitee.com/openharmony-tpc/chromium_third_party_webrtc
|
||
* https://gitee.com/openharmony-tpc/chromium_third_party_ohos_prebuilts
|
||
|
||
## Linux(鸿蒙)
|
||
|
||
```
|
||
# 编译工具
|
||
mkdir -p /data
|
||
cd /data
|
||
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||
|
||
# 下载源码
|
||
mkdir -p /data/webrtc
|
||
cd /data/webrtc
|
||
/data/depot_tools/fetch --nohooks webrtc
|
||
#/data/depot_tools/gclient sync
|
||
|
||
# 切换分支
|
||
cd src
|
||
git checkout -b m94 branch-heads/4606
|
||
/data/depot_tools/gclient sync
|
||
|
||
# 编译依赖
|
||
./build/install-build-deps.sh
|
||
|
||
# 鸿蒙工具
|
||
wget https://repo.huaweicloud.com/openharmony/os/4.0-Release/ohos-sdk-windows_linux-public.tar.gz
|
||
|
||
# 编译项目
|
||
./buildtools/linux64/gn gen out/Release-clang-x64 --args='target_os="linux" target_cpu="x64" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=true rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false'
|
||
./third_party/depot_tools/ninja -C out/Release-clang-x64
|
||
|
||
./buildtools/linux64/gn gen out/Release-clang-x86 --args='target_os="linux" target_cpu="x86" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=true rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false'
|
||
./third_party/depot_tools/ninja -C out/Release-clang-x86
|
||
|
||
./build/linux/sysroot_scripts/install-sysroot.py --arch=arm
|
||
./buildtools/linux64/gn gen out/Release-clang-arm --args='target_os="linux" target_cpu="arm" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=true rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false'
|
||
./third_party/depot_tools/ninja -C out/Release-clang-arm
|
||
|
||
./build/linux/sysroot_scripts/install-sysroot.py --arch=arm64
|
||
./buildtools/linux64/gn gen out/Release-clang-arm64 --args='target_os="linux" target_cpu="arm64" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=true rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false'
|
||
./third_party/depot_tools/ninja -C out/Release-clang-arm64
|
||
```
|
||
|
||
# 国产
|
||
|
||
> https://blog.csdn.net/oqqKuKu12/article/details/136029483
|
||
|
||
## aarch64
|
||
|
||
```
|
||
# 安装交叉编译工具链
|
||
sudo apt-get install binutils-aarch64-linux-gnu
|
||
sudo apt-get install gcc-7-aarch64-linux-gnu
|
||
sudo apt-get install g++-7-aarch64-linux-gnu
|
||
cd /usr/bin
|
||
sudo ln -s aarch64-linux-gnu-gcc-7 aarch64-linux-gnu-gcc
|
||
sudo ln -s aarch64-linux-gnu-g++-7 aarch64-linux-gnu-g++
|
||
|
||
# 源码安装交叉工具依赖库
|
||
cd webrtc/build/linux/sysroot_scripts
|
||
./install-sysroot.py --arch=arm64
|
||
|
||
# 交叉编译
|
||
gn gen out/Release-aarch64 --args='
|
||
target_os="linux"
|
||
target_cpu="arm64"
|
||
is_clang=false
|
||
is_debug=false
|
||
use_rtti=true
|
||
rtc_use_h264=true
|
||
use_custom_libcxx=false
|
||
rtc_include_tests=false
|
||
is_component_build=false
|
||
treat_warnings_as_errors=false
|
||
rtc_build_examples=false
|
||
symbol_level=0
|
||
rtc_use_x11=true
|
||
rtc_build_ssl=true
|
||
rtc_build_tools=false
|
||
rtc_use_pipewire=true
|
||
rtc_enable_protobuf=false
|
||
rtc_include_pulse_audio=false
|
||
ffmpeg_branding="Chrome"
|
||
proprietary_codecs=true
|
||
use_partition_alloc=false
|
||
'
|
||
|
||
ninja -C out/Release-aarch64
|
||
```
|
||
|
||
## mips64el
|
||
|
||
```
|
||
# 安装交叉编译工具链
|
||
sudo apt-get install binutils-mips64el-linux-gnu
|
||
sudo apt-get install gcc-7-mips64el-linux-gnu
|
||
sudo apt-get install g++-7-mips64el-linux-gnu
|
||
cd /usr/bin
|
||
sudo ln -s mips64el-linux-gnu-gcc-7 mips64el-linux-gnu-gcc
|
||
sudo ln -s mips64el-linux-gnu-g++-7 mips64el-linux-gnu-g++
|
||
|
||
# 源码安装交叉工具依赖库
|
||
cd webrtc/build/linux/sysroot_scripts
|
||
./install-sysroot.py --arch=mips64el
|
||
|
||
# 交叉编译
|
||
gn gen out/Release-mips64el --args='
|
||
target_os="linux"
|
||
target_cpu="mips64el"
|
||
is_clang=false
|
||
is_debug=false
|
||
use_rtti=true
|
||
rtc_use_h264=true
|
||
use_custom_libcxx=false
|
||
rtc_include_tests=false
|
||
is_component_build=false
|
||
treat_warnings_as_errors=false
|
||
rtc_build_examples=false
|
||
symbol_level=0
|
||
rtc_use_x11=true
|
||
rtc_build_ssl=true
|
||
rtc_build_tools=false
|
||
rtc_use_pipewire=true
|
||
rtc_enable_protobuf=false
|
||
ffmpeg_branding="Chrome"
|
||
proprietary_codecs=true
|
||
use_partition_alloc=false
|
||
'
|
||
|
||
ninja -C out/Release-mips64el
|
||
```
|
||
|
||
## loongarch64
|
||
|
||
```
|
||
# 安装交叉编译工具链
|
||
cd /opt/cross_compile/loongarch64
|
||
wget http://ftp.loongnix.cn/toolchain/gcc/release/loongarch/gcc8/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.2.tar.xz
|
||
xz loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.2.tar.xz
|
||
|
||
# 配置WebRTC添加平台支持
|
||
cd build/toolchain/linux
|
||
vim BUILD.gn
|
||
gcc_toolchain("loongarch64") {
|
||
toolprefix = "loongarch64-linux-gnu-"
|
||
cc = "${toolprefix}gcc -w"
|
||
cxx= "${toolprefix}g++ -w"
|
||
ar = "${toolprefix}ar"
|
||
ld = cxx
|
||
readelf = "${toolprefix}readelf"
|
||
nm = "${toolprefix}nm"
|
||
|
||
toolchain_args = {
|
||
cc_wrapper = ""
|
||
current_cpu = "loongarch64"
|
||
current_os = "linux"
|
||
is_clang = false
|
||
use_goma = false
|
||
}
|
||
}
|
||
|
||
# 配置环境和sysroot
|
||
vim ~/.profile
|
||
export PATH=$PATH:/opt/cross_compile/loongarch64/usr/bin
|
||
export SYSROOT="/opt/cross_compile/loongarch64/usr/sysroot"
|
||
export CPATH=$CPATH:${SYSROOT}/usr/include:${SYSROOT}/usr/include/glib-2.0:${SYSROOT}/usr/lib/glib-2.0/include:${SYSROOT}/usr/include/gio-unix-2.0
|
||
. ~/.profile
|
||
|
||
target_os="linux"
|
||
target_cpu="mips64el"
|
||
is_clang=false
|
||
is_debug=false
|
||
use_rtti=true
|
||
rtc_use_h264=true
|
||
use_custom_libcxx=false
|
||
rtc_include_tests=false
|
||
is_component_build=false
|
||
treat_warnings_as_errors=false
|
||
rtc_build_examples=false
|
||
symbol_level=0
|
||
rtc_use_x11=true
|
||
rtc_build_ssl=true
|
||
rtc_build_tools=false
|
||
rtc_use_pipewire=true
|
||
rtc_enable_protobuf=false
|
||
ffmpeg_branding="Chrome"
|
||
proprietary_codecs=true
|
||
use_partition_alloc=false
|
||
'
|
||
|
||
# 交叉编译
|
||
gn gen out/Release-loongarch64 --args='
|
||
target_os="linux"
|
||
target_cpu="loongarch64"
|
||
is_clang=false
|
||
is_debug=false
|
||
use_rtti=true
|
||
rtc_use_h264=true
|
||
use_custom_libcxx=false
|
||
rtc_include_tests=false
|
||
is_component_build=false
|
||
treat_warnings_as_errors=false
|
||
rtc_build_examples=false
|
||
symbol_level=0
|
||
rtc_use_x11=true
|
||
rtc_build_ssl=true
|
||
rtc_build_tools=false
|
||
rtc_use_pipewire=false
|
||
rtc_enable_protobuf=false
|
||
ffmpeg_branding="Chrome"
|
||
proprietary_codecs=true
|
||
use_partition_alloc=false
|
||
'
|
||
|
||
ninja -C out/Release-loongarch64
|
||
```
|
||
|
||
# Build command for all platforms
|
||
|
||
> https://github.com/webrtc-sdk/webrtc-build/blob/main/docs/build.md
|
||
|
||
## iOS arm
|
||
|
||
```bash
|
||
gn gen out/ios-arm-device --args="
|
||
target_os = \"ios\"
|
||
ios_enable_code_signing = false
|
||
use_xcode_clang = true
|
||
is_component_build = false
|
||
target_environment = \"device\"
|
||
target_cpu = \"arm\"
|
||
ios_deployment_target = \"10.0\"
|
||
enable_ios_bitcode = false
|
||
use_goma = false
|
||
rtc_enable_symbol_export = true
|
||
rtc_libvpx_build_vp9 = true
|
||
rtc_include_tests = false
|
||
rtc_build_examples = false
|
||
rtc_use_h264 = false
|
||
rtc_enable_protobuf = false
|
||
use_rtti = true
|
||
is_debug = false
|
||
enable_dsyms = false
|
||
enable_stripping = true"
|
||
|
||
ninja -C out/ios-arm-device ios_framework_bundle
|
||
```
|
||
|
||
## iOS arm64
|
||
|
||
```bash
|
||
gn gen out/ios-arm64-device --args="
|
||
target_os = \"ios\"
|
||
ios_enable_code_signing = false
|
||
use_xcode_clang = true
|
||
is_component_build = false
|
||
target_environment = \"device\"
|
||
target_cpu = \"arm64\"
|
||
ios_deployment_target = \"10.0\"
|
||
enable_ios_bitcode = false
|
||
use_goma = false
|
||
rtc_enable_symbol_export = true
|
||
rtc_libvpx_build_vp9 = true
|
||
rtc_include_tests = false
|
||
rtc_build_examples = false
|
||
rtc_use_h264 = false
|
||
rtc_enable_protobuf = false
|
||
use_rtti = true
|
||
is_debug = false
|
||
enable_dsyms = false
|
||
enable_stripping = true"
|
||
|
||
ninja -C out/ios-arm64-device ios_framework_bundle
|
||
```
|
||
|
||
## iOS x64 simulator
|
||
|
||
```bash
|
||
gn gen out/ios-x64-simulator --args="
|
||
target_os = \"ios\"
|
||
ios_enable_code_signing = false
|
||
use_xcode_clang = true
|
||
is_component_build = false
|
||
target_environment = \"simulator\"
|
||
target_cpu = \"x64\"
|
||
ios_deployment_target = \"12.0\"
|
||
rtc_libvpx_build_vp9 = true
|
||
enable_ios_bitcode = false
|
||
use_goma = false
|
||
rtc_enable_symbol_export = true
|
||
rtc_libvpx_build_vp9 = true
|
||
rtc_include_tests = false
|
||
rtc_build_examples = false
|
||
rtc_use_h264 = false
|
||
rtc_enable_protobuf = false
|
||
use_rtti = true
|
||
is_debug = false
|
||
enable_dsyms = false
|
||
enable_stripping = true"
|
||
|
||
ninja -C out/ios-x64-simulator ios_framework_bundle
|
||
```
|
||
|
||
## iOS arm64 simulator
|
||
|
||
```bash
|
||
gn gen out/ios-arm64-simulator --args="
|
||
target_os = \"ios\"
|
||
ios_enable_code_signing = false
|
||
use_xcode_clang = true
|
||
is_component_build = false
|
||
target_environment = \"simulator\"
|
||
target_cpu = \"arm64\"
|
||
ios_deployment_target = \"12.0\"
|
||
enable_ios_bitcode = false
|
||
use_goma = false
|
||
rtc_enable_symbol_export = true
|
||
rtc_libvpx_build_vp9 = true
|
||
rtc_include_tests = false
|
||
rtc_build_examples = false
|
||
rtc_use_h264 = false
|
||
rtc_enable_protobuf = false
|
||
use_rtti = true
|
||
is_debug = false
|
||
enable_dsyms = false
|
||
enable_stripping = true"
|
||
|
||
ninja -C out/ios-arm64-simulator ios_framework_bundle
|
||
```
|
||
|
||
## macOS X64
|
||
|
||
```bash
|
||
gn gen out/macOS-x64 --args="
|
||
target_os=\"mac\"
|
||
target_cpu=\"x64\"
|
||
use_xcode_clang = false
|
||
mac_deployment_target=\"10.11\"
|
||
is_component_build = false
|
||
target_cpu = \"x64\"
|
||
use_goma = false
|
||
rtc_enable_symbol_export = true
|
||
rtc_libvpx_build_vp9 = true
|
||
rtc_include_tests = false
|
||
rtc_build_examples = false
|
||
rtc_use_h264 = false
|
||
rtc_enable_protobuf = false
|
||
use_rtti = true
|
||
is_debug = false
|
||
enable_dsyms = false
|
||
enable_stripping = true"
|
||
|
||
ninja -C out/macOS-x64 mac_framework_bundle
|
||
```
|
||
|
||
## macOS arm64
|
||
|
||
```bash
|
||
gn gen out/macOS-arm64 --args="
|
||
target_os=\"mac\"
|
||
target_cpu=\"x64\"
|
||
use_xcode_clang = false
|
||
mac_deployment_target=\"10.11\"
|
||
is_component_build = false
|
||
target_cpu = \"arm64\"
|
||
use_goma = false
|
||
rtc_enable_symbol_export = true
|
||
rtc_libvpx_build_vp9 = true
|
||
rtc_include_tests = false
|
||
rtc_build_examples = false
|
||
rtc_use_h264 = false
|
||
rtc_enable_protobuf = false
|
||
use_rtti = true
|
||
is_debug = false
|
||
enable_dsyms = false
|
||
enable_stripping = true"
|
||
|
||
ninja -C out/macOS-arm64 mac_framework_bundle
|
||
```
|
||
|
||
## Create xcframework
|
||
|
||
Merge the arm64 and x64 libraries of macOS.
|
||
|
||
```bash
|
||
mkdir -p out/mac-x64-arm64-lib
|
||
cp -R out/macOS-x64/WebRTC.framework out/mac-x64-arm64-lib/WebRTC.framework
|
||
lipo -create -output out/mac-x64-arm64-lib/WebRTC.framework/WebRTC out/macOS-x64/WebRTC.framework/WebRTC out/macOS-arm64/WebRTC.framework/WebRTC
|
||
```
|
||
|
||
Merge the arm64 and arm libraries of iOS.
|
||
|
||
```bash
|
||
mkdir -p out/ios-device-arm-arm64-lib
|
||
cp -R out/ios-arm64-device/WebRTC.framework out/ios-device-arm-arm64-lib/WebRTC.framework
|
||
lipo -create -output out/ios-device-arm-arm64-lib/WebRTC.framework/WebRTC out/ios-arm-device/WebRTC.framework/WebRTC out/ios-arm64-device/WebRTC.framework/WebRTC
|
||
```
|
||
|
||
Merge the arm64 and x64 libraries of iOS simulator.
|
||
|
||
```bash
|
||
mkdir -p out/ios-simulator-arm64-x64-lib
|
||
cp -R out/ios-arm64-simulator/WebRTC.framework out/ios-simulator-arm64-x64-lib/WebRTC.framework
|
||
lipo -create -output out/ios-simulator-arm64-x64-lib/WebRTC.framework/WebRTC out/ios-arm64-simulator/WebRTC.framework/WebRTC out/ios-x64-simulator/WebRTC.framework/WebRTC
|
||
```
|
||
|
||
Create xcframework
|
||
|
||
```bash
|
||
xcodebuild -create-xcframework \
|
||
-framework out/ios-device-arm-arm64-lib/WebRTC.framework \
|
||
-framework out/ios-simulator-arm64-x64-lib/WebRTC.framework \
|
||
-framework out/mac-x64-arm64-lib/WebRTC.framework \
|
||
-output out/WebRTC.xcframework
|
||
cp LICENSE out/WebRTC.xcframework/
|
||
```
|
||
|
||
Fix symbolic links issue for macOS
|
||
|
||
```
|
||
cd out/WebRTC.xcframework/macos-arm64_x86_64/WebRTC.framework/
|
||
mv WebRTC Versions/A/WebRTC
|
||
ln -s Versions/Current/WebRTC WebRTC
|
||
```
|
||
|
||
Create a release zip file
|
||
|
||
```
|
||
cd out/
|
||
zip --symlinks -9 -r WebRTC.xcframework.zip WebRTC.xcframework
|
||
# hash
|
||
shasum -a 256 WebRTC.xcframework.zip
|
||
```
|
||
|
||
## Android
|
||
|
||
```bash
|
||
vpython ./tools_webrtc/android/build_aar.py --build-dir webrtc_android --output ./webrtc_android/libwebrtc.aar --arch armeabi-v7a arm64-v8a x86_64 x86 --extra-gn-args 'is_java_debug=false rtc_include_tests=false rtc_use_h264=false is_component_build=false use_rtti=true rtc_build_examples=false treat_warnings_as_errors=false'
|
||
```
|
||
|
||
## Linux
|
||
|
||
```bash
|
||
gn gen out/Linux-x64 --args="target_os=\"linux\" target_cpu=\"x64\" is_debug=false rtc_include_tests=false rtc_use_h264=false is_component_build=false use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false"
|
||
gn gen out/Linux-x86 --args="target_os=\"linux\" target_cpu=\"x86\" is_debug=false rtc_include_tests=false rtc_use_h264=false is_component_build=false use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false"
|
||
```
|
||
|
||
## Linux ARM/ARM64
|
||
|
||
```bash
|
||
gn gen out/Linux-arm --args="target_os=\"linux\" target_cpu=\"arm\" is_debug=false rtc_include_tests=false rtc_use_h264=false is_component_build=false use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false"
|
||
gn gen out/Linux-arm64 --args="target_os=\"linux\" target_cpu=\"arm64\" is_debug=false rtc_include_tests=false rtc_use_h264=false is_component_build=false use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false"
|
||
|
||
```
|
||
|
||
## Windows
|
||
|
||
```console
|
||
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
|
||
gn gen out/Windows-x64 --args="target_os=\"win\" target_cpu=\"x64\" is_debug=false rtc_include_tests=false rtc_use_h264=true ffmpeg_branding=\"Chrome\" is_component_build=false use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false"
|
||
gn gen out/Windows-x86 --args="target_os=\"win\" target_cpu=\"x86\" is_debug=false rtc_include_tests=false rtc_use_h264=true ffmpeg_branding=\"Chrome\" is_component_build=false use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false"
|
||
```
|