Repository navigation
Device testing: UDP, plain RTP and RTSP multicast (#70, #72, #73) #74
Description
Device test round for the transport work: #70 (RTSP over UDP, #67), #72 (plain RTP from Majestic outgoing, #68), #73 (RTSP multicast, #69). Device, cameras, access, adb, builds, smoke script, log lines and pitfalls are in LABORATORY.md (#77); the run format follows #53. Post each run as a comment here (build, commit, result table, findings) and tick the checklist in this body.
Rule: CI builds only, no local builds.
Builds
The three PRs are stacked: #70 → #64 (8 slots), #72 → #70, #73 → #72. Each push run of build.yml leaves an APK artifact:
| PR | Branch | Artifact | Contains |
|---|---|---|---|
| #70 | feat/rtsp-udp |
decoder-feat-rtsp-udp |
#64 + UDP |
| #72 | feat/rtp-udp |
decoder-feat-rtp-udp |
+ udp:// slots |
| #73 | feat/rtsp-multicast |
decoder-feat-rtsp-multicast |
+ RTSP multicast (everything) |
B=feat/rtsp-multicast
RUN=$(gh run list -R OpenIPC/decoder -b $B -e push -L 1 --json databaseId -q '.[0].databaseId')
gh run download $RUN -R OpenIPC/decoder -n decoder-${B//\//-}If time is short, test the feat/rtsp-multicast build only: it has all three. Check the commit hash in the menu (Exit [v…, ]).
Bench
Cameras: group A .133, .126, .53 for stream tests, group B only fills grid cells. Details, transport setting (UI and --es transport), udp:// URL forms, log lines and the socket-leak check: LABORATORY.md.
Checklist
#70: RTSP over UDP (#67)
-
.133UDP single view: video + Opus audio,playing over UDP, nopackets loston the LAN -
.126UDP (H.265 + Opus) -
.53XM UDP: plays; slot switch away and back, pause/resume still connect (one client only: TEARDOWN must free it) - Latency UDP vs TCP on
.133(e.g. a stopwatch on the camera's OSD vs screen, or the jitter colour) - 3×3 grid with all 8 slots on UDP: 8 sessions, no reconnects, UDP sockets count = 2 per track
- Auto on a working camera: stays on UDP
- Auto with UDP blocked: falls back to TCP within ~3 s and stays on TCP after resume. The device has no root; block on the camera if it has
iptables(iptables -A OUTPUT -p udp --sport 1024: -j DROP, remove afterwards), else note it as not testable here - 3× Home → resume and slot changes on UDP: thread count and
/proc/<pid>/net/udpdo not grow - Camera restart (
/etc/init.d/S95majestic restart) while playing on UDP: reconnects
#72: plain RTP from Majestic outgoing (#68)
- Majestic
outgoingdestinationudp://172.17.32.144:5600(web UI → Outgoing, or/api/v1/outgoing.json), slotudp://@:5600: video H.264 - Same with
video0.codec h265; switch the codec while playing (cli -s .video0.codec h265, restart majestic): the view follows - Join mid-stream: start the slot after the camera is already sending (picture after the next IDR)
- Camera stops sending (remove the destination): status turns
disconnected, comes back by itself when it is added again (no rebind) - Two cameras to two ports (
:5600,:5602) in the grid; two slots on the same port: the second fails visibly (not silent) - Open question: does Majestic send to a multicast group? Destination
udp://239.1.2.3:5600, slotudp://@239.1.2.3:5600. Note the TTL if visible (tcpdumpsomewhere on the LAN) - Multicast to the AG-216 over Ethernet; if a Wi‑Fi Android device is available, there too (multicast lock)
- Source filter:
udp://<wrong ip>@239.1.2.3:5600shows nothing,udp://172.17.32.133@…plays
#73: RTSP multicast (#69)
-
.133/.126with Multicast:multicast SETUP failed (400), plays over TCP at once in the same connection -
.53with Multicast:451, plays over TCP (one client: no second connection left open) - With a server that does RTSP multicast: none in the lab. If possible, run one on the lab host (e.g. mediamtx with
multicastenabled, relaying.133) and check:joined …,playing over multicast, video, TEARDOWN on stop. Otherwise mark not testable
After the round
For each PR whose items are all done: comment on the PR with a link to the result here, take it out of draft, and remove awaiting device test. Findings that are not quick fixes get their own issues (time-box ~15 min, as in #53). Leave a build with working cameras installed on the device.
Activity
compot-dev commentedon Oct 12, 2026
Run 1: CI build
936a22c(feat/rtsp-multicast, contains #70 + #72 + #73, rebased onto v2 with #71), AG-216 Android 10Camera configs were restored afterwards: no
outgoingdestinations,.133H.264,.126H.265. The app is back on the 8-camera TCP layout.#70: RTSP over UDP (#67)
.133UDP, single viewplaying over UDP, video + Opus.126UDP (H.265 + Opus)playing over UDP; 38 packets lost in ~15 s at session end (the box is ~50 ms away from the lab host, so some loss is expected).53XM UDP, slot away and back, 2× Home → resumeudp://slot, 0 failures; 21 UDP sockets (/proc/<pid>/net/udp6; Java uses dual-stack sockets, sonet/udpshows none).126)iptableson.133/.126.126)playing over UDPagain after ~8 s#72: plain RTP from Majestic
outgoing(#68)outgoing.serversset in/etc/majestic.yaml(clicannot set list items);/api/v1/outgoing.jsonreports the state..133→udp://172.17.32.144:5600, slotudp://@:5600listening … port 5600,payload type 96, H.264, picturepayload type 97, H.265, the decoder followsDisconnectedover the last frame, then the picture returns by itself (no rebind).133:5600,.126:5602)bind failed: EADDRINUSEand retries, but in the grid it is only a black cell (multi-view cells have no status text). Not visible in the UIudp://239.1.2.3:5600islive; slotudp://@239.1.2.3:5600joins and plays (H.265)udp://172.17.32.53@239.1.2.3:5600:unexpected sender ignored, no decoder;udp://172.17.32.133@…: plays#73: RTSP multicast (#69)
.133Multicastmulticast SETUP failed (400), using TCP, plays over TCP in the same connection.53Multicast451, plays over TCPFinding: two
udp://slots on one port fail silently in the grid. Not a blocker; follow-up issue to follow.compot-dev commentedon Oct 12, 2026
Run 1 above covered all items that are testable in this lab; #70, #72 and #73 are merged. Not testable here: Auto with UDP blocked (no
iptableson the cameras), multicast over Wi‑Fi, RTSP multicast from a real multicast server, and the UDP/TCP latency comparison. Finding: #80.docs: LABORATORY.md, the test bench in one place (#53, #74)
docs: transports and udp:// slots in the READMEs (#75)