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

1万+

被折叠的 条评论
为什么被折叠?



