You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Receive plain RTP from Majestic outgoing over UDP (unicast and multicast) #68
Majestic can push the stream itself, with no RTSP: outgoing destinations (/api/v1/outgoing.json, web UI "Outgoing") with udp://host:port send plain RTP. This is the usual OpenIPC setup for FPV and for feeding several receivers from one encoder. Add a slot type that receives it.
What the stream looks like (measured on hi3516av300 Majestic):
Always RTP, never MPEG-TS or a bare Annex-B stream.
SPS/PPS (and VPS) are repeated in band before every IDR, so a receiver can join mid-stream with no SDP.
Scope
Slot URL form, e.g. udp://@:5600 (unicast, listen on a port) and udp://@239.1.2.3:5600 (multicast group, optional source).
Receiver: DatagramSocket for unicast, MulticastSocket.joinGroup() on the active interface for multicast. Large SO_RCVBUF.
Wi‑Fi: hold a WifiManager.MulticastLock while a multicast slot is playing; add CHANGE_WIFI_MULTICAST_STATE to the manifest. Ethernet boxes (AG-216) probably do not need it; verify.
Codec from PT (96/97), with a per-slot override for non-default PTs. Decoder configured from in-band parameter sets: no output until the first SPS/PPS + IDR.
Feed packets to the existing depacketizer through onPacket(CHANNEL_VIDEO, ...); no RTSP, so "connected"/watchdog is based on incoming packets only.
Audio: Majestic can add audio to a destination; decide whether to support it here or later (the PT and codec are not described anywhere, so it needs a per-slot setting).
Several slots on different ports / groups at the same time; two slots on the same port must be rejected.
To verify first
That Majestic actually sends to a multicast group address (udp://239.x.x.x:port) and with what TTL; not checked yet.
UI for this receiver is prepared in #71 (no receiver code there, so no overlap with the receiver work):
the ninth cell of the 3×3 grid is reserved for the pushed stream and shows UDP RTP · port 5600 with this device's address (Decoder.UDP_RTP_PORT, Decoder.udpHintText(), Decoder.localIpv4());
U in the menu row (after 8) shows that cell full-screen (Decoder.onShowUdp() / leaveUdpView(), MenuManager.setUdpShown()); a slot number or Q leaves it.
The receiver can replace the hint view with a SurfaceView in both places.
Activity
feat: receive plain RTP from Majestic outgoing over UDP, unicast and …
feat: U in the menu shows the reserved UDP RTP cell full-screen (#68)
compot-dev commentedon Oct 12, 2026
UI for this receiver is prepared in #71 (no receiver code there, so no overlap with the receiver work):
UDP RTP · port 5600with this device's address (Decoder.UDP_RTP_PORT,Decoder.udpHintText(),Decoder.localIpv4());Decoder.onShowUdp()/leaveUdpView(),MenuManager.setUdpShown()); a slot number or Q leaves it.The receiver can replace the hint view with a
SurfaceViewin both places.fix: plain RTP review findings (#68)
fix: plain RTP passes only video packets on (#68)
feat: RTSP multicast, with fallback to TCP (#69)
fix: a udp:// multicast slot binds to its group, not the wildcard (#68)
feat: RTSP multicast, with fallback to TCP (#69)
feat: receive plain RTP from Majestic outgoing over UDP, unicast and …
fix: plain RTP review findings (#68)
fix: plain RTP passes only video packets on (#68)
fix: a udp:// multicast slot binds to its group, not the wildcard (#68)
feat: RTSP multicast, with fallback to TCP (#69)
Merge pull request #72 from OpenIPC/feat/rtp-udp
feat: U in the menu shows the reserved UDP RTP cell full-screen (#68)
feat: receive plain RTP from Majestic outgoing over UDP, unicast and …
fix: plain RTP review findings (#68)
fix: plain RTP passes only video packets on (#68)
fix: a udp:// multicast slot binds to its group, not the wildcard (#68)
Merge pull request #72 from OpenIPC/feat/rtp-udp
feat: RTSP multicast, with fallback to TCP (#69)