feat(ios): native receiver app (Swift, min iOS 17)
A native iOS receiver so an iPhone can act as the second receiver, speaking the existing signaling + RTP protocol (no C++ changes) and mirroring the Android receiver (Phase 8) source-to-source. - RTP core (header/packet, jitter buffer, H.264 depacketizer) ported from the Android receiver - BSD-socket signaling server (dual-stack, most-recent-peer, never-throwing sends) + NSBonjourServices - VideoToolbox H.264 decode (in-band SPS/PPS, real-time, rebuilds on size change) -> AVSampleBufferDisplayLayer - PLI keyframe recovery (500 ms) + pendingOffer for late surface attach - XcodeGen project + bootstrap.sh; XCTest port of the Android suite + new coverage - .gitignore for generated artifacts; CHANGELOG; PHASES + MEMORY updated Status: authored; on-device validation pending a Mac + Xcode 26 + iPhone 16.
This commit is contained in:
+28
-1
@@ -132,6 +132,33 @@ existing signaling + RTP protocol; no C++ changes.
|
||||
`--send --target window --peer <phone>:5005` rendered fullscreen on the
|
||||
phone (and HDMI via DP-alt-mode) with loss recovery.
|
||||
|
||||
## Phase 9 — iOS Receiver App
|
||||
|
||||
**Goal**: a native iOS receiver app (Swift) so an iPhone can act as the second
|
||||
receiver. The app speaks the existing signaling + RTP protocol; no C++ changes.
|
||||
Mirrors the Android receiver (Phase 8) source-to-source.
|
||||
|
||||
- [x] 9.1 Xcode project scaffolding (`ios/`, XcodeGen spec + bootstrap script;
|
||||
Info.plist with local-network + Bonjour privacy keys)
|
||||
- [x] 9.2 Swift protocol core + XCTest (rtp header/packet, jitter, depacketizer
|
||||
ported source-to-source; added signaling JSON, line framing, AVCC, NAL
|
||||
extraction tests — the Android side had no signaling tests)
|
||||
- [x] 9.3 Signaling server (BSD sockets, dual-stack, most-recent-peer, never
|
||||
throws) + `NSBonjourServices` advertisement
|
||||
- [x] 9.4 Media path: UDP (poll-based) → jitter → depacketize → VideoToolbox
|
||||
(in-band SPS/PPS, real-time decode) → AVSampleBufferDisplayLayer
|
||||
(letterbox) + PLI on damage + pendingOffer for late surface attach
|
||||
- [ ] 9.5 On-device validation (needs a Mac + Xcode 26 + iPhone 16): unit tests
|
||||
green on the simulator; `--discover` lists the phone; `--send --peer
|
||||
<ip>:5005` streams letterboxed; PLI recovery on Wi-Fi loss
|
||||
- [ ] 9.6 Docs: iOS RUNBOOK quirks, README receiver section, PHASES + MEMORY
|
||||
|
||||
**Validation**: `ios/bootstrap.sh test` (simulator) green; live session
|
||||
`--send --peer <iphone>:5005` renders fullscreen letterboxed on the iPhone with
|
||||
loss recovery. Note: this box is Linux — no Xcode/iOS SDK — so 9.2–9.4 are
|
||||
authored but only 9.5 can validate the VideoToolbox + local-network paths.
|
||||
|
||||
## Current phase
|
||||
|
||||
Phase 8 — Android Receiver App (complete).
|
||||
Phase 9 — iOS Receiver App (implementation authored; on-device validation
|
||||
pending a Mac + Xcode 26 + iPhone 16).
|
||||
|
||||
Reference in New Issue
Block a user