6. 安装带硬编解码版本的ffmpeg#

通过apt安装的ffmpeg不带硬件编解码,需要自行编译专为Rockchip平台设计的ffmpeg分支,以支持硬件加速视频处理,包括MPP硬件编码器、解码器,以及RGA滤镜加速。

提示

只有鲁班猫4/5系列的Ubuntu22/24系统默认安装了带硬编码版本的ffmpeg,其他板卡及系统都需要自行编译安装。

源码仓库位于GitHub,如果访问GitHub困难也可访问资料网盘/6-开发软件/ffmpeg.tar.gz获取源码。

6.1. 安装依赖#

在板卡执行以下命令,安装依赖:

1sudo apt update
2sudo apt install git meson cmake pkg-config gcc libasound2-dev libdrm-dev ninja-build libv4l-dev -y

6.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

6.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

6.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

6.5. 推流USB摄像头测试#

6.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)

6.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工具,打开左上角媒体->打开网络串流

../../../../_images/ffmpeg_0.jpg

然后根据推流板卡实际IP输入RTSP地址

../../../../_images/ffmpeg_1.jpg

如果链接成功则会出现摄像头画面。