SIYI 相机 + YOLO + UDP 推流
Jetson / Orin 完整调试记录 | OpenCV · FFmpeg · PyTorch CUDA · YOLO 检测
SIYI RTSP YOLO 人检测 FFmpeg UDP 推流 VLC 播放 Jetson CUDA 修复
最终系统架构
SIYI Camera RTSP
↓
Jetson / Orin Python OpenCV
↓
YOLO human detection
↓
FFmpeg encodes video
↓
UDP stream to Windows
↓
VLC opens udp://@0.0.0.0:5600
最终 VLC 地址:
此地址比
udp://@0.0.0.0:5600此地址比
udp://@:5600 更稳定 1. 原始问题:GStreamer 输出失败
错误:
[SIYI YOLO] ERROR: Cannot open GStreamer UDP outputpython3 - <<'EOF'
import cv2
for line in cv2.getBuildInformation().splitlines():
if "GStreamer" in line:
print(line)
EOF
结果:
OpenCV 编译时未启用 GStreamer 支持,即使系统安装了 GStreamer 也无法使用
GStreamer: NOOpenCV 编译时未启用 GStreamer 支持,即使系统安装了 GStreamer 也无法使用
cv2.CAP_GSTREAMER。
检查 GStreamer 插件:
gst-inspect-1.0 x264enc 显示 x264enc 存在,说明插件正常,但 OpenCV 不支持输出。
2. 解决方案:使用 FFmpeg 替代 GStreamer
sudo apt update
sudo apt install -y ffmpeg
ffmpeg -version
ffmpeg version 4.4.2
Python 将原始帧输入 FFmpeg 子进程:
FFmpeg 编码后通过 UDP 发送到 Windows:
process.stdin.write(frame.tobytes())FFmpeg 编码后通过 UDP 发送到 Windows:
udp://192.168.1.14:5600 3. YOLO 运行在 CPU 上(速度极慢)
初始 FPS 只有 2-3 帧,YOLO 完全运行在 CPU 上。
python3 - <<'EOF'
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())
EOF
2.12.0+cu130
13.0
False
13.0
False
PyTorch 是普通的 CUDA 13 版本,但 Jetson 使用 CUDA 12.6,无法使用 GPU。
还出现警告:
还出现警告:
NVIDIA driver on your system is too old 4. Jetson 版本检查
cat /etc/nv_tegra_release
# R36 (release), REVISION: 4.7
这是 JetPack 6.x 系列,需要 Jetson 专用 PyTorch(CUDA 12.6)
5. 安装正确的 Jetson PyTorch
pip3 uninstall -y torch torchvision torchaudio
sudo apt install -y python3-pip libopenblas-base libopenmpi-dev
cd ~/Downloads
wget -c https://pypi.jetson-ai-lab.io/jp6/cu126/+f/62a/1beee9f2f1470/torch-2.8.0-cp310-cp310-linux_aarch64.whl
pip3 install --no-cache-dir ~/Downloads/torch-2.8.0-cp310-cp310-linux_aarch64.whl
pip3 install --no-cache-dir torchvision==0.23.0 \
--index-url=https://pypi.jetson-ai-lab.io/jp6/cu126
6. CUDA 运行时库缺失
错误:
OSError: libcudart.so.12: cannot open shared object fileValueError: libcublas.so.* not foundsudo apt update
sudo apt install -y nvidia-cuda nvidia-cudnn nvidia-tensorrt
7. CUPTI 库缺失
错误:
ImportError: libcupti.so.12: cannot open shared object file# 移除旧的 CUDA 13 pip 包
pip3 uninstall -y nvidia-cuda-runtime-cu13 nvidia-cublas-cu13 nvidia-cupti-cu13 \
nvidia-cudnn-cu13 nvidia-cufft-cu13 nvidia-curand-cu13 nvidia-cusolver-cu13 \
nvidia-cusparse-cu13 nvidia-nccl-cu13 nvidia-nvtx-cu13 triton
# 安装正确的 CUPTI
sudo apt install -y cuda-cupti-12-6
# 添加环境变量
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
sudo ldconfig
8. 最终 PyTorch CUDA 测试
python3 - <<'EOF'
import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())
print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else "NO CUDA")
EOF
2.8.0
12.6
True
Orin
12.6
True
Orin
PyTorch CUDA 修复成功!YOLO 现在使用 GPU 运行。
9. FPS 大幅改善
| 状态 | FPS |
|---|---|
| CUDA 修复前 | 2-3 FPS |
| CUDA 修复后 | 25-26 FPS |
10. RTSP 相机问题
错误:
No route to host → Jetson 无法访问 192.168.144.25正确 RTSP URL:
无效路径:
rtsp://192.168.144.25:8554/main.264无效路径:
sub.264 → 404 Stream Not Found
11. VLC 黑屏 / 卡顿问题
最终有效地址:
udp://@0.0.0.0:5600(比 udp://@:5600 更稳定)
最终推荐设置:
FRAME_WIDTH = 640
FRAME_HEIGHT = 480
FPS = 25
FFmpeg 码率:
FRAME_WIDTH = 640
FRAME_HEIGHT = 480
FPS = 25
FFmpeg 码率:
-b:v 2500k -maxrate 2500k -bufsize 500k 12. 已安装软件清单
| 软件 | 用途 |
|---|---|
| ffmpeg | UDP 视频推流 |
| gstreamer1.0-*一类仅用于检查,最终未用 | |
| nvidia-cuda, nvidia-cudnn, nvidia-tensorrt辉达 CUDA 运行时库 | |
| cuda-cupti-12-6辉达 CUPTI 库 | |
| torch 2.8.0 (Jetson 专用)辉达 GPU 深度学习框架 | |
| torchvision 0.23.0辉达图像处理库 | |
| ultralytics辉达 YOLO 检测 |
13. 问题与解决总结
| 问题 | 原因 | 解决方法 |
|---|---|---|
| GStreamer UDP 输出失败 | OpenCV GStreamer: NO | 改用 FFmpeg 子进程 |
| YOLO 只有 2-3 FPS | PyTorch CUDA 版本不匹配 | 安装 Jetson 专用 PyTorch 2.8.0 (CUDA 12.6) |
| CUDA 不可用 | 错误的 torch cu130 | 卸载错误的 torch,安装 Jetson 版 |
| libcudart.so.12 缺失辉达运行时库缺失辉达安装 nvidia-cuda 包 | ||
| libcupti.so.12 缺失辉达CUPTI 缺失 / pip CUDA 13 残留辉达移除 CUDA 13 pip 包,安装 cuda-cupti-12-6 | ||
| sub.264 失败辉达流不存在辉达使用 main.264 | VLC 黑屏辉达UDP 地址错误 / 缓冲问题辉达使用 udp://@0.0.0.0:5600 |
14. 最终理解
问题不是单一的,而是四层问题叠加:
1 OpenCV 无法使用 GStreamer → 改用 FFmpeg
2 PyTorch 错误 + YOLO 运行在 CPU → 安装正确的 Jetson PyTorch
3 CUDA 运行时库缺失 → 安装 nvidia-cuda / cuda-cupti
4 VLC 需要正确的 UDP 地址和 FPS/码率匹配 → udp://@0.0.0.0:5600 + FPS=25 + 码率 2500k
2 PyTorch 错误 + YOLO 运行在 CPU → 安装正确的 Jetson PyTorch
3 CUDA 运行时库缺失 → 安装 nvidia-cuda / cuda-cupti
4 VLC 需要正确的 UDP 地址和 FPS/码率匹配 → udp://@0.0.0.0:5600 + FPS=25 + 码率 2500k
四层问题全部修复后,系统稳定运行,YOLO 检测 ~25 FPS,UDP 推流流畅。