From 4857adb8dad7be074e1132a45a71e4442f67d139 Mon Sep 17 00:00:00 2001 From: nicoboy Date: Wed, 1 Jul 2026 15:36:11 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20pipeline=20GStreamer=20dual-stack=20IPv4?= =?UTF-8?q?+IPv6=20pour=20r=C3=A9ception=20flux=20Pi=20Zero?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le flux RTP arrive maintenant via Mycelium en IPv6, mais udpsrc bindé sur "::" seul ne reçoit pas les paquets IPv4 (pas de dual-stack sur ce Jetson, IPV6_V6ONLY actif). Fusion de deux udpsrc (0.0.0.0 + ::) via funnel pour accepter Freebox (dev, IPv4) et Mycelium (prod, IPv6). --- receive_cam.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/receive_cam.py b/receive_cam.py index e1c9473..ac607b6 100644 --- a/receive_cam.py +++ b/receive_cam.py @@ -28,14 +28,20 @@ MJPEG_QUALITY = 70 MODEL_PATH = Path(__file__).parent / "yolov8n.pt" # Pipeline GStreamer : RTP H.264 UDP → BGR frames +# Deux udpsrc (IPv4 0.0.0.0 + IPv6 ::) fusionnés par funnel : un socket IPv6 "::" +# seul ne reçoit pas les paquets IPv4 sur ce Jetson (IPV6_V6ONLY actif, pas de +# dual-stack), donc on écoute les deux familles en parallèle sur le même port. +# IPv4 : réseau local Freebox (dev) — IPv6 : Mycelium (prod, 4G). GSTREAMER_PIPELINE = ( - "udpsrc port=5600 " + "funnel name=f " "! application/x-rtp,payload=96 " "! rtph264depay " "! avdec_h264 " "! videoconvert " "! video/x-raw,format=BGR " - "! appsink drop=true max-buffers=1" + "! appsink drop=true max-buffers=1 " + "udpsrc address=0.0.0.0 port=5600 ! f. " + "udpsrc address=:: port=5600 ! f." ) # Frame annotée partagée entre le thread de capture et le serveur MJPEG