北向应用使用webrtc二进制文件
简介
北向应用集成webrtc的方法除了通过源码方式集成,也可以直接集成已交叉编译好的二进制文件。本文主要介绍如何将二进制文件集成到应用中。
注意:集成到北向应用的二进制文件必须是通过OpenHarmony的SDK交叉编译生成的,不能是通过rom方式编译生成的。
集成方法
交叉编译webrtc
交叉编译的方法可以参照文档webrtc_adapter_ohos.md
获取webrtc头文件
进入webrtc目录,执行下面shell脚本
#!/bin/bash
mkdir include
src=`find ./ -name "*.h*"`
for obj in $src
do
echo "$src"
cp --parents $obj ./include
done
include目录即是webrtc所需头文件
应用中调用webrtc
-
将webrtc生成的二进制文件拷贝到应用工程目录
为了更好的管理应用集成的ohos_webrtc,在应用工程的cpp目录新建一个thirdparty目录,将生成的二进制文件以及头文件拷贝到该目录下,如下图所示,ohos_webrtc代表的是三方库名称,ohos_webrtc文件夹下包含了arm架构以后aarch64架构2种方式生成的二进制文件,每种架构目录下包含了该库的头文件(include)以及二进制文件(lib):

-
配置相关参数
配置相关参数只需要在cpp目录的CMakeLists.txt文件中添加
set(CMAKE_CXX_STANDARD 17) set(WEBRTC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/ohos_webrtc/${OHOS_ARCH}/include) -
配置对应链接
配置链接只需要在cpp目录的CMakeLists.txt文件中添加对应
target_link_libraries即可:- 配置静态库链接
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/ohos_webrtc/${OHOS_ARCH}/lib/libwebrtc.a) -
配置头文件路径
配置链接只需要在cpp目录的CMakeLists.txt文件中添加对应
target_include_directoriestarget_compile_definitions(entry PUBLIC -DWEBRTC_POSIX) target_include_directories(entry PUBLIC ${WEBRTC_PATH}) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/abseil-cpp) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/boringssl) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/catapult) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/crc32c) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/dav1d) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/ffmpeg) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/fontconfig) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/fuzztest) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/google_benchmark) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/googletest) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/harfbuzz-ng) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/icu) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/jsoncpp) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libaom) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/catapult) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libc++) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libc++abi) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libevent) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libjpeg_turbo) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libpng) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libsrtp) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libvpx) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/libyuv/include) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/llvm-build) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/nasm) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/openh264) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/opus) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/pffft) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/protobuf) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/re2) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/rnnoise) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/zlib) target_include_directories(entry PUBLIC ${WEBRTC_PATH}/third_party/jsoncpp/source/include) -
编译构建
请参考文档DevEco Studio编译构建指南