VisionLink-RT
VisionLink-RT
VisionLink-RT 是一个专为 端测嵌入式 平台(如 Orange Pi 5 Pro)设计的高性能、低延迟视频推流引擎 适用于水下机器人等带宽受限场景进行视频流传输
该项目充分利用了 Rockchip 的硬件加速能力,实现了从摄像头采集、色彩空间转换、H.264 编码到网络传输的全链路优化。
- V4L2 采集:直接操作底层 Video4Linux2 接口,获取原始 YUYV 图像数据。
- 硬件加速转换 (RGA):使用 Rockchip RGA (2D Graphic Acceleration) 进行格式转换(YUYV -> NV12)和缩放。
- 板载AI算力 (NPU):集成 Rockchip NPU (Network Process Unite),利用6 Tops算力进行硬件加速。
- 硬件编码 (MPP):集成 Rockchip MPP (Media Process Platform),实现 H.264 硬件编码。
- UDP 低延迟传输:通过原始 UDP Socket 发送 H.264 码流,极大减少传输开销。
- 硬件平台:Orange Pi 5 / 5 Pro / 5 Plus (基于 RK3588/RK3588S)
- 操作系统:Ubuntu 20.04 / 22.04 (Rockchip BSP)
- 依赖库:
libv4l-devlibrga-dev(Rockchip RGA)librockchip-mpp-dev(Rockchip MPP)opencv(可选,目前仅用于测试各模块效果)
.
├── CMakeLists.txt # CMake文件
├── inc/ # 头文件
│ ├── dma_utils.h # DMA Buffer 管理
│ ├── mpp_encoder.h # MPP 编码封装类
│ └── v4l2_utils.h # V4L2 操作封装
├── src/ # 源代码
│ ├── main.cpp # 主程序入口 (采集->RGA->MPP->UDP)
│ ├── postprocess.cc # 官方:后处理程序
│ ├── yolo_detector.cpp # 目标检测封装类
│ └── mpp_encoder.cpp # MPP 编码实现
├── utils/ # 辅助文件
│ ├── dma_utils.cpp # 实现 dma-heap 内存分配
│ └── v4l2_utils.c # V4L2 采集实现
├── python_demo/ # python demo
│ ├── yolov5_rknn.py # rknn的python demo
│ └── yolov5_ROS.py # rknn集成ROS demo
├── model/ # 模型文件
│ ├── yolov5s.rknn # rknn转化模型文件
│ └── coco_80_labels_list.txt # 模型标签文件
├── .gitignore # git辅助文件
└── README.md # 说明文档
确保你的系统环境已安装必要的开发库。
# 1. 创建构建目录
mkdir build
cd build
# 2. 生成 Makefile
cmake ..
# 3. 编译
make -j4
在运行板子上的程序前,请先在 PC 端准备好接收工具。你可以使用 ffplay (FFmpeg 组件) 来播放。
PC端命令 (Windows/Linux):
# -f h264: 指定格式为 H.264
# -i udp://0.0.0.0:8888: 监听本地 8888 端口
# -fflags nobuffer: 禁用缓冲区以降低延迟
# -flags low_delay: 低延迟模式
ffplay -f h264 udp://0.0.0.0:8888 -fflags nobuffer -flags low_delay -framedrop -strict experimental -probesize 32 -analyzeduration 0 -sync ext
修改 src/main.cpp 中的目标 IP,将其指向你的 PC:
#define DEST_IP "192.168.13.xxx" // <--- 修改为你 PC 的 IP 地址
#define DEST_PORT 8888 // <--- 确保没有被防火墙拦截
在板子上执行编译好的程序:
cd build
sudo ./bricsbot_vision
如果一切正常,你应该能在 PC 上看到来自摄像头的实时画面,且延迟极低。
在 src/main.cpp 中可以调整以下宏定义:
DST_WIDTH/DST_HEIGHT: RGA 输出和 MPP 编码的分辨率(默认 640x640)。UDP_MTU: UDP 分包大小(默认 1024),建议小于 MTU 1500。
在 src/mpp_encoder.cpp 中可以调整编码参数:
bps(Bitrate): 目标码率,当前设置为 2Mbps ~ 3Mbps。rc:mode: 码率控制模式 (CBR 固定码率)。
-
PC 端收不到画面:
- 检查 PC 的防火墙是否允许 UDP 8888 端口。
- 检查
main.cpp中的DEST_IP是否填写正确。 - 确保 PC 和开发板在同一个局域网网段。
-
画面绿屏或花屏:
- 检查 MPP 的 stride (跨距) 设置。RK3588 通常要求宽和高对齐到 16 或 32。
- 检查 RGA 转换时的格式是否设置为
RK_FORMAT_YCbCr_420_SP(即 NV12)。
-
Permission Denied (权限错误):
- 操作
/dev/video0和/dev/dma_heap通常需要 root 权限,请使用sudo运行。
- 操作
=============== End

浙公网安备 33010602011771号