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