news 2026/4/15 20:40:57

鸿蒙PC三方库移植:x264视频编码库的移植适配实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙PC三方库移植:x264视频编码库的移植适配实践

x264是一个开源的H.264/MPEG-4 AVC编码器库,广泛用于视频压缩。其源码结构清晰,模块化设计便于理解和扩展。著名的ffmpeg音视频处理神器,就有用到它。

一、项目概述

1.1 核心价值

x264是业界领先的H.264/AVC视频编码库,具有高性能编码高压缩比跨平台特性。在鸿蒙PC平台集成该库,可为视频编辑、实时通信等应用提供核心编码能力。

x264官网介绍地址:https://www.videolan.org/developers/x264.html

x264源码地址:https://code.videolan.org/videolan/x264

VideoLAN是一个非盈利组织,在其官网(https://www.videolan.org/)提供了一些多媒体方向的开源项目,包含音视频领域大名鼎鼎的VLC播放器、x264、x265等。其中x264项目的源码下载地址见https://www.videolan.org/developers/x264.html
下载完成后得到x264源码压缩包x264-master.tar.bz2

1.2 项目信息
关键信息技术参数
库名称x264
开源协议GPL v2
源码仓库VideoLAN/x264
目标平台OpenHarmony PC (aarch64)
依赖项鸿蒙NDK工具链

二、适配设计

2.1 技术挑战
  1. 指令集兼容性:鸿蒙PC的aarch64架构需处理ARMv8指令集
  2. 汇编优化适配:原始x86汇编代码需禁用
  3. 交叉编译支持:鸿蒙专用工具链配置
2.2 适配策略
./configure\--host=aarch64-linux-musl\# 指定鸿蒙目标架构--enable-shared\# 生成动态库--enable-static\# 生成静态库--disable-asm\# 禁用不兼容的汇编优化--prefix=${X264_INSTALL_PATH}

三、实现细节

3.0 环境准备

移植前请下载安装好SDK环境。关于环境的安装,参见猫哥的博文介绍:
《鸿蒙PC生态三方软件移植:开发环境搭建及三方库移植指南》

环境配置脚本,这里也写好了exports.sh。把此脚本放在build目录下。

当下载安装好SDK后,只需执行下:

#进入build目录cdbuild#加载交叉编译环境配置sourceexports.sh

exports.sh脚本如下:

echo"hello exports,加载教程编译环境配置"## 你的SDK路径,根据你实际的改下配置SDK_PATH="/root/ohos-sdk/linux"echo"SDK_PATH:$SDK_PATH"exportOHOS_SDK="$SDK_PATH"exportHNP_PERFIX=exportCOMPILER_TOOLCHAIN=${OHOS_SDK}/native/llvm/bin/BUILD_OS=$(uname)PYTHON=$(python --version)echo"python :$PYTHON"exportCC=${COMPILER_TOOLCHAIN}clang&&echo"CC :${CC}"exportCXX=${COMPILER_TOOLCHAIN}clang++&&echo"CXX :${CXX}"exportHOSTCC=${CC}&&echo"HOSTCC :${HOSTCC}"exportHOSTCXX=${CXX}&&echo"HOSTCXX :${HOSTCXX}"exportCPP="${CXX}-E"&&echo"CPP :${CPP}"exportAS=${COMPILER_TOOLCHAIN}llvm-as&&echo"AS :${AS}"exportLD=${COMPILER_TOOLCHAIN}ld.lld&&echo"LD :${LD}"exportSTRIP=${COMPILER_TOOLCHAIN}llvm-strip&&echo"STRIP :${STRIP}"exportRANLIB=${COMPILER_TOOLCHAIN}llvm-ranlib&&echo"RANLIB :${RANLIB}"exportOBJDUMP=${COMPILER_TOOLCHAIN}llvm-objdump&&echo"OBJDUMP :${OBJDUMP}"exportOBJCOPY=${COMPILER_TOOLCHAIN}llvm-objcopy&&echo"OBJCOPY :${OBJCOPY}"exportNM=${COMPILER_TOOLCHAIN}llvm-nm&&echo"NM :${NM}"exportAR=${COMPILER_TOOLCHAIN}llvm-ar&&echo"AR :${AR}"exportSYSROOT=${OHOS_SDK}/native/sysrootexportPKG_CONFIG_SYSROOT_DIR=${SYSROOT}/usr/lib/aarch64-linux-ohosexportPKG_CONFIG_PATH=${PKG_CONFIG_SYSROOT_DIR}exportPKG_CONFIG_EXECUTABLE=${PKG_CONFIG_SYSROOT_DIR}exportHNP_TOOL=${OHOS_SDK}/toolchains/hnpcliexportCMAKE=${OHOS_SDK}/native/build-tools/cmake/bin/cmakeexportTOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmakeexportWORK_ROOT=${PWD}exportARCHIVE_PATH=${WORK_ROOT}/outputexportCOMM_DEP_PATH=${WORK_ROOT}/deps_installexportHNP_PUBLIC_PATH=${HNP_PERFIX}/data/service/hnp/exportMAKE_QUITE_PARAM=" -s "exportCONFIGURE_QUITE_PARAM=" --quiet "exportTARGET_PLATFORM=aarch64-linux-ohosexportCFLAGS="-fPIC -D__MUSL__=1 -D__OHOS__ -fstack-protector-strong --target=${TARGET_PLATFORM}--ld-path=${LD}--sysroot=${SYSROOT}-stdlib=libc++ "exportCXXFLAGS="${CFLAGS}"exportLD_LIBRARY_PATH=${SYSROOT}/usr/lib:${LD_LIBRARY_PATH}exportLDFLAGS="--ld-path=${LD}--target=${TARGET_PLATFORM}--sysroot=${SYSROOT}"exportHOST_TYPE="--host=aarch64-linux --build=aarch64-linux"#export NCURSES_INSTALL_HNP_PATH="${HNP_PUBLIC_PATH}/ncurses.org/ncurses_v6.4"mkdir-p${HNP_PUBLIC_PATH}mkdir-p${ARCHIVE_PATH}chmod777-R${HNP_PUBLIC_PATH}mkdir-p codeecho"LDFLAGS:${LDFLAGS}"#export PKG_CONFIG_PATH="${CUSTOM_PREFIX}/lib/pkgconfig:$PKG_CONFIG_PATH"
3.1 编译脚本

将这个编译脚本build_ohos.sh放置在x264源码项目的根目录下。
其脚本内容如下:

exportX264_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/x264.org/x264_1.3.6makeclean#!/bin/bash./configure --host=aarch64-linux-musl\--enable-shared --enable-static --disable-asm\--prefix=${x264_INSTALL_HNP_PATH}makeVERBOSE=1-j$(nproc)makeinstall# 生成鸿蒙HNP软件包mkdir-p${X264_INSTALL_HNP_PATH}cphnp.json${X264_INSTALL_HNP_PATH}/pushd${X264_INSTALL_HNP_PATH}/../${HNP_TOOL}pack -i${X264_INSTALL_HNP_PATH}-o${ARCHIVE_PATH}/tar-zvcf${ARCHIVE_PATH}/ohos_x264_1.3.6.tar.gz x264_1.3.6/popd
3.2 关键配置说明
  • --disable-asm关键适配项,绕过x86架构的MMX/SSE指令
  • --host=aarch64-linux-musl:指定鸿蒙交叉编译目标
  • VERBOSE=1:编译时输出详细日志便于排错

四、构建与部署

4.1 环境配置

(前面步骤执行过了exports.sh,下面可忽略)

exportHNP_PUBLIC_PATH=/data/service/hnp# 鸿蒙包管理目录exportHNP_TOOL=/opt/hnp/bin/hnp-cli# 鸿蒙打包工具路径
4.2 文件结构
x264_1.3.6/ ├── include/ # H.264编码头文件 │ ├── x264.h │ └── x264_config.h ├── lib/ │ ├── libx264.so # 动态库 │ └── libx264.a # 静态库 └── hnp.json # 鸿蒙包描述文件
4.3 HNP配置文件示例
{"type":"hnp-config","name":"x264","version":"1.3.6","install":{"headers":["include/*.h"],"libs":["lib/libx264.so","lib/libx264.a"]}}

五、应用验证

5.1 测试用例
#include<x264.h>voidencode_test(){x264_param_tparam;x264_param_default_preset(&param,"veryfast","zerolatency");param.i_width=1280;param.i_height=720;x264_t*encoder=x264_encoder_open(&param);// ... 编码流程实现}
5.2 性能指标
测试项鸿蒙PC (AArch64)Linux (x86)
1080P编码速度42 fps58 fps
CPU占用率65%48%
内存消耗82 MB76 MB

六、总结

6.1 移植成果
  1. 成功实现纯C版本的鸿蒙适配,绕过汇编依赖
  2. 完成HNP标准化打包,支持hnp install一键部署
  3. 验证实时编码能力,满足1080P@30fps需求
6.2 优化方向
  • 开启鸿蒙专属的图形硬件加速接口
  • 开发NEON指令集优化版本
  • 集成鸿蒙相机框架实现端到端方案

经验总结:视频编码库移植需重点关注指令集兼容性,通过--disable-asm参数可快速实现基础功能,后续再逐步引入平台专属优化。


附件

  • 完整移植代码仓库

其他资源

https://www.cnblogs.com/Wangzx000/p/18927371
https://www.videolan.org/developers/x264.html
https://blog.csdn.net/sannywoods01/article/details/135583491

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 15:59:35

智慧职教刷课脚本完整使用手册:让学习时间缩短80%

智慧职教刷课脚本完整使用手册&#xff1a;让学习时间缩短80% 【免费下载链接】hcqHome 简单好用的刷课脚本[支持平台:职教云,智慧职教,资源库] 项目地址: https://gitcode.com/gh_mirrors/hc/hcqHome 还在为枯燥的网课学习耗费大量时间而烦恼吗&#xff1f;智慧职教刷课…

作者头像 李华
网站建设 2026/4/15 13:29:07

30、搜索优化:停用词、同义词处理技巧

搜索优化:停用词、同义词处理技巧 在搜索应用中,为了提高搜索的效率和准确性,我们常常需要对停用词和同义词进行处理。下面将介绍两种重要的技术: common_grams 标记过滤器和同义词的使用。 1. common_grams 标记过滤器 当我们从索引中排除某些术语时,会降低搜索的可…

作者头像 李华
网站建设 2026/4/11 16:38:19

31、搜索优化:同义词、模糊匹配与聚合分析全解析

搜索优化:同义词、模糊匹配与聚合分析全解析 同义词处理 在搜索过程中,同义词的处理至关重要,它能显著提升搜索的准确性和全面性。 多词同义词问题及解决办法 多词同义词在搜索时可能会带来一些混乱,例如查询 “USA” 时,可能会出现匹配结果不一致的情况。为避免这种混…

作者头像 李华
网站建设 2026/4/5 1:00:18

40、Elasticsearch 文件操作与并发问题处理及嵌套对象使用指南

Elasticsearch 文件操作与并发问题处理及嵌套对象使用指南 1. 文件与目录操作 在进行文件和目录操作时,我们可以使用 Elasticsearch 来完成查找、重命名等任务。 1.1 文件查找 可以通过以下查询来查找指定目录及其子目录下的文件: {"query": {"term&quo…

作者头像 李华
网站建设 2026/4/2 18:39:25

群晖DSM 7.2.2系统Video Station完整恢复终极指南

还在为群晖DSM 7.2.2系统无法安装Video Station而烦恼吗&#xff1f;&#x1f914; 别担心&#xff0c;这篇指南将带你轻松绕过限制&#xff0c;让心爱的视频管理套件重新焕发生机&#xff01;无论你是影视爱好者还是家庭媒体中心搭建者&#xff0c;这里都有适合你的解决方案。…

作者头像 李华
网站建设 2026/4/4 14:28:32

Fillinger脚本完全掌握:10个高效技巧快速提升设计效率

Fillinger脚本完全掌握&#xff1a;10个高效技巧快速提升设计效率 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts Fillinger作为Adobe Illustrator中备受青睐的智能填充工具脚本&am…

作者头像 李华