RK平台ffmpeg支持硬件编解码

1、下载ffmpeg-rockchip

https://github.com/nyanmisaka/ffmpeg-rockchip

2、编译

复制代码
#!/bin/bash
cd /media/extern_sdb/wzh/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin

# 为llvm-ar创建符号链接
ln -s llvm-ar armv7a-linux-androideabi21-ar
ln -s llvm-ranlib armv7a-linux-androideabi21-ranlib
ln -s llvm-nm armv7a-linux-androideabi21-nm
ln -s llvm-strip armv7a-linux-androideabi21-strip

# 验证
ls -l armv7a-linux-androideabi21-*

cd -
# =============================================
# 配置参数(根据你的实际路径修改)
# =============================================

# NDK 根目录(确认路径正确)
export NDK_ROOT=/media/extern_sdb/wzh/android-ndk-r27c

# 目标 Android API 版本
export API_LEVEL=21

# 目标架构 (armeabi-v7a)
export ARCH=arm
export CPU=armv7-a
export TARGET_ABI=armeabi-v7a

# 输出目录
export PREFIX=$(pwd)/android-build/${TARGET_ABI}

# =============================================
# 设置工具链路径(使用 Clang)
# =============================================

# Clang 工具链路径
export TOOLCHAIN=${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64

# 交叉编译前缀
export CROSS_PREFIX=${TOOLCHAIN}/bin/armv7a-linux-androideabi${API_LEVEL}-

# Sysroot 路径
export SYSROOT=${TOOLCHAIN}/sysroot


#export CFLAGS="-target armv7a-linux-androideabi${API_LEVEL} -march=${CPU} -mfpu=neon -mfloat-abi=softfp -fPIC -fPIE -pie -I${SYSROOT}/usr/include"
#export LDFLAGS="-pie -L${SYSROOT}/usr/lib/arm-linux-androideabi/${API_LEVEL}"


./configure \
--prefix=${PREFIX} \
--enable-cross-compile \
--cross-prefix=${CROSS_PREFIX} \
--sysroot=${SYSROOT} \
--target-os=android \
--arch=${ARCH} \
--cpu=${CPU} \
--enable-static \
--enable-pic \
--enable-small \
--disable-doc \
--enable-jni  \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-decoder=hevc_mediacodec \
--enable-encoder=h264_mediacodec \
--enable-encoder=hevc_mediacodec \
--extra-cflags="${CFLAGS}" \
--extra-ldflags="${LDFLAGS}"  || { echo "配置失败!"; exit 1; }


export CFLAGS="-target armv7a-linux-androideabi${API_LEVEL} -march=${CPU} -mfpu=neon -mfloat-abi=softfp -fPIC -fPIE -pie -I${SYSROOT}/usr/include -I/media/extern_sdb/wzh/rk3229_9.0/external/ffmpeg-4.2.2/x264/android-build/armeabi-v7a/include"
export LDFLAGS="-pie -L${SYSROOT}/usr/lib/arm-linux-androideabi/${API_LEVEL} -L/media/extern_sdb/wzh/rk3229_9.0/external/ffmpeg-4.2.2/x264/android-build/armeabi-v7a/lib"
#
#./configure \
#--prefix=${PREFIX} \
#--enable-cross-compile \
#--cross-prefix=${CROSS_PREFIX} \
#--sysroot=${SYSROOT} \
#--target-os=android \
#--arch=${ARCH} \
#--cpu=${CPU} \
#--enable-static \
#--enable-small \
#--disable-doc \
#--enable-encoder=copy \
#--extra-cflags="${CFLAGS}" \
#--extra-ldflags="${LDFLAGS}"  || { echo "配置失败!"; exit 1; }


# =============================================
# 编译和安装
# =============================================

make clean
make -j$(nproc) || { echo "编译失败!"; exit 1; }
make install || { echo "安装失败!"; exit 1; }

echo "编译成功!输出目录: ${PREFIX}"

3、命令

复制代码
(1)从usb摄像头取mjpeg流封装成avi视频,这是软件封装
./ffmpeg -f v4l2 -input_format mjpeg -video_size 1920x1080 -framerate 30 -i /dev/video0 \
       -t 5 -r 30 -c:v copy -y output30.avi  
(2)从摄像头取yuv流编成h264
ffmpeg -f v4l2 -input_format yuyv422 -video_size 640x480 -framerate 30 -i /dev/video0 \
       -vf "format=nv12" \
       -c:v h264_mediacodec \
       -b:v 3000k -maxrate 4000k -bufsize 6000k \
       -g 30 \
       -t 5 \
       -y output.mp4
(3)查看当前摄像头输出的分辨率
v4l2-ctl -d /dev/video0 --get-fmt-video --get-parm
(4)查看当前摄像头支持哪些分辨率
v4l2-ctl --list-formats-ext
(5)设置摄像头输出的分辨率
v4l2-ctl -d /dev/video0 \
    --set-fmt-video=width=640,height=480,pixelformat=YUYV \
    --set-parm=30
相关推荐
herb.dr1 天前
FFMPEG H264
ffmpeg
AJi1 天前
编解码原理(一):H264
ffmpeg·音视频开发·视频编码
linux开发之路2 天前
C++ 音视频开发常见面试题及答案汇总
c++·ffmpeg·音视频·流媒体·音视频编解码
默凉4 天前
ffmpeg 安装
ffmpeg
微瑟秋风5 天前
Python应用——ffmpeg处理音视频的常见场景
python·ffmpeg
WSSWWWSSW6 天前
警告:OPENCV_FFMPEG_READ_ATTEMPTS (current value is 4096)
人工智能·opencv·ffmpeg
A尘埃6 天前
FFmpeg音视频处理解决方案
ffmpeg·音视频
Industio_触觉智能6 天前
瑞芯微RK3576平台FFmpeg硬件编解码移植及性能测试实战攻略
ffmpeg·开发板·嵌入式开发·瑞芯微·视频解码·rk3576·rk3576j
Font Tian6 天前
FFmpeg 不同编码的压缩命令详解
ffmpeg·音视频·视频编解码·视频·视频压缩
Natsume17106 天前
音视频开发入门:FFmpeg vs GStreamer,新手该如何选择?
c语言·c++·ffmpeg·音视频·webrtc·实时音视频·视频编解码