Skip to content

Mirroring negotiates and 'initializes' but client never opens data connection (iOS 27, combinedGetInfoWithControlSetup) #535

Description

@jaslrobinson

Summary

Mirroring session connects and negotiates successfully (control connection stays open, /feedback heartbeats keep flowing, server logs "Mirroring initialized successfully" / opens the data port and confirms Accepted IPv6 client on socket...), but the client never opens the actual video/audio data connection. No mirroring window ever appears, since no frame data ever arrives.

Reproduced consistently across four different configurations:

  1. -p (fixed legacy ports 7000/7001/7100 TCP, 6000/6001/7011 UDP)
  2. -p -avdec (forced software h264 decode, ruling out a GPU/VAAPI sink issue)
  3. Default (no -p, random ports)
  4. Default, second clean run after restarting avahi to rule out stale mDNS state

In every case: the control RTSP connection (whatever port it's on) shows ESTABLISHED and stays alive with periodic /feedback POSTs, a data port is opened and logged as ready, but ss -tnp never shows a second ESTABLISHED connection to that data port — the client simply never dials it.

Environment

  • UxPlay 1.73.6 (latest release, built from AUR)
  • Linux (Arch-based), Hyprland (wlroots/Wayland compositor)
  • -vs waylandsink and also tried default autovideosink
  • Client: iPhone16,2, iOS/iPhone OS 27.0 (osBuildVersion in the 24A53xx range), AirPlay client sourceVersion 980.67.2

Relevant detail

The client's SETUP request plist includes:

<key>combinedGetInfoWithControlSetup</key>
<true/>

This key isn't referenced anywhere in the UxPlay source as far as I can tell from the debug log's request handling — suspect the client is negotiating a different data-connection mode than the traditional separate dataPort/SETUP-per-stream flow, and since the server doesn't acknowledge/handle that request, the client never follows through with the classic dataPort connection UxPlay is waiting on.

Debug log excerpt (-d), redacted

Control connection + first SETUP (audio/timing):

SETUP <rtsp-url> RTSP/1.0
X-Apple-ProtocolVersion: 1
Content-Type: application/x-apple-binary-plist

<dict>
	<key>osVersion</key><string>27.0</string>
	<key>combinedGetInfoWithControlSetup</key><true/>
	<key>name</key><string>iPhone</string>
	<key>timingProtocol</key><string>NTP</string>
	<key>sourceVersion</key><string>980.67.2</string>
	<key>isScreenMirroringSession</key><true/>
	<key>model</key><string>iPhone16,2</string>
	<key>osName</key><string>iPhone OS</string>
</dict>

fairplay_decrypt ret = 0
Client identified as User-Agent: AirPlay/980.67.2
RTSP/1.0 200 OK

Second SETUP (video stream negotiation) — server responds with a dataPort and considers mirroring initialized:

SETUP <rtsp-url> RTSP/1.0
<dict>
  <key>streams</key>
  <array>
    <dict>
      <key>latencyMs</key><integer>100</integer>
      <key>type</key><integer>110</integer>
      <key>streamConnectionID</key><integer>...</integer>
    </dict>
  </array>
</dict>

type = 110
raop_rtp_mirror starting mirroring
raop_rtp_mirror local data port socket 28 port TCP 7100
Mirroring initialized successfully
RTSP/1.0 200 OK

<dict>
  <key>streams</key>
  <array>
    <dict>
      <key>dataPort</key><integer>7100</integer>
      <key>type</key><integer>110</integer>
    </dict>
  </array>
</dict>

After this point, only /feedback heartbeat POSTs continue on the original control connection every ~3s. ss -tnp at any point after this never shows a connection to port 7100 (or whatever data port was negotiated in other test runs). No video pipeline ever receives a buffer, so waylandsink/autovideosink never creates a window (pipeline stays at PAUSED, never reaches PLAYING).

Question

Is combinedGetInfoWithControlSetup a known negotiation mode from newer iOS AirPlay clients that UxPlay doesn't currently implement? Happy to test any patch/branch or provide further packet captures if useful.

Activity

  1. fduncanh commented on Jul 16, 2026

    @fduncanh
    Collaborator

    Did you have UxPlay working with iOS 26.x before you installed the iOS 27 public beta?
    (iOS 27 is not yet released, just the beta)

  2. fduncanh commented on Jul 16, 2026

    @fduncanh
    Collaborator

    combinedGetInfoWithControlSetup is not a known mode....

    Hopefully any incompatibility of iOS27 beta with legacy devices will not be there in the final release.

  3. fduncanh commented on Jul 16, 2026

    @fduncanh
    Collaborator

    please post a less "redacted" version of the -d output.

    (1) use uxplay -m -nh to replace the server hardware ID with a random id, remove server name
    (2) just edit the output to replace any data like ip addresses in rtsp:// ......... with xxxxxxxx, dont remove the line itself

    thanks

    Here is a redacted example of the client (an old iPad running iOS 16.7) plist

    SETUP rtsp://xxxxxxxxxx
    Content-Length: 671
    Content-Type: application/x-apple-binary-plist
    CSeq: 3
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>et</key>
    	<integer>32</integer>
    	<key>statsCollectionEnabled</key>
    	<false/>
    	<key>eiv</key>
    	<data>
    	mZCSkUNc66vfb8YiXbRrZw==
    	</data>
    	<key>sessionUUID</key>
    	<string>9F142D95-8E10-4AF0-BE11-F3EE17075528</string>
    	<key>timingProtocol</key>
    	<string>NTP</string>
    	<key>diagnosticsAndUsage</key>
    	<true/>
    	<key>osName</key>
    	<string>iPhone OS</string>
    	<key>osBuildVersion</key>
    	<string>20H392</string>
    	<key>sourceVersion</key>
    	<string>695.5.1</string>
    	<key>timingPort</key>
    	<integer>56302</integer>
    	<key>isScreenMirroringSession</key>
    	<true/>
    	<key>osVersion</key>
    	<string>16.7.16</string>
    	<key>ekey</key>
    	<data>
            (2 lines data omitted, 64 chars/line)
    	</data>
    	<key>sessionCorrelationUUID</key>
    	<string>D82CD4AC-3FD6-4006-8F7B-A3E8D7F8AF66</string>
    	<key>internalBuild</key>
    	<false/>
    	<key>deviceID</key>
    	<string>xxxxxxxxx</string>
    	<key>model</key>
    	<string>iPad6,11</string>
    	<key>name</key>
    	<string>iPad</string>
    	<key>macAddress</key>
    	<string>xxxxxxxxx</string>
    </dict>
    </plist>
    
    Handling request SETUP with URL rtsp://xxxxxxxxxxxxx
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    SETUP 1
    connection request from iPad (iPad6,11) with deviceID = xxxxxxxxx
    

    here is the full -d

    Accepted IPv6 client on socket 15, port 56714
    Local :xxxxxxxxxxxxxx
    Remote: xxxxxxxxxxxxx
    Open connections: 1
    new request, connection 0, socket 15 type Unknown
    httpd receiving on socket 15, connection 0
    
    httpd: current connections:
    connection 0 type 0 socket 15  conn 0x7ee5a0070 Unknown ACTIVE CONNECTION
     
    httpd request received on socket 15, connection 0, method = GET, url = /info, protocol = RTSP/1.0
    conn_request
    New connection 0x7ee5a0070 identified as Connection type RAOP
    
    GET /info RTSP/1.0
    X-Apple-ProtocolVersion: 1
    Content-Length: 70
    Content-Type: application/x-apple-binary-plist
    CSeq: 0
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>qualifier</key>
    	<array>
    		<string>txtAirPlay</string>
    	</array>
    </dict>
    </plist>
    
    Handling request GET with URL /info
    RTSP/1.0 200 OK 
    Audio-Jack-Status: connected; type=digital 
    Content-Type: application/x-apple-binary-plist 
    Server: AirTunes/220.68 
    CSeq: 0 
    Content-Length: 275 
     
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>txtAirPlay</key>
    	<data>
            (5 lines data omitted, 64 chars/line)
    	</data>
    </dict>
    </plist>
    
    new request, connection 0, socket 15 type RAOP
    httpd receiving on socket 15, connection 0
    
    httpd: current connections:
    connection 0 type 1 socket 15  conn 0x7ee5a0070 RAOP ACTIVE CONNECTION
     
    httpd request received on socket 15, connection 0, method = POST, url = /fp-setup, protocol = RTSP/1.0
    conn_request
    
    POST /fp-setup RTSP/1.0
    X-Apple-ET: 32
    Content-Length: 16
    Content-Type: application/octet-stream
    CSeq: 1
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    46 50 4c 59 03 01 01 00 00 00 00 04 02 00 01 bb 
    
    Handling request POST with URL /fp-setup
    RTSP/1.0 200 OK 
    Audio-Jack-Status: connected; type=digital 
    Content-Type: application/octet-stream 
    Server: AirTunes/220.68 
    CSeq: 1 
    Content-Length: 142 
     
    
    46 50 4c 59 03 01 02 00 00 00 00 82 02 01 cf 32 
    a2 57 14 b2 52 4f 8a a0 ad 7a f1 64 e3 7b cf 44 
    24 e2 00 04 7e fc 0a d6 7a fc d9 5d ed 1c 27 30 
    bb 59 1b 96 2e d6 3a 9c 4d ed 88 ba 8f c7 8d e6 
    4d 91 cc fd 5c 7b 56 da 88 e3 1f 5c ce af c7 43 
    19 95 a0 16 65 a5 4e 19 39 d2 5b 94 db 64 b9 e4 
    5d 8d 06 3e 1e 6a f0 7e 96 56 16 2b 0e fa 40 42 
    75 ea 5a 44 d9 59 1c 72 56 b9 fb e6 51 38 98 b8 
    02 27 72 19 88 57 16 50 94 2a d9 46 68 8a 
    
    new request, connection 0, socket 15 type RAOP
    httpd receiving on socket 15, connection 0
    
    httpd: current connections:
    connection 0 type 1 socket 15  conn 0x7ee5a0070 RAOP ACTIVE CONNECTION
     
    httpd request received on socket 15, connection 0, method = POST, url = /fp-setup, protocol = RTSP/1.0
    conn_request
    
    POST /fp-setup RTSP/1.0
    X-Apple-ET: 32
    Content-Length: 164
    Content-Type: application/octet-stream
    CSeq: 2
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    46 50 4c 59 03 01 03 00 00 00 00 98 01 8f 1a 9c 
    6e 84 da f9 8f e5 2e 0a 8d d8 4a 6b c0 71 60 70 
    b2 73 c7 22 0d d2 1e 2c 01 40 d9 37 d7 f8 4a 4f 
    04 27 44 fd 37 a4 60 4e 19 a5 5b de eb 6f 76 14 
    e2 f5 77 56 55 ff dd 52 9d 1c b4 42 f7 3b aa 27 
    70 7d 0f 8c 21 a7 6a 8e 69 54 36 1c 6f df ed e0 
    29 76 b9 f7 c7 88 07 b1 85 fe 34 bf cb b8 41 ac 
    fd ee d0 59 2f 8e 6b 86 ef 1a 33 64 e9 cf 0f 95 
    79 1a 92 f7 3c 91 df f2 a7 5c d7 b4 66 aa ea 7a 
    ce d7 4b 0f 7d ff ef eb 0c 56 9b 13 83 2e 34 48 
    ea 2b a7 14 
    
    Handling request POST with URL /fp-setup
    RTSP/1.0 200 OK 
    Audio-Jack-Status: connected; type=digital 
    Content-Type: application/octet-stream 
    Server: AirTunes/220.68 
    CSeq: 2 
    Content-Length: 32 
     
    
    46 50 4c 59 03 01 04 00 00 00 00 14 ce d7 4b 0f 
    7d ff ef eb 0c 56 9b 13 83 2e 34 48 ea 2b a7 14 
    
    new request, connection 0, socket 15 type RAOP
    httpd receiving on socket 15, connection 0
    
    httpd: current connections:
    connection 0 type 1 socket 15  conn 0x7ee5a0070 RAOP ACTIVE CONNECTION
     
    httpd request received on socket 15, connection 0, method = SETUP, url = rtsp://fe80::44:4cc1:a3c2:db24/11462837071921564400, protocol = RTSP/1.0
    conn_request
    
    SETUP rtsp:xxxxxxxxxxxxxxxxxxxxx
    Content-Length: 671
    Content-Type: application/x-apple-binary-plist
    CSeq: 3
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>et</key>
    	<integer>32</integer>
    	<key>statsCollectionEnabled</key>
    	<false/>
    	<key>eiv</key>
    	<data>
    	mZCSkUNc66vfb8YiXbRrZw==
    	</data>
    	<key>sessionUUID</key>
    	<string>9F142D95-8E10-4AF0-BE11-F3EE17075528</string>
    	<key>timingProtocol</key>
    	<string>NTP</string>
    	<key>diagnosticsAndUsage</key>
    	<true/>
    	<key>osName</key>
    	<string>iPhone OS</string>
    	<key>osBuildVersion</key>
    	<string>20H392</string>
    	<key>sourceVersion</key>
    	<string>695.5.1</string>
    	<key>timingPort</key>
    	<integer>56302</integer>
    	<key>isScreenMirroringSession</key>
    	<true/>
    	<key>osVersion</key>
    	<string>16.7.16</string>
    	<key>ekey</key>
    	<data>
            (2 lines data omitted, 64 chars/line)
    	</data>
    	<key>sessionCorrelationUUID</key>
    	<string>D82CD4AC-3FD6-4006-8F7B-A3E8D7F8AF66</string>
    	<key>internalBuild</key>
    	<false/>
    	<key>deviceID</key>
    	<string>xxxxxxxxxxxxxx</string>
    	<key>model</key>
    	<string>iPad6,11</string>
    	<key>name</key>
    	<string>iPad</string>
    	<key>macAddress</key>
    	<string>xxxxxxxxxxxxxxxx</string>
    </dict>
    </plist>
    
    Handling request SETUP with URL rtsp://xxxxxxxxxxxxxxx
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    SETUP 1
    connection request from iPad (iPad6,11) with deviceID = xxxxxxxxxxxxxxx
    
    eiv_len = 16
    16 byte aesiv (needed for AES-CBC audio decryption iv):
    99 90 92 91 43 5c eb ab df 6f c6 22 5d b4 6b 67 
    
    ekey_len = 72
    ekey:
    46 50 4c 59 01 02 01 00 00 00 00 3c 00 00 00 00 
    f6 6a 55 39 1b 65 cd 9a be f4 0c aa 4d c6 4c 20 
    00 00 00 10 48 33 4f 36 ca 87 0d 1d 91 4e 8f f9 
    4d d0 65 a7 b4 97 f8 35 f4 27 2e b1 6e 8a 1b 60 
    83 7e 62 7e b0 d2 28 1b 
    
    fairplay_decrypt ret = 0
    16 byte aeskey (fairplay-decrypted from ekey):
    35 20 c8 e8 1f 85 94 a8 f0 ec 8f 1c bb 99 70 86 
    
    Client identified as User-Agent: AirPlay/695.5.1
    timing_rport = 56302
    raop_ntp parse remote ip = fe80::0c83:d4c6:555d:37e1%14
    raop_ntp starting time
    raop_ntp local timing port socket 26 port UDP 64396
    
    raop_ntp send time type_t=82 packetlen = 32, now = 1784189159.211098
    80 d2 00 07 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 ee 03 0f 67 36 0a 84 be 
    
    raop_rtp parse remote ip = xxxxxxxxxxxxxxxe1%14
    raop_rtp_mirror parse remote ip = xxxxxxxxxxxxxxxx%14
    eport = 0, tport = 64396
    RTSP/1.0 200 OK 
    Audio-Jack-Status: connected; type=digital 
    Content-Type: application/x-apple-binary-plist 
    Server: AirTunes/220.68 
    CSeq: 3 
    Content-Length: 76 
     
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>timingPort</key>
    	<integer>64396</integer>
    	<key>eventPort</key>
    	<integer>0</integer>
    </dict>
    </plist>
    
    new request, connection 0, socket 15 type RAOP
    httpd receiving on socket 15, connection 0
    
    httpd: current connections:
    connection 0 type 1 socket 15  conn 0x7ee5a0070 RAOP ACTIVE CONNECTION
     
    httpd request received on socket 15, connection 0, method = GET, url = /info, protocol = RTSP/1.0
    conn_request
    
    GET /info RTSP/1.0
    X-Apple-ProtocolVersion: 1
    CSeq: 4
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    Handling request GET with URL /info
    RTSP/1.0 200 OK 
    Audio-Jack-Status: connected; type=digital 
    Content-Type: application/x-apple-binary-plist 
    Server: AirTunes/220.68 
    CSeq: 4 
    Content-Length: 887 
     
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>deviceID</key>
    	<string>xxxxxxxxxxxxxx</string>
    	<key>macAddress</key>
    	<string>xxxxxxxxxxx</string>
    	<key>pk</key>
    	<data>
    	bSovp5XXP084Gk8Yepab/VbqgBSCvdjhdRjmCHF/fac=
    	</data>
    	<key>features</key>
    	<integer>1384120038</integer>
    	<key>name</key>
    	<string>UxPlay@xxxxxxxxxxxxx</string>
    	<key>pi</key>
    	<string>2e388006-13ba-4041-9a67-25dd4a43d536</string>
    	<key>vv</key>
    	<integer>2</integer>
    	<key>statusFlags</key>
    	<integer>68</integer>
    	<key>keepAliveLowPower</key>
    	<integer>1</integer>
    	<key>sourceVersion</key>
    	<string>220.68</string>
    	<key>keepAliveSendStatsAsBody</key>
    	<true/>
    	<key>model</key>
    	<string>AppleTV3,2</string>
    	<key>initialVolume</key>
    	<real>0.0</real>
    	<key>audioLatencies</key>
    	<array>
    		<dict>
    			<key>type</key>
    			<integer>100</integer>
    			<key>inputLatencyMicros</key>
    			<integer>0</integer>
    			<key>audioType</key>
    			<string>default</string>
    			<key>outputLatencyMicros</key>
    			<false/>
    		</dict>
    		<dict>
    			<key>type</key>
    			<integer>101</integer>
    			<key>audioType</key>
    			<string>default</string>
    			<key>inputLatencyMicros</key>
    			<integer>0</integer>
    			<key>outputLatencyMicros</key>
    			<false/>
    		</dict>
    	</array>
    	<key>audioFormats</key>
    	<array>
    		<dict>
    			<key>audioOutputFormats</key>
    			<integer>67108860</integer>
    			<key>type</key>
    			<integer>100</integer>
    			<key>audioInputFormats</key>
    			<integer>67108860</integer>
    		</dict>
    		<dict>
    			<key>audioOutputFormats</key>
    			<integer>67108860</integer>
    			<key>type</key>
    			<integer>101</integer>
    			<key>audioInputFormats</key>
    			<integer>67108860</integer>
    		</dict>
    	</array>
    	<key>displays</key>
    	<array>
    		<dict>
    			<key>uuid</key>
    			<string>e0ff8a27-6738-3d56-8a16-cc53aacee925</string>
    			<key>widthPhysical</key>
    			<integer>0</integer>
    			<key>heightPhysical</key>
    			<integer>0</integer>
    			<key>width</key>
    			<integer>1920</integer>
    			<key>height</key>
    			<integer>1080</integer>
    			<key>widthPixels</key>
    			<integer>1920</integer>
    			<key>heightPixels</key>
    			<integer>1080</integer>
    			<key>rotation</key>
    			<false/>
    			<key>refreshRate</key>
    			<real>0.016666666666666666</real>
    			<key>maxFPS</key>
    			<integer>30</integer>
    			<key>overscanned</key>
    			<false/>
    			<key>features</key>
    			<integer>14</integer>
    		</dict>
    	</array>
    </dict>
    </plist>
    
    raop_ntp receive time type_t=83 packetlen = 32, now = 1784189159.220347 t1 = 34965.543883, t2 = 34965.543957
    80 d3 00 07 00 00 00 00 ee 03 0f 67 36 0a 84 be 
    83 ab 07 15 8b 3b f2 42 83 ab 07 15 8b 40 c6 2e 
    
    raop_ntp sync correction = -1784154193671802208
    new request, connection 0, socket 15 type RAOP
    httpd receiving on socket 15, connection 0
    
    httpd: current connections:
    connection 0 type 1 socket 15  conn 0x7ee5a0070 RAOP ACTIVE CONNECTION
     
    httpd request received on socket 15, connection 0, method = RECORD, url = rtsp://fe80::44:4cc1:a3c2:db24/11462837071921564400, protocol = RTSP/1.0
    conn_request
    
    RECORD rtsp://xxxxxxxxxxxxxxxxxx
    CSeq: 5
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    Handling request RECORD with URL rtsp://xxxxxxxxxxxxx
    raop_handler_record
    RTSP/1.0 200 OK 
    Audio-Latency: 11025 
    Audio-Jack-Status: connected; type=analog 
    Server: AirTunes/220.68 
    CSeq: 5 
    
    new request, connection 0, socket 15 type RAOP
    httpd receiving on socket 15, connection 0
    
    httpd: current connections:
    connection 0 type 1 socket 15  conn 0x7ee5a0070 RAOP ACTIVE CONNECTION
     
    httpd request received on socket 15, connection 0, method = SETUP, url = rtsp://fe80::44:4cc1:a3c2:db24/11462837071921564400, protocol = RTSP/1.0
    conn_request
    
    SETUP rtsp://xxxxxxxxxxxxxxxxxxx
    Content-Length: 204
    Content-Type: application/x-apple-binary-plist
    CSeq: 6
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>streams</key>
    	<array>
    		<dict>
    			<key>timestampInfo</key>
    			<array>
    				<dict>
    					<key>name</key>
    					<string>SubSu</string>
    				</dict>
    				<dict>
    					<key>name</key>
    					<string>BePxT</string>
    				</dict>
    				<dict>
    					<key>name</key>
    					<string>AfPxT</string>
    				</dict>
    				<dict>
    					<key>name</key>
    					<string>BefEn</string>
    				</dict>
    				<dict>
    					<key>name</key>
    					<string>EmEnc</string>
    				</dict>
    			</array>
    			<key>latencyMs</key>
    			<integer>100</integer>
    			<key>type</key>
    			<integer>110</integer>
    			<key>streamConnectionID</key>
    			<integer>-2595816776146466753</integer>
    		</dict>
    	</array>
    </dict>
    </plist>
    
    Handling request SETUP with URL rtsp://xxxxxxxxxxxxxx
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    type = 110
    streamConnectionID (needed for AES-CTR video decryption key and iv): 15850927297563084863
    raop_rtp_mirror starting mirroring
    raop_rtp_mirror local data port socket 27 port TCP 56718
    Mirroring initialized successfully
    RTSP/1.0 200 OK 
    Audio-Jack-Status: connected; type=digital 
    Content-Type: application/x-apple-binary-plist 
    Server: AirTunes/220.68 
    CSeq: 6 
    Content-Length: 85 
     
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>streams</key>
    	<array>
    		<dict>
    			<key>dataPort</key>
    			<integer>56718</integer>
    			<key>type</key>
    			<integer>110</integer>
    		</dict>
    	</array>
    </dict>
    </plist>
    
    new request, connection 0, socket 15 type RAOP
    httpd receiving on socket 15, connection 0
    
    httpd: current connections:
    connection 0 type 1 socket 15  conn 0x7ee5a0070 RAOP ACTIVE CONNECTION
     
    httpd request received on socket 15, connection 0, method = SET_PARAMETER, url = rtsp://xxxxxxxxxxprotocol = RTSP/1.0
    conn_request
    
    SET_PARAMETER rtsp:/xxxxxxxxx
    Content-Length: 20
    Content-Type: text/parameters
    CSeq: 7
    DACP-ID: FDEBD2B3CFFA48D0
    Active-Remote: 2096196447
    User-Agent: AirPlay/695.5.1
    
    volume: -20.000000 
    
    Handling request SET_PARAMETER with URL rtsp://xxxxxxxxxxxxx
    RTSP/1.0 200 OK 
    Audio-Jack-Status: connected; type=digital 
    Server: AirTunes/220.68 
    CSeq: 7 
    
    raop_rtp_mirror accepting client
    
    Received unencrypted codec packet from client: payload_size 37 header 01 00 16 01  ts_client = 34965.777181
    raop_rtp_mirror: unidentified extra header data  240.000000, 0.000000
    begin video stream wxh = 1440x1080; source 1440x1080
    raop_rtp_mirror width_source = 1440.000000 height_source = 1080.000000 width = 1440.000000 height = 1080.000000
    GStreamer h264 bus message pipeline2 new-clock  
    GStreamer h264 bus message videoscale0 state-changed PAUSED PLAYING
    GStreamer h264 bus message videoconvert0 state-changed PAUSED PLAYING
    GStreamer h264 bus message h264parse0 state-changed PAUSED PLAYING
    GStreamer h264 bus message queue2 state-changed PAUSED PLAYING
    GStreamer h264 bus message video_source state-changed PAUSED PLAYING
    video_pipeline state change from PAUSED to PLAYING
    
    raop_rtp_mirror: SPS+PPS header size = 6
    raop_rtp_mirror h264 SPS+PPS header:
    01 64 00 28 ff e1 
    
    raop_rtp_mirror SPS NAL size = 18
    raop_rtp_mirror h264 Sequence Parameter Set:
    27 64 00 28 ac 13 14 50 16 80 89 f9 66 e0 20 20 
    20 40 
    
    raop_rtp_mirror PPS NAL size = 4
    raop_rtp_mirror h264 Picture Parameter Set:
    28 ee 3c b0 
    
    remainder size = 4
    remainder of SPS+PPS packet:
    02 00 00 00 
    
    raop_rtp video: now = 1784189159.626513, ntp = 1784189159.448984, latency =  0.177529, ts = 34965.777181, 00 10 00 00  h264, size: 13649
    *** invalid ntp_time < gst_video_pipeline_base_time
    1784189159.448984 ntp_time
    1784189159.522127 base_time
    adjust timestamps by 0.073143 secs
    Begin streaming to GStreamer video pipeline
    raop_rtp video: now = 1784189159.626844, ntp = 1784189159.482317, latency =  0.144527, ts = 34965.810515, 00 00 00 00  h264, 
    
    
  4. jaslrobinson commented on Jul 16, 2026

    @jaslrobinson
    Author
  5. fduncanh commented on Jul 16, 2026

    @fduncanh
    Collaborator

    Its difficult to go back to iOS 26 from the iOS 27 public beta, so it's not easy to know if your issue is iOS27 changes or something else.

    Thanks for alerting us to possible issues with the forthcoming iOS 27

  6. LukeProducts commented on Aug 1, 2026

    @LukeProducts

    Adding another iOS 27 data point, as requested by @fduncanh in #539.

    On an iPhone 15 Pro (iPhone16,1) running iOS 27.0 beta build 24A5355q, with client AirPlay/980.63.2, UxPlay 1.74 built on Windows 11/MSYS2 UCRT64 does establish the mirror data connection and receives video frames.

    Initially, the connection reached mirror setup but then aborted with:

    raop_rtp_mirror: received type 0x01 packet with no payload
    this indicates non-h264 video but Airplay features bit 42 (SupportsScreenMultiCodec) is not set
    

    Starting UxPlay with -h265 fixed that behavior on this client; the client mirrors in HEVC. My behavior is therefore different from this issue: the client does open the mirror data connection.

    I no longer have a full -d capture of the initial SETUP plist, so I cannot confirm whether this client sent combinedGetInfoWithControlSetup. This test also used AirPlay/980.63.2, whereas the report here uses AirPlay/980.67.2, so this result does not rule out a change in the later beta client.

  7. fduncanh commented on Aug 26, 2026

    @fduncanh
    Collaborator

    @LukeProducts thanks for your valuable input. We still have not got a iOS27beta test setup, and hope that iOS27 doesn't break stuff.

  8. fduncanh commented on Aug 29, 2026

    @fduncanh
    Collaborator

    We now have a test system with iPadOS 27 beta 5, to see if iOS 27 is causing any new issues.

  9. fduncanh commented on Aug 29, 2026

    @fduncanh
    Collaborator

    UxPlay with iPadOS 27 public beta 5 (build 24A5424a) client seems to work fine. have not noticed any issues yet

    <dict>
            <key>osVersion</key>
            <string>27.0</string>
            <key>ekey</key>
            <data>
            (2 lines data omitted, 64 chars/line)
            </data>
            <key>internalBuild</key>
            <false/>
            <key>et</key>
            <integer>32</integer>
            <key>combinedGetInfoWithControlSetup</key>
            <true/>
            <key>name</key>
            <string>iPad</string>
            <key>sessionCorrelationUUID</key>
            <string>4C891967-79BD-4208-80CD-A34E34DC4C3E</string>
            <key>diagnosticsAndUsage</key>
            <true/>
            <key>timingProtocol</key>
            <string>NTP</string>
            <key>deviceID</key>
            <string>xxxxxxxxxxxxxx</string>
            <key>eiv</key>
            <data>
            Bp10vR+21IJy98WWUCHbOw==
            </data>
            <key>timingPort</key>
            <integer>62055</integer>
            <key>sourceVersion</key>
            <string>980.77.1</string>
            <key>isScreenMirroringSession</key>
            <true/>
            <key>model</key>
            <string>iPad12,2</string>
            <key>statsCollectionEnabled</key>
            <false/>
            <key>macAddress</key>
            <string>XXXXXXXXXXXXX</string>
            <key>sessionUUID</key>
            <string>BD19DA56-D295-41B1-B7D4-EE297ADAF5A5</string>
            <key>osBuildVersion</key>
            <string>24A5424a</string>
            <key>updateSessionRequest</key>
            <false/>
            <key>osName</key>
            <string>iPhone OS</string>
    </dict>
    
  10. fduncanh commented on Aug 29, 2026

    @fduncanh
    Collaborator

    see also #540

  11. fduncanh commented on Aug 29, 2026

    @fduncanh
    Collaborator

    Initially, the connection reached mirror setup but then aborted with:

    raop_rtp_mirror: received type 0x01 packet with no payload
    this indicates non-h264 video but Airplay features bit 42 (SupportsScreenMultiCodec) is not set

    Starting UxPlay with -h265 fixed that behavior on this client; the client mirrors in HEVC. My behavior is therefore different from this issue: the client does open the mirror data connection.

    Its probably time to make -h265 on by default, and choose the video size according to whether h264 or h265 is received.

  12. fduncanh commented on Sep 16, 2026

    @fduncanh
    Collaborator

    (probably?) fixed with updates that address iOS and wlroots issues since this issue was posted.

    @jaslrobinson Please close, or confirm that it's still an issue (2026-09-16) .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions