【鸿蒙之路】在鸿蒙上使用FFmpeg
摘要:本文介绍了在鸿蒙系统中快速集成FFmpeg音频解码功能的方案。通过使用鸿蒙辅助编译库和交叉编译工具链,直接编译适配FFmpeg源码,避免了原生API重构的高成本。详细说明了编译前的准备工作、参数配置方法、编译步骤以及项目集成方式,并提供了常见问题的解决方案。该方案显著降低了开发成本,为鸿蒙系统音频处理功能开发提供了高效的技术路径。
·
前言
在移植工程中,若采用鸿蒙原生 API 重构音频解码模块,不仅开发周期长,还会增加额外工作量。考虑到项目仅涉及音频软解、无需硬解功能,直接编译适配鸿蒙系统的 FFmpeg,成为实现功能最快、成本最低的方案。为记录这一高效解决方案的完整流程,并为有相似需求的开发者提供参考,特此撰写本文。
一、准备工作
在编译之前还有一些准备工作:
- 下载 鸿蒙辅助编译库
git clone https://gitee.com/zhong-luping/tpc_c_cplusplus.gitgit checkout -b fix_other origin/fix_other - 下载 鸿蒙SDK 文章中使用的是linux的SDK
- 下载 ffmpeg 源码,下载完成后将压缩包放到
your_path/tpc_c_cplusplus/thirdparty/FFmpeg路径下面
二、使用鸿蒙交叉编译工具链编译
1.编译前的准备
- 修改tpc_c_cplusplus项目下的thirdparty/FFmpeg/HPKBUILD文件
- 将pkgname修改为和下载的压缩包一致 如ffmpeg
- 将pkgver修改为需要的FFmpeg版本 如8.0
- 修改架构archs 如archs=(“arm64-v8a”)
- 如果下载的不是tar.gz后缀的压缩包,将19行的packagename后缀修改一致
- 我这里不需要推流的功能直接删除了depends中的rtmpdump和openssl_1_0_2u依赖
- 同时删除第79行中的
--enable-librtmp --enable-openssl --enable-protocols
- 同时删除第79行中的
- 修改downloadpackage为false
- 修改buildhost修改为false
- 将第22行的arch赋值为指定的架构 如arch=aarch64
- 在第79行中添加
--disable-programs
因为使用的wsl编译的,而编译的目标是arm64的,它们的架构是不一样的。所以加上–disable-programs跳过fftools的编译。
- 配置SDK路径
export OHOS_SDK=鸿蒙SDK路径/sdk/default/openharmony - 配置cmake路径
export PATH=鸿蒙SDK路径/sdk/default/openharmony/native/build-tools/cmake/bin:$PATH
- 如果内存小于64G推荐把tpc_c_cplusplus项目下的lycium/build.sh中的export MAKE=“make -j32” 和 export Ninja=“ninja -j32” 修改为 -j8
2.编译
cd lycium
./build.sh FFmpeg
脚本后面的参数为对应的第三方库名
三、使用
编译完成后会在lycium目录下生成一个usr文件夹,这里是默认的安装路径,可以在这里找到include和lib文件夹,库就在lib文件夹下面。
- 复制动态库到 项目根目录/项目主目录/libs/arm64-v8a 文件夹下
- 在 项目根目录/项目主目录/src/main/cpp 文件夹下创建一个 ffmpeg 文件夹,把ffmpeg头文件复制到这里
- 修改 cpp 文件夹下的 CMakeLists.txt
target_include_directories(项目名 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg/include) set(ffmpeg_libs ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libavcodec.so.62 ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libavdevice.so.62 ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libavfilter.so.11 ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libavformat.so.62 ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libavutil.so.60 ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libswresample.so.6 ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libswscale.so.9 ${NATIVERENDER_ROOT_PATH}/../../../libs/${OHOS_ARCH}/libonnxruntime.so.1) target_link_libraries(项目名 PRIVATE ${OHOS_DYLIBS} ${ffmpeg_libs})
四、遇到的问题
- 如果是在windows平台使用wsl进行编译的话,注意git clone应该在wsl中使用,否则wsl在执行build.sh时会报错:
-bash: ./build.sh: cannot execute: required file not found - 校验和校验失败:
SHA512SUM 校验失败, 请确认 SHA512SUM 无误后, 重新编译,修改tpc_c_cplusplus/lycium/script/build_hpk.sh脚本中第66、67行:
checksum() {
#sha512sum -c ${PWD}/$1
#ret=$?
ret=0 #新增
if [ $ret -ne 0 ]
...
}
更多推荐



所有评论(0)