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:
@@ -0,0 +1,27 @@
|
||||
import XCTest
|
||||
@testable import Receiver
|
||||
|
||||
final class AvccConverterTests: XCTestCase {
|
||||
func testNalUnits() {
|
||||
let annexB: [UInt8] = [0, 0, 1, 0x41, 0x11, 0, 0, 1, 0x67, 0xAA]
|
||||
XCTAssertEqual(AvccConverter.nalUnits(annexB), [[0x41, 0x11], [0x67, 0xAA]])
|
||||
}
|
||||
|
||||
func testToAvcc() {
|
||||
let annexB: [UInt8] = [0, 0, 1, 0x41, 0x11, 0, 0, 1, 0x67, 0xAA]
|
||||
let avcc = AvccConverter.toAvcc(annexB)
|
||||
XCTAssertEqual(avcc, [0, 0, 0, 2, 0x41, 0x11, 0, 0, 0, 2, 0x67, 0xAA])
|
||||
}
|
||||
|
||||
func testFromAvccRoundtrip() {
|
||||
let units: [[UInt8]] = [[0x41, 0x11], [0x67, 0xAA, 0xBB]]
|
||||
let annexB = [0, 0, 1] + units[0] + [0, 0, 1] + units[1]
|
||||
let avcc = AvccConverter.toAvcc(annexB)
|
||||
XCTAssertEqual(AvccConverter.fromAvcc(avcc ?? []), units)
|
||||
}
|
||||
|
||||
func testEmptyReturnsNil() {
|
||||
XCTAssertNil(AvccConverter.toAvcc([UInt8]()))
|
||||
XCTAssertNil(AvccConverter.toAvcc([0, 0, 1]))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user