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 MPPgit clone-b jellyfin-mpp--depth=1https://github.com/nyanmisaka/mpp.git rkmpppushd 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 installrk3588编译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、265ffmpeg configure-codecs|grep h264 ffmpeg configure-codecs|grep hevc测试
#以下命令生成纯零帧(无摄像头输入),正常生成说明ffmpeg能够正常使用 ffmpeg-f rawvideo-pix_fmt nv12-s1280x720-i/dev/zero-frames:v30-c:v h264_rkmpp out.h264-y ffmpeg-f rawvideo-pix_fmt nv12-s1280x720-i/dev/zero-frames:v30-c:v hevc_rkmpp out.h264-y #插入usb摄像头测试 #软编码libx264 ffmpeg-f v4l2-framerate30-i/dev/video0-c:v libx264-r25-b:v1000k-minrate1000k-maxrate1000k-bufsize2048k-preset veryfast-tune zerolatency-f rtsp rtsp://192.168.144.200:8555/usb#硬编码h264_rkmpp(h264) ffmpeg-f v4l2-framerate30-i/dev/video0-c:v h264_rkmpp-r25-b:v1000k-minrate1000k-maxrate1000k-bufsize2048k-preset veryfast-tune zerolatency-f rtsp rtsp://192.168.144.200:8555/usb#硬编码hevc_rkmpp(h265) ffmpeg-f v4l2-framerate30-i/dev/video0-c:v hevc_rkmpp-r25-b:v1000k-minrate1000k-maxrate1000k-bufsize2048k-preset veryfast-tune zerolatency-f rtsp rtsp://192.168.144.200:8555/usb全部过程
#x264git clone https://code.videolan.org/videolan/x264.gitcd x264./configure--enable-shared--enable-static--disable-asmmake-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-m644./x264.h x264_config.h/usr/local/include install-m644x264.pc/usr/local/lib/pkgconfig install-d/usr/local/lib ln-f-s libx264.so.165/usr/local/lib/libx264.so install-m755libx264.so.165/usr/local/lib install-d/usr/share/bash-completion/completions install-m644./tools/bash-autocomplete.sh/usr/share/bash-completion/completions/x264 root@firefly:/home/rk_ffmpeg/x264# ldconfig#x265git clone https://bitbucket.org/multicoreware/x265_git.git ~/rk_ffmpeg/x265cd~/rk_ffmpeg/x265/build/linux # 清理之前的错误缓存 rm-rf CMakeCache.txt CMakeFiles/# 重新配置 cmake-DENABLE_SHARED=ON \-DENABLE_CLI=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""#执行完毕后,使用 find/usr/local-name"x265.pc"确认文件已生成 find/usr/local-name"x265.pc"#mppgit clone-b jellyfin-mpp--depth=1https://github.com/nyanmisaka/mpp.git rkmpppushd 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#rkrgagit clone-b jellyfin-rga--depth=1https://github.com/nyanmisaka/rk-mirrors.git rkrgameson setup rkrga rkrga_build \--prefix=/usr \--libdir=lib \--buildtype=release \--default-library=shared \-Dcpp_args=-fpermissive \-Dlibdrm=false\-Dlibrga_demo=falsemeson configure rkrga_build ninja-C rkrga_build install Installing librga.so.2.1.0to/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#ffmpeggit clone--depth=1https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpegcd 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