rk3588编译ffmpeg踩坑

Wan2.2-I2V-A14B

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

rk3588编译ffmpeg

参考链接:
rk3588 ffmpeg硬编码安装
Ubuntu 编译安装支持 nvidia gpu 驱动的 FFMPEG
ffmpeg-rockchip官方编译指南

编译mpp

编译mpp时建议安装到系统目录,即cmake -DCMAKE_INSTALL_PREFIX=/usr,否则mpp的库不及时更新到系统会引起ffmpeg调用硬编码时发生段错误,参考官方编译指南下面的一段话。
在这里插入图片描述

cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release  -DBUILD_SHARED_LIBS=ON -DBUILD_TEST=OFF ..
# Build MPP
git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp
pushd rkmpp
mkdir rkmpp_build
pushd rkmpp_build
cmake \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=ON \
    -DBUILD_TEST=OFF \
    ..
make -j $(nproc)
make install

rk3588编译h265时报错:

cc1plus: error: invalid feature modifier ‘i8mm’ in ‘-march=armv8.2-a+dotprod+i8mm’
使用以下面命令编译通过

cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/build -DENABLE_SHARED=OFF -DENABLE_NEON_I8MM=OFF -DCMAKE_CXX_FLAGS="-march=armv8.2-a+dotprod"  -DCMAKE_C_FLAGS="-march=armv8.2-a+dotprod" ../../source

编译ffmpeg时报错:

#1.
ERROR: libdrm not found using pkg-config
#安装libdrm-dev解决

sudo apt install libdrm-dev

#2.
/usr/bin/ld: libavdevice/libavdevice.so: undefined reference to ff_alsa_muxer
/usr/bin/ld: libavdevice/libavdevice.so: undefined reference to ff_alsa_demuxer
#安装libasound2-dev解决

sudo apt-get install libasound2-dev

#对应的执行configure时要加入
--enable-alsa

env PKG_CONFIG_PATH=../x264/build/lib/pkgconfig:../x265/build/linux/build/lib/pkgconfig:../rkmpp/rkmpp_build/install/lib/pkgconfig ./configure --prefix=install --enable-alsa --enable-gpl --enable-nonfree --enable-pthreads --extra-libs=-lpthread   --disable-asm --disable-x86asm --disable-inline-asm   --enable-decoder=aac --enable-decoder=aac_fixed --enable-decoder=aac_latm --enable-encoder=aac   --enable-libx264 --enable-libx265   --enable-version3 --enable-libdrm --enable-rkmpp --enable-shared --pkg-config-flags='--static'

#2.
ERROR: rockchip_mpp >= 1.3.9 not found using pkg-config
#指定rkmpp pkgconfig路径解决

env PKG_CONFIG_PATH=../x264/build/lib/pkgconfig:../x265/build/linux/build/lib/pkgconfig:../rkmpp/rkmpp_build/install/lib/pkgconfig ./configure --prefix=install --enable-gpl --enable-nonfree --enable-pthreads --extra-libs=-lpthread   --disable-asm --disable-x86asm --disable-inline-asm   --enable-decoder=aac --enable-decoder=aac_fixed --enable-decoder=aac_latm --enable-encoder=aac   --enable-libx264 --enable-libx265   --enable-version3 --enable-libdrm --enable-rkmpp --enable-shared --pkg-config-flags='--static'

ffmpeg安装完成之后

ln -s /home/rk_ffmpeg/ffmpeg/install/bin/ffmpeg /usr/bin/ffmpeg
ln -s /home/rk_ffmpeg/ffmpeg/install/bin/ffprobe /usr/bin/ffprobe
ln -s /home/rk_ffmpeg/ffmpeg/install/bin/ffmpeg /usr/local/bin/ffmpeg
ln -s /home/rk_ffmpeg/ffmpeg/install/bin/ffprobe /usr/local/bin/ffprobe
echo "/home/rk_ffmpeg/ffmpeg/install/lib" >> /etc/ld.so.conf.d/ffmpeg.conf
#更新环境变量
ldconfig

验证

# 查看编码、解码器
ffmpeg -decoders | grep rkmpp
ffmpeg -encoders | grep rkmpp
# 或查看h264、265
ffmpeg configure -codecs | grep h264
ffmpeg configure -codecs | grep hevc

测试

#以下命令生成纯零帧(无摄像头输入),正常生成说明ffmpeg能够正常使用
ffmpeg -f rawvideo -pix_fmt nv12 -s 1280x720 -i /dev/zero -frames:v 30 -c:v h264_rkmpp out.h264 -y
ffmpeg -f rawvideo -pix_fmt nv12 -s 1280x720 -i /dev/zero -frames:v 30 -c:v hevc_rkmpp out.h264 -y

#插入usb摄像头测试
#软编码libx264
ffmpeg -f v4l2 -framerate 30 -i /dev/video0 -c:v libx264 -r 25 -b:v 1000k -minrate 1000k -maxrate 1000k -bufsize 2048k -preset veryfast -tune zerolatency -f rtsp rtsp://192.168.144.200:8555/usb
#硬编码h264_rkmpp(h264)
ffmpeg -f v4l2 -framerate 30 -i /dev/video0 -c:v h264_rkmpp -r 25 -b:v 1000k -minrate 1000k -maxrate 1000k -bufsize 2048k -preset veryfast -tune zerolatency -f rtsp rtsp://192.168.144.200:8555/usb
#硬编码hevc_rkmpp(h265)
ffmpeg -f v4l2 -framerate 30 -i /dev/video0 -c:v hevc_rkmpp -r 25 -b:v 1000k -minrate 1000k -maxrate 1000k -bufsize 2048k -preset veryfast -tune zerolatency -f rtsp rtsp://192.168.144.200:8555/usb

全部过程

#x264
git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --enable-shared --enable-static --disable-asm
make -j &(nproc)
make install
 
root@firefly:/home/rk_ffmpeg/x264# make install
install -d /usr/local/bin
install x264 /usr/local/bin
install -d /usr/local/include
install -d /usr/local/lib/pkgconfig
install -m 644 ./x264.h x264_config.h /usr/local/include
install -m 644 x264.pc /usr/local/lib/pkgconfig
install -d /usr/local/lib
ln -f -s libx264.so.165 /usr/local/lib/libx264.so
install -m 755 libx264.so.165 /usr/local/lib
install -d /usr/share/bash-completion/completions
install -m 644 ./tools/bash-autocomplete.sh /usr/share/bash-completion/completions/x264
root@firefly:/home/rk_ffmpeg/x264# ldconfig



#x265
git clone https://bitbucket.org/multicoreware/x265_git.git ~/git/x265_git
cd ~/git/x265_git/build/linux
cmake -DENABLE_SHARED=ON -DENABLE_NEON_I8MM=OFF -DCMAKE_CXX_FLAGS="-march=armv8.2-a+dotprod"  -DCMAKE_C_FLAGS="-march=armv8.2-a+dotprod" ../../source
make -j$(nproc)
sudo make install
sudo ldconfig  # 刷新系统的动态库缓存

Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/lib/libx265.a
-- Installing: /usr/local/include/x265.h
-- Installing: /usr/local/include/x265_config.h
-- Installing: /usr/local/lib/libx265.so.215
-- Installing: /usr/local/lib/libx265.so
-- Installing: /usr/local/lib/pkgconfig/x265.pc
-- Installing: /usr/local/bin/x265
-- Set runtime path of "/usr/local/bin/x265" to ""

#mpp

git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp
pushd rkmpp
mkdir rkmpp_build
pushd rkmpp_build
cmake \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=ON \
    -DBUILD_TEST=OFF \
    ..
make -j $(nproc)
make install

-- Install configuration: "Release"
-- Up-to-date: /usr/include/rockchip
-- Up-to-date: /usr/include/rockchip/mpp_rc_api.h
-- Up-to-date: /usr/include/rockchip/mpp_task.h
-- Up-to-date: /usr/include/rockchip/rk_mpp_cfg.h
-- Up-to-date: /usr/include/rockchip/mpp_buffer.h
-- Up-to-date: /usr/include/rockchip/mpp_sys_cfg_st.h
-- Up-to-date: /usr/include/rockchip/mpp_log.h
-- Up-to-date: /usr/include/rockchip/rk_type.h
-- Up-to-date: /usr/include/rockchip/rk_venc_rc.h
-- Up-to-date: /usr/include/rockchip/rk_venc_kcfg.h
-- Up-to-date: /usr/include/rockchip/rk_venc_cfg.h
-- Up-to-date: /usr/include/rockchip/mpp_packet.h
-- Up-to-date: /usr/include/rockchip/rk_venc_cmd.h
-- Up-to-date: /usr/include/rockchip/mpp_compat.h
-- Up-to-date: /usr/include/rockchip/vpu_api.h
-- Up-to-date: /usr/include/rockchip/rk_venc_ref.h
-- Up-to-date: /usr/include/rockchip/rk_vdec_cfg.h
-- Up-to-date: /usr/include/rockchip/rk_vdec_cmd.h
-- Up-to-date: /usr/include/rockchip/rk_mpi.h
-- Up-to-date: /usr/include/rockchip/mpp_err.h
-- Up-to-date: /usr/include/rockchip/rk_mpi_cmd.h
-- Up-to-date: /usr/include/rockchip/rk_hdr_meta_com.h
-- Up-to-date: /usr/include/rockchip/mpp_rc_defs.h
-- Up-to-date: /usr/include/rockchip/mpp_frame.h
-- Up-to-date: /usr/include/rockchip/vpu.h
-- Up-to-date: /usr/include/rockchip/mpp_meta.h
-- Up-to-date: /usr/include/rockchip/mpp_log_def.h
-- Up-to-date: /usr/include/rockchip/mpp_sys_cfg.h
-- Installing: /usr/lib/aarch64-linux-gnu/pkgconfig/rockchip_mpp.pc
-- Installing: /usr/lib/aarch64-linux-gnu/pkgconfig/rockchip_vpu.pc
-- Installing: /usr/lib/aarch64-linux-gnu/librockchip_mpp.so.0
-- Up-to-date: /usr/lib/aarch64-linux-gnu/librockchip_mpp.so.1
-- Up-to-date: /usr/lib/aarch64-linux-gnu/librockchip_mpp.so
-- Installing: /usr/lib/aarch64-linux-gnu/librockchip_vpu.so.0
-- Up-to-date: /usr/lib/aarch64-linux-gnu/librockchip_vpu.so.1
-- Set runtime path of "/usr/lib/aarch64-linux-gnu/librockchip_vpu.so.0" to ""
-- Up-to-date: /usr/lib/aarch64-linux-gnu/librockchip_vpu.so

#rkrga
git clone -b jellyfin-rga --depth=1 https://github.com/nyanmisaka/rk-mirrors.git rkrga
meson setup rkrga rkrga_build \
    --prefix=/usr \
    --libdir=lib \
    --buildtype=release \
    --default-library=shared \
    -Dcpp_args=-fpermissive \
    -Dlibdrm=false \
    -Dlibrga_demo=false
meson configure rkrga_build
ninja -C rkrga_build install

Installing librga.so.2.1.0 to /usr/lib
Installing /home/rk_ffmpeg/rkrga/include/rga.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/include/drmrga.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/include/GrallocOps.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/include/RockchipRga.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/include/RgaMutex.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/include/RgaSingleton.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/include/RgaUtils.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/include/RgaApi.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d.hpp to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d_type.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d_version.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d_buffer.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d_common.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d_single.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d_task.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d_mpi.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga/im2d_api/im2d_expand.h to /usr/include/rga
Installing /home/rk_ffmpeg/rkrga_build/meson-private/librga.pc to /usr/lib/pkgconfig

#ffmpeg
git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg
cd ffmpeg
env PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/lib/pkgconfig ./configure \
  --prefix=/usr/local \
  --enable-gpl \
  --enable-nonfree \
  --enable-pthreads \
  --extra-cflags="-I/usr/local/include" \
  --extra-ldflags="-L/usr/local/lib" \
  --extra-libs="-lpthread -lm -lstdc++ -lnuma -ldl" \
  --disable-asm \
  --disable-x86asm \
  --disable-inline-asm \
  --enable-decoder=aac \
  --enable-decoder=aac_fixed \
  --enable-decoder=aac_latm \
  --enable-encoder=aac \
  --enable-libx264 \
  --enable-libx265 \
  --enable-version3 \
  --enable-libdrm \
  --enable-rkmpp \
  --enable-shared
make -j &(nproc)
make install




您可能感兴趣的与本文相关的镜像

Wan2.2-I2V-A14B

Wan2.2-I2V-A14B

图生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值