Files
fegger c43dd3ca4a 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.
2026-09-10 21:31:53 +02:00

1.3 KiB

Changelog

Notable changes to screen_cast. Loosely follows Keep a Changelog.

[Unreleased]

Added

  • Phase 9 — iOS receiver app (ios/): a native Swift receiver so an iPhone can act as the second receiver. Speaks the existing signaling + RTP protocol (no C++ changes), mirroring the Android receiver (Phase 8) source-to-source.
    • RTP core (header/packet, jitter buffer, H.264 depacketizer) ported source-to-source from the Android receiver.
    • BSD-socket signaling server (dual-stack, most-recent-peer, never-throwing sends) + NSBonjourServices advertisement.
    • VideoToolbox H.264 decode (in-band SPS/PPS, real-time, session rebuilt on resolution change) rendered via AVSampleBufferDisplayLayer (letterbox).
    • PLI keyframe recovery (rate-limited 500 ms) and pendingOffer for late surface attach; no placeholder sizing before the first real keyframe.
    • XcodeGen project + bootstrap.sh; XCTest port of the Android suite plus new signaling / line-framing / AVCC / NAL-extraction coverage.

Status: authored; on-device validation pending a Mac + Xcode 26 + iPhone 16 (local-network/Bonjour consent, the H.264 format-description recipe, and the VideoToolbox render path are the on-device verification items).