go2视频流 GStreamer视频流接收问题

https://support.unitree.com/home/zh/developer/Multimedia_Services

image

步骤进行系统性的排查:

1. 首先检查网络配置

# 检查网卡状态和IP地址
ip addr show enx00e0986113a6

# 检查多播路由
route -n | grep 230.1.1.1

# 或者使用ip命令
ip mroute show

2. 测试网络连通性

# 使用tcpdump检查是否收到多播数据包
sudo tcpdump -i enx00e0986113a6 -n host 230.1.1.1

# 或者使用更具体的过滤
sudo tcpdump -i enx00e0986113a6 -n 'dst 230.1.1.1 and port 1720'

3. 使用GStreamer命令行工具测试

# 简化测试管道
gst-launch-1.0 udpsrc address=230.1.1.1 port=1720 multicast-iface=enx00e0986113a6 ! application/x-rtp, media=video, encoding-name=H264 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! xvimagesink

# 或者使用更基础的测试
gst-launch-1.0 udpsrc address=230.1.1.1 port=1720 multicast-iface=enx00e0986113a6 ! application/x-rtp ! fakesink silent=false -v

image

image

4. 检查GStreamer安装和插件

# 检查GStreamer安装
gst-inspect-1.0 --version

# 检查必要的插件是否安装
gst-inspect-1.0 udpsrc
gst-inspect-1.0 rtph264depay
gst-inspect-1.0 avdec_h264
gst-inspect-1.0 videoconvert

image

5. 修改Python代码添加调试信息

import cv2
import sys

# 添加更详细的错误信息
def test_gstreamer():
    gstreamer_str = "udpsrc address=230.1.1.1 port=1720 multicast-iface=enx00e0986113a6 ! application/x-rtp, media=video, encoding-name=H264 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw,width=1280,height=720,format=BGR ! appsink drop=1"
    
    print("尝试打开GStreamer管道...")
    cap = cv2.VideoCapture(gstreamer_str, cv2.CAP_GSTREAMER)
    
    if not cap.isOpened():
        print("无法打开视频流")
        print("OpenCV版本:", cv2.__version__)
        return False
    
    print("成功打开视频流")
    
    try:
        while True:
            ret, frame = cap.read()
            if not ret:
                print("读取帧失败")
                break
                
            print(f"收到帧: {frame.shape}")
            cv2.imshow("Input via Gstreamer", frame)
            
            if cv2.waitKey(25) & 0xFF == ord('q'):
                break
                
    except Exception as e:
        print(f"错误: {e}")
    finally:
        cap.release()
        cv2.destroyAllWindows()
    
    return True

if __name__ == "__main__":
    test_gstreamer()

6. 尝试不同的管道配置

# 简化管道配置
gstreamer_str_simple = "udpsrc address=230.1.1.1 port=1720 ! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! appsink"

# 或者尝试不使用multicast-iface
gstreamer_str_no_iface = "udpsrc address=230.1.1.1 port=1720 ! application/x-rtp, media=video ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! appsink"

7. 系统级检查

# 检查防火墙设置
sudo iptables -L

# 检查是否有其他进程占用端口
sudo netstat -tulpn | grep 1720

# 检查系统日志
dmesg | tail
journalctl -f

排查步骤建议:

  1. 首先运行步骤2的tcpdump,确认是否收到数据包
  2. 然后运行步骤3的gst-launch命令,测试GStreamer本身
  3. 如果GStreamer命令行工作但Python不工作,检查OpenCV的GStreamer支持
  4. 如果都不工作,检查网络配置和多播路由
posted @ 2025-11-26 15:19  aiplus  阅读(0)  评论(0)    收藏  举报
悬浮按钮示例