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
相关推荐
薄荷椰果抹茶8 小时前
计算机导论_第6章_笔记
笔记·ffmpeg
FlightYe1 天前
FFmpeg移动端硬解机制
linux·网络·ffmpeg·音视频·实时音视频·视频编解码
小殊小殊2 天前
一文速通GPU版FFmpeg视频转码的安装使用
ffmpeg·音视频·视频编解码
blanks20206 天前
ffmpeg 学习笔记 通过命令行采集音频
ffmpeg
Mahut10 天前
我用 Electron + FFmpeg 做了一个本地视频处理工作站 ClipForge
前端·ffmpeg·electron
源之缘-OFD先行者19 天前
破界渲染:WinForm下的FFmpeg+Vortice极速推流引擎
ffmpeg·winform·推流·h264
源来猿往19 天前
记ffmpeg-8.1.1 之Android库编译(window)
android·ffmpeg
Deitymoon19 天前
RV1126+FFMPEG多路码流监控项目
ffmpeg·音视频
芝麻别开门19 天前
GStreamer DASH Demux 知识文档
ffmpeg·dash
ltlovezh20 天前
ROI 编码学习指南:Android 与 FFmpeg 的真实实现边界
android·ffmpeg·音视频开发