Skip to content

AirPlay RTSP session loses synchronization during /feedback heartbeat on tvOS 26.5 #2893

Description

@bdentzer

Environment

  • pyatv 0.18.0
  • Apple TV 4K (AppleTV6,2)
  • tvOS 26.5
  • macOS 26.5.2
  • Apple TV connected by Ethernet
  • ASUS ZenWiFi BQ16 mesh (Apple TV on satellite node)

Problem

Running a standalone connection with:

~/.homebridge/appletv-enhanced/.venv/bin/atvremote \
  --scan-hosts 192.168.1.XXX \
  push_updates

connects successfully.

Approximately 35–40 seconds later:

WARNING [pyatv.support.http]:
Got response without having a request:
HttpResponse(
 protocol='RTSP',
 code=200,
 CSeq=20,
 ...
)

Immediately afterward:

Connection lost

followed by:
TimeoutError

originating from:

pyatv/core/protocol.py

↓

pyatv/protocols/airplay/ap2_session.py

↓

_send_feedback()

↓

rtsp.feedback()

↓

exchange()

↓

TimeoutError

Full Traceback

Connection lost, stack trace below:

File ".../pyatv/core/protocol.py", line 57, in heartbeater
    await sender_func(message)

File ".../pyatv/protocols/airplay/ap2_session.py", line 95, in _send_feedback
    await self.rtsp.feedback()

File ".../pyatv/support/rtsp.py", line 248, in feedback
    return await self.exchange("POST", uri="/feedback")

File ".../pyatv/support/rtsp.py", line 320, in exchange
    raise TimeoutError(...)

Immediately before the timeout:

WARNING
Got response without having a request

HttpResponse(
 protocol='RTSP',
 code=200,
 message='OK',
 CSeq=20
)

Expected behavior

If a delayed or unexpected RTSP response is received:

  • either associate it with the outstanding request if appropriate,
  • or recover gracefully without terminating the AirPlay session.

The current behavior causes the AirPlay heartbeat to fail and the connection to be lost.

Additional question
Is this a known compatibility issue with tvOS 26.5’s AirPlay RTSP implementation, or does the warning

Got response without having a request

indicate a regression in the AirPlay heartbeat handling introduced after tvOS 26?

Activity

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions