5. 安装带硬编码版本的ffmpeg¶
通过apt安装的ffmpeg不带硬件编解码,需要自行编译专为Rockchip平台设计的ffmpeg分支,以支持硬件加速视频处理,包括MPP硬件编码器、解码器,以及RGA滤镜加速。
提示
只有鲁班猫4/5系列的Ubuntu22/24系统默认安装了带硬编码版本的ffmpeg,其他板卡及系统都需要自行编译安装。
源码仓库位于GitHub,如果访问GitHub困难也可访问资料网盘/6-开发软件/ffmpeg.tar.gz获取源码。
5.1. 安装依赖¶
在板卡执行以下命令,安装依赖:
1 2 | sudo apt update
sudo apt install git meson cmake pkg-config gcc libasound2-dev libdrm-dev ninja-build libv4l-dev -y
|
5.2. 编译MPP库¶
在板卡执行以下命令,编译MPP库:
1 2 3 4 5 6 | mkdir -p ~/ffmpeg && cd ~/ffmpeg
git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp
mkdir -p rkmpp/rkmpp_build && cd rkmpp/rkmpp_build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DBUILD_TEST=OFF ..
sudo make -j$(nproc)
sudo make install
|
5.3. 编译RGA库¶
在板卡执行以下命令,编译RGA库:
1 2 3 4 5 | mkdir -p ~/ffmpeg && cd ~/ffmpeg
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 -Dcpp_args=-fpermissive -Dlibdrm=false -Dlibrga_demo=false
meson configure rkrga_build
sudo ninja -C rkrga_build install
|
5.4. 编译ffmpeg-rockchip¶
在板卡执行以下命令,编译ffmpeg-rockchip:
1 2 3 4 5 6 | mkdir -p ~/ffmpeg && cd ~/ffmpeg
git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg-rockchip
cd ffmpeg-rockchip
./configure --prefix=/usr --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga --enable-alsa --enable-libv4l2
make -j$(nproc)
sudo make install
|
安装完成后验证支持情况:
查看rkmpp解码器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #查看rkmpp解码器
ffmpeg -decoders | grep rkmpp
#信息打印如下
ffmpeg version 2eb0b5d Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04)
configuration: --prefix=/usr --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga --enable-alsa --enable-libv4l2
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
V..... av1_rkmpp Rockchip MPP (Media Process Platform) AV1 decoder (codec av1)
V..... h263_rkmpp Rockchip MPP (Media Process Platform) H263 decoder (codec h263)
V..... h264_rkmpp Rockchip MPP (Media Process Platform) H264 decoder (codec h264)
V..... hevc_rkmpp Rockchip MPP (Media Process Platform) HEVC decoder (codec hevc)
V..... mjpeg_rkmpp Rockchip MPP (Media Process Platform) MJPEG decoder (codec mjpeg)
V..... mpeg1_rkmpp Rockchip MPP (Media Process Platform) MPEG1VIDEO decoder (codec mpeg1video)
V..... mpeg2_rkmpp Rockchip MPP (Media Process Platform) MPEG2VIDEO decoder (codec mpeg2video)
V..... mpeg4_rkmpp Rockchip MPP (Media Process Platform) MPEG4 decoder (codec mpeg4)
V..... vp8_rkmpp Rockchip MPP (Media Process Platform) VP8 decoder (codec vp8)
V..... vp9_rkmpp Rockchip MPP (Media Process Platform) VP9 decoder (codec vp9)
|
查看rkmpp编码器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #查看rkmpp编码器
ffmpeg -encoders | grep rkmpp
#信息打印如下
ffmpeg version 2eb0b5d Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04)
configuration: --prefix=/usr --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga --enable-alsa --enable-libv4l2
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
V..... h264_rkmpp Rockchip MPP (Media Process Platform) H264 encoder (codec h264)
V..... hevc_rkmpp Rockchip MPP (Media Process Platform) HEVC encoder (codec hevc)
V..... mjpeg_rkmpp Rockchip MPP (Media Process Platform) MJPEG encoder (codec mjpeg)
|
查看rkrga:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #查看rkrga
ffmpeg -filters | grep rkrga
#信息打印如下
ffmpeg version 2eb0b5d Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04)
configuration: --prefix=/usr --enable-gpl --enable-version3 --enable-libdrm --enable-rkmpp --enable-rkrga --enable-alsa --enable-libv4l2
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
... overlay_rkrga VV->V Rockchip RGA (2D Raster Graphic Acceleration) video compositor
... scale_rkrga V->V Rockchip RGA (2D Raster Graphic Acceleration) video resizer and format converter
... vpp_rkrga V->V Rockchip RGA (2D Raster Graphic Acceleration) video post-process (scale/crop/transpose)
|
具体测试可参考源码仓库的wiki
5.5. 推流USB摄像头测试¶
5.5.1. 启动RTSP服务器¶
推流前需要启动RTSP服务器,需要运行mediamtx
访问: mediamtx,下载mediamtx_vx.x.x_linux_arm64v8.tar.gz
或者访问资料网盘/6-开发软件/mediamtx_v1.9.1_linux_arm64v8.tar.gz
将mediamtx_v1.9.1_linux_arm64v8.tar.gz传到板卡解压并运行:
1 2 3 4 5 6 7 8 9 10 11 12 13 | tar xvf mediamtx_v1.9.1_linux_arm64v8.tar.gz
#运行mediamtx
sudo ./mediamtx &
#信息输出如下
2024/09/18 16:24:54 INF MediaMTX v1.9.1
2024/09/18 16:24:54 INF configuration loaded from /home/cat/mediamtx.yml
2024/09/18 16:24:54 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2024/09/18 16:24:54 INF [RTMP] listener opened on :1935
2024/09/18 16:24:54 INF [HLS] listener opened on :8888
2024/09/18 16:24:54 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2024/09/18 16:24:54 INF [SRT] listener opened on :8890 (UDP)
|
5.5.2. 推流测试¶
推流前确认摄像头节点和帧率,按实际进行修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #查看摄像头节点
v4l2-ctl --list-devices
#进行推流,设备节点/dev/video0,30帧
ffmpeg \
-f v4l2 \
-video_size 1920x1080 \
-framerate 30 \
-pixel_format nv24 \
-i /dev/video0 \
-vf "format=yuv420p" \
-c:v h264_rkmpp \
-b:v 4000k \
-g 60 \
-f rtsp \
-rtsp_transport tcp \
-listen 1 \
rtsp://127.0.0.1:8554/live
|
使用VLC工具,打开左上角媒体->打开网络串流
然后根据推流板卡实际IP输入RTSP地址
如果链接成功则会出现摄像头画面。
