fix(android): pass PROTOCOL_DNS_SD so mDNS registration works
Android 16 added NsdManager.checkProtocol(): registerService with protocol 0 threw IllegalArgumentException: Unsupported protocol — silently, since the old code swallowed the exception into a dead reflection fallback and start() overwrote the failure status with the Listening line. mDNS never actually advertised (the Phase 8 session streamed via --peer, masking it). Also advertise after the listening status so a registration failure stays visible, and log the exception and the registration success. Validated live on the Fairphone 6: the desktop --discover lists the phone and a full --send session decodes (in-band SPS 320x240 -> 2496x1040) and renders.
This commit is contained in:
@@ -114,6 +114,13 @@ existing signaling + RTP protocol; no C++ changes.
|
||||
depacketizer — 25 tests green)
|
||||
- [x] 8.3 Signaling + NSD validated on device (offer → answer over the
|
||||
network; mDNS registration via the API-36 RegistrationListener)
|
||||
— **correction 2026-09-10**: registration had in fact never
|
||||
succeeded (registerService passed protocol `0`, which API 36
|
||||
rejects with "Unsupported protocol"; the swallowed failure was
|
||||
hidden behind the "Listening…" status). Fixed with
|
||||
`PROTOCOL_DNS_SD` + real on-device validation: desktop
|
||||
`--discover` lists the phone and a live `--send` session
|
||||
decodes and renders.
|
||||
- [x] 8.4 MediaCodec decode + Surface render validated on device (in-band
|
||||
SPS sizing, letterbox fit)
|
||||
- [x] 8.5 End-to-end on a Fairphone 6 (Android 16): streaming, letterboxed
|
||||
|
||||
@@ -240,6 +240,16 @@ Platform quirks found while validating (Android 16 / API 36):
|
||||
|
||||
- `android.permission.INTERNET` is required — NsdService rejects
|
||||
registration without it.
|
||||
- `NsdManager.registerService` on Android 16 validates the protocol
|
||||
argument (`NsdManager.checkProtocol`): the historical `0` throws
|
||||
`IllegalArgumentException: Unsupported protocol` — pass
|
||||
`NsdManager.PROTOCOL_DNS_SD`. This was silent for a long time: the app
|
||||
swallowed the exception and the failure status was overwritten by the
|
||||
"Listening…" line, so mDNS never advertised even though the UI looked
|
||||
fine (discovery only worked via `--peer`). Diagnosed via
|
||||
`adb shell dumpsys servicediscovery` (the client's `mClientRequests`
|
||||
stays empty when no request was ever issued) plus logging the
|
||||
exception.
|
||||
- `DatagramSocket.localPort` gives the bound port; `.port` is -1 for
|
||||
unconnected datagram sockets, and `.localAddress` is an `InetAddress`
|
||||
(Inet6Address on Android), not an `InetSocketAddress`.
|
||||
|
||||
Reference in New Issue
Block a user