You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SIYI A8迷你云台相机H.265 RTSP流解码问题(FFmpeg/OpenCV)

SIYI A8云台相机H.265 RTSP流解码卡顿丢包问题排查与解决

我正在开展目标检测与跟踪项目,使用SIYI A8迷你云台相机通过RTSP传输H.265视频流(地址:rtsp://192.168.144.25:8554/main.264),但在Ubuntu 20.04和Jetson Xavier NX系统中,使用FFmpeg、ffplay、VLC等所有媒体播放器解码该流时均出现帧卡顿(丢包)问题。

当前网络配置信息

aadarsh@aadarsh-B560M:~/Desktop$ sudo ip link set enp3s0 up
[sudo] password for aadarsh: 
aadarsh@aadarsh-B560M:~/Desktop$ sudo ethtool enp3s0
aadarsh@aadarsh-B560M:~/Desktop$ sudo ethtool enp3s0
Settings for enp3s0:
    Supported ports: [ TP MII ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supported pause frame use: Symmetric Receive-only
    Supports auto-negotiation: Yes
    Supported FEC modes: Not reported
    Advertised link modes:  10baseT/Full 
    Advertised pause frame use: Symmetric Receive-only
    Advertised auto-negotiation: No
    Advertised FEC modes: Not reported
    Speed: 10Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: off
    MDI-X: Unknown
    Supports Wake-on: pumbg
    Wake-on: d
    Link detected: yes
aadarsh@aadarsh-B560M:~/Desktop$ ping 192.168.144.25
PING 192.168.144.25 (192.168.144.25) 56(84) bytes of data.
64 bytes from 192.168.144.25: icmp_seq=1 ttl=64 time=5.56 ms
64 bytes from 192.168.144.25: icmp_seq=2 ttl=64 time=2.82 ms
64 bytes from 192.168.144.25: icmp_seq=3 ttl=64 time=0.386 ms
64 bytes from 192.168.144.25: icmp_seq=4 ttl=64 time=0.889 ms
64 bytes from 192.168.144.25: icmp_seq=5 ttl=64 time=1.47 ms
64 bytes from 192.168.144.25: icmp_seq=6 ttl=64 time=0.869 ms
64 bytes from 192.168.144.25: icmp_seq=7 ttl=64 time=0.770 ms
64 bytes from 192.168.144.25: icmp_seq=8 ttl=64 time=0.378 ms
64 bytes from 192.168.144.25: icmp_seq=9 ttl=64 time=0.408 ms

已尝试的解决方法及结果

  • FFmpeg解码流
    预期:流畅播放并解码H.265 RTSP流,无丢帧或错误。
    结果:频繁出现Could not find ref with POC、RTP: missed packets等错误,偶尔因资源耗尽导致进程终止。
  • OpenCV实时处理
    预期:连续捕获帧,延迟极低,以便用YOLOv8进一步处理。
    结果:帧处理缓慢,频繁丢帧,响应延迟。
  • 增大缓冲区大小并使用硬件加速
    预期:减少丢帧,提升解码稳定性。
    结果:仅有小幅改善,但错误和不稳定问题仍存在。
  • VLC和FFplay测试
    预期:稳定播放RTSP流。
    结果:VLC和FFplay均出现类似Waiting for VPS/SPS/PPS的问题。

解决方案

1. 修复网络带宽瓶颈

从ethtool输出可见,当前网卡速率仅为10Mb/s,远低于H.265高清流的带宽需求,这是丢包卡顿的核心原因:

  • 开启网卡自动协商:
    sudo ethtool -s enp3s0 autoneg on
    
  • 重启网卡生效:
    sudo ip link set enp3s0 down && sudo ip link set enp3s0 up
    
  • 再次执行ethtool enp3s0确认速率,目标是1000Mb/s(千兆)或至少100Mb/s。

2. 优化RTSP解码参数

针对FFmpeg/ffplay,使用以下参数强制指定H.265解码器、增大缓冲区并启用丢包恢复:

ffplay -rtsp_transport tcp -hwaccel auto -max_delay 5000000 -i rtsp://192.168.144.25:8554/main.264

参数说明:

  • -rtsp_transport tcp:改用TCP传输RTSP(默认UDP易丢包)
  • -hwaccel auto:自动启用硬件解码(Jetson上调用NVDEC,Ubuntu用VA-API)
  • -max_delay 5000000:增大解码缓冲区(单位微秒,抵消网络波动影响)

3. OpenCV捕获优化

用OpenCV捕获时,强制使用FFmpeg后端并配置TCP传输:

import cv2

cap = cv2.VideoCapture("rtsp://192.168.144.25:8554/main.264", cv2.CAP_FFMPEG)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 3)  # 设置缓冲区帧数
cap.set(cv2.CAP_PROP_FPS, 30)  # 强制匹配相机帧率

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("帧读取失败,尝试重新连接...")
        cap.release()
        cap = cv2.VideoCapture("rtsp://192.168.144.25:8554/main.264", cv2.CAP_FFMPEG)
        continue
    # 此处添加YOLOv8处理逻辑
    cv2.imshow("Frame", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

4. 相机端参数调整

登录SIYI A8的Web管理界面,调整以下参数:

  • 降低视频分辨率(如从1080p改为720p)
  • 降低码率(设置为5-8Mb/s)
  • 开启RTSP的TCP传输模式(部分相机默认UDP,可切换)

内容的提问来源于stack exchange,提问作者Aadarsh mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:56:05