前言

在移植工程中,若采用鸿蒙原生 API 重构音频解码模块,不仅开发周期长,还会增加额外工作量。考虑到项目仅涉及音频软解、无需硬解功能,直接编译适配鸿蒙系统的 FFmpeg,成为实现功能最快、成本最低的方案。为记录这一高效解决方案的完整流程,并为有相似需求的开发者提供参考,特此撰写本文。


一、准备工作

在编译之前还有一些准备工作:

  • 下载 鸿蒙辅助编译库
    git clone https://gitee.com/zhong-luping/tpc_c_cplusplus.git
    git 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中的rtmpdumpopenssl_1_0_2u依赖
      • 同时删除第79行中的--enable-librtmp --enable-openssl --enable-protocols
    • 修改downloadpackagefalse
    • 修改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文件夹,这里是默认的安装路径,可以在这里找到includelib文件夹,库就在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 ]
    ...
}
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐