diff --git a/.gitmodules b/.gitmodules index 95b683f..90ee42b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,8 @@ [submodule "taoyao-client-android/libmediasoupclient"] path = taoyao-client-android/libmediasoupclient url = https://gitee.com/acgist/libmediasoupclient.git +[submodule "taoyao-client-openharmony/libmediasoupclient"] + + path = taoyao-client-openharmony/libmediasoupclient + + url = https://gitee.com/acgist/libmediasoupclient.git diff --git a/docs/WebRTC-build.md b/docs/WebRTC-build.md new file mode 100644 index 0000000..e5c2a5a --- /dev/null +++ b/docs/WebRTC-build.md @@ -0,0 +1,442 @@ +# WebRTC编译 + +包含各种原生编译产生以及配置 + +## 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 + +# 交叉编译 +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" +``` diff --git a/taoyao-client-openharmony/README.md b/taoyao-client-openharmony/README.md index 9425f2b..7e0e771 100644 --- a/taoyao-client-openharmony/README.md +++ b/taoyao-client-openharmony/README.md @@ -2,7 +2,7 @@ ## 支持版本 -* SDK 9 +* SDK 11 ## C++终端 @@ -12,8 +12,16 @@ ## 项目配置 +可以自己编译`WebRTC`依赖或者下载已有依赖,项目导入以后拷贝`libmediasoupclient`源码还有`WebRTC`头文件和库文件到`deps`目录。 + +[WebRTC](https://pan.baidu.com/s/1E_DXv32D9ODyj5J-o-ji_g?pwd=hudc) + +> 注意删除目录`build`目录和`third_party`目录中除了`abseil-cpp`以外的所有依赖(当然不删也没关系就是文件太多编译器会变慢) + * https://gitee.com/openharmony-sig/ohos_webrtc/blob/master/doc/webrtc_build.md +## 鸿蒙编译 + ``` # WebRTC版本:m114 # libmediasoupclient版本:m120 @@ -33,464 +41,3 @@ ninja -C ./out/ohos_webrtc -j 32 * 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" -``` diff --git a/taoyao-client-openharmony/libmediasoupclient b/taoyao-client-openharmony/libmediasoupclient new file mode 160000 index 0000000..48768ba --- /dev/null +++ b/taoyao-client-openharmony/libmediasoupclient @@ -0,0 +1 @@ +Subproject commit 48768ba90dee235e045e8dfbf364365504e2c4ce diff --git a/taoyao-client-openharmony/taoyao/media/src/main/cpp/bind.cpp b/taoyao-client-openharmony/taoyao/media/src/main/cpp/bind.cpp index 0057f92..ece8bcb 100644 --- a/taoyao-client-openharmony/taoyao/media/src/main/cpp/bind.cpp +++ b/taoyao-client-openharmony/taoyao/media/src/main/cpp/bind.cpp @@ -107,8 +107,8 @@ void send(const std::string& signal, const std::string& body) { napi_value callback = nullptr; napi_get_reference_value(env, acgist::sendRef, &callback); napi_value data[2]; - napi_create_string_utf8(acgist::env, signal.c_str(), NAPI_AUTO_LENGTH, &data[0]); - napi_create_string_utf8(acgist::env, body.c_str(), NAPI_AUTO_LENGTH, &data[1]); + napi_create_string_utf8(acgist::env, signal.data(), NAPI_AUTO_LENGTH, &data[0]); + napi_create_string_utf8(acgist::env, body.data(), NAPI_AUTO_LENGTH, &data[1]); napi_call_function(acgist::env, nullptr, callback, 2, data, &ret); // napi_get_undefined(acgist::env, &ret); } @@ -121,8 +121,8 @@ std::string request(const std::string& signal, const std::string& body) { napi_value callback = nullptr; napi_get_reference_value(env, acgist::requestRef, &callback); napi_value data[2]; - napi_create_string_utf8(acgist::env, signal.c_str(), NAPI_AUTO_LENGTH, &data[0]); - napi_create_string_utf8(acgist::env, body.c_str(), NAPI_AUTO_LENGTH, &data[1]); + napi_create_string_utf8(acgist::env, signal.data(), NAPI_AUTO_LENGTH, &data[0]); + napi_create_string_utf8(acgist::env, body.data(), NAPI_AUTO_LENGTH, &data[1]); napi_call_function(acgist::env, nullptr, callback, 2, data, &ret); char chars[2048]; size_t length; @@ -175,6 +175,7 @@ static napi_value roomInvite(napi_env env, napi_callback_info info) { napi_get_value_string_utf8(env, args[0], chars, sizeof(chars), &length); nlohmann::json json = nlohmann::json::parse(chars); nlohmann::json body = json["body"]; + // TODO: 试试引用 std::string roomId = body["roomId"]; std::string password = body["password"]; napi_value ret; @@ -182,7 +183,7 @@ static napi_value roomInvite(napi_env env, napi_callback_info info) { std::lock_guard guard(roomMutex); auto iterator = roomMap.find(roomId); if(iterator == roomMap.end()) { - OH_LOG_INFO(LOG_APP, "进入房间:%s", roomId.c_str()); + OH_LOG_INFO(LOG_APP, "进入房间:%s", roomId.data()); auto room = new acgist::Room(roomId, mediaManager); roomMap[roomId] = room; int enterRet = room->enter(password); @@ -191,7 +192,7 @@ static napi_value roomInvite(napi_env env, napi_callback_info info) { } napi_create_int32(env, enterRet, &ret); } else { - OH_LOG_INFO(LOG_APP, "已经进入房间:%s", roomId.c_str()); + OH_LOG_INFO(LOG_APP, "已经进入房间:%s", roomId.data()); napi_create_int32(env, -1, &ret); } } diff --git a/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/Room.cpp b/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/Room.cpp index 681f4ee..cef92f4 100644 --- a/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/Room.cpp +++ b/taoyao-client-openharmony/taoyao/media/src/main/cpp/media/Room.cpp @@ -84,8 +84,8 @@ int acgist::Room::enter(const std::string& password) { requestBody = { { "roomId", this->roomId }, { "password", password }, - { "rtpCapabilities", this->device->GetRtpCapabilities().dump() }, - { "sctpCapabilities", this->device->GetSctpCapabilities().dump() } + { "rtpCapabilities", this->device->GetRtpCapabilities() }, + { "sctpCapabilities", this->device->GetSctpCapabilities() } }; response = acgist::request("room::enter", requestBody.dump()); OH_LOG_INFO(LOG_APP, "进入房间:%s", this->roomId.data());