背景
在鲲鹏 920 服务器(64 核 / 256GB 内存)部署视频转码服务,处理 H.264 编码任务。同样参数下,x86 服务器转码 1080p 视频速度是 2x(两倍于实时),鲲鹏上只有 0.8x,无法满足业务需求。
第一次尝试:直接安装系统包
perf top 显示热点在 x264_pixel_sad_16x16 等函数,都是 C 语言实现。
第二次尝试:启用 x264 NEON 优化
测试结果:1.5x 速度,有提升但仍不如 x86。
突破点:发现 OpenMAX 硬件编码
鲲鹏 920 支持通过 OpenMAX 调用硬件视频编码器,绕过 CPU 软编码。
最终配置
根据场景选择编码方式:
总结
鲲鹏视频转码的关键是软硬结合:x264 NEON 优化适合质量敏感场景,OpenMAX 硬件编码适合吞吐优先场景。不要直接照搬 x86 的纯软编码思路,鲲鹏的硬件加速能力是被低估的优势。
背景
在鲲鹏 920 服务器(64 核 / 256GB 内存)部署视频转码服务,处理 H.264 编码任务。同样参数下,x86 服务器转码 1080p 视频速度是 2x(两倍于实时),鲲鹏上只有 0.8x,无法满足业务需求。
第一次尝试:直接安装系统包
perf top显示热点在x264_pixel_sad_16x16等函数,都是 C 语言实现。第二次尝试:启用 x264 NEON 优化
# 下载 x264 源码 git clone https://code.videolan.org/videolan/x264.git cd x264 # 配置时显式启用 ARM NEON ./configure --prefix=/usr/local/x264-neon \ --enable-shared \ --enable-static \ --enable-strip \ --enable-pic \ --enable-lto \ --cross-prefix=aarch64-linux-gnu- \ --host=aarch64-linux-gnu # 关键:确保 NEON 被启用 grep -r "HAVE_ARMV8" config.h # #define HAVE_ARMV8 1 # #define HAVE_NEON 1 make -j$(nproc) make install ``` 重新编译 FFmpeg 链接优化版 x264: ```bash cd ffmpeg-6.0 ./configure --prefix=/usr/local/ffmpeg-neon \ --enable-gpl \ --enable-libx264 \ --extra-cflags="-I/usr/local/x264-neon/include" \ --extra-ldflags="-L/usr/local/x264-neon/lib" \ --arch=aarch64 \ --enable-neon \ --enable-lto make -j$(nproc) make install测试结果:1.5x 速度,有提升但仍不如 x86。
突破点:发现 OpenMAX 硬件编码
鲲鹏 920 支持通过 OpenMAX 调用硬件视频编码器,绕过 CPU 软编码。
# 检查硬件编码器支持 ffmpeg -hwaccels # 输出包含:v4l2m2m # 使用硬件编码 ffmpeg -hwaccel v4l2m2m \ -i input.mp4 \ -c:v h264_v4l2m2m \ -b:v 4M \ output.mp4 # 结果:4.2x 速度!远超 x86 软编码最终配置
根据场景选择编码方式:
#!/bin/bash # transcode.sh - 自适应转码脚本 INPUT=$1 OUTPUT=$2 QUALITY=${3:-high} # high/medium/low if [ "$QUALITY" = "high" ]; then # 高质量:x264 NEON 软编码 ffmpeg -i "$INPUT" \ -c:v libx264 \ -preset slow \ -crf 18 \ -c:a copy \ "$OUTPUT" elif [ "$QUALITY" = "medium" ]; then # 平衡:硬件编码 + 质量调整 ffmpeg -hwaccel v4l2m2m \ -i "$INPUT" \ -c:v h264_v4l2m2m \ -b:v 6M \ -c:a copy \ "$OUTPUT" else # 快速:硬件编码最低质量 ffmpeg -hwaccel v4l2m2m \ -i "$INPUT" \ -c:v h264_v4l2m2m \ -b:v 2M \ -c:a copy \ "$OUTPUT" fi总结
鲲鹏视频转码的关键是软硬结合:x264 NEON 优化适合质量敏感场景,OpenMAX 硬件编码适合吞吐优先场景。不要直接照搬 x86 的纯软编码思路,鲲鹏的硬件加速能力是被低估的优势。