home-assistant/core · error · HomeAssistantError

streaming_not_supported

Error message

streaming_not_supported

What it means

HomeAssistantError with translation key 'streaming_not_supported' raised when playing media on an Apple TV where neither streaming path is available: the media id is not usable with RAOP stream_file, and the device lacks the PlayUrl feature (or the URL is not absolute/has no host). It surfaces as a user-facing action error localized from the integration's strings.json.

Source

Thrown at homeassistant/components/apple_tv/media_player.py:389

            else:
                media_id = async_process_play_media_url(self.hass, play_item.url)
            media_type = MediaType.MUSIC

        use_stream_file = self._is_feature_available(FeatureName.StreamFile) and (
            media_type == MediaType.MUSIC or await is_streamable(media_id)
        )

        try:
            if use_stream_file:
                _LOGGER.debug("Streaming %s via RAOP", media_id)
                await self.atv.stream.stream_file(media_id)
            elif self._is_feature_available(FeatureName.PlayUrl) and (
                (parsed_url := URL(media_id)).is_absolute() and parsed_url.host
            ):
                _LOGGER.debug("Playing %s via AirPlay", media_id)
                await self.atv.stream.play_url(media_id)
            else:
                raise HomeAssistantError(
                    translation_domain=DOMAIN,
                    translation_key="streaming_not_supported",
                )
        except exceptions.NotSupportedError as ex:
            raise HomeAssistantError(
                translation_domain=DOMAIN,
                translation_key="streaming_not_supported",
            ) from ex
        except (
            exceptions.BlockedStateError,
            exceptions.ConnectionLostError,
            exceptions.InvalidStateError,
            exceptions.OperationTimeoutError,
            exceptions.PlaybackError,
            exceptions.ProtocolError,
        ) as ex:
            raise HomeAssistantError(
                translation_domain=DOMAIN,

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Pass an absolute URL including scheme and host (e.g. http://192.168.1.10/audio.mp3) served from a host reachable by the Apple TV
  2. Check the device's supported features in the integration (play_url availability) before sending URLs
  3. For local files, ensure they are exposed over HTTP(S) rather than relying on stream_file on unsupported setups

Example fix

# before
action:
  service: media_player.play_media
  target: {entity_id: media_player.apple_tv}
  data: {media_content_type: url, media_content_id: "track.mp3"}
# after
action:
  service: media_player.play_media
  target: {entity_id: media_player.apple_tv}
  data: {media_content_type: url, media_content_id: "http://192.168.1.10/media/track.mp3"}
Defensive patterns

Strategy: validation

Validate before calling

from yarl import URL

def is_playable_url(media_id: str) -> bool:
    u = URL(media_id)
    return u.is_absolute() and bool(u.host)

Try / catch

try:
    await hass.services.async_call("media_player", "play_media", {...})
except HomeAssistantError as ex:
    if "streaming_not_supported" in str(ex) or ex.translation_key == "streaming_not_supported":
        # fall back to casting/TTS alternative

Prevention

When it happens

Trigger: Calling play_media with a media_id that is neither a local file/stream RAOP can handle nor an absolute http(s) URL while the device has no FeatureName.PlayUrl; e.g. a relative path, a non-URL string, or a URL passed to a device where AirPlay play_url is unsupported.

Common situations: Scripts sending a plain name or playlist id as media_id; device model/tvOS version without play_url support; URL construction bug in a calling automation producing 'file.mp3' instead of 'http://host/file.mp3'.

Related errors


AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14). Data as JSON: /api/errors/94db48592cecee18. Report an issue: GitHub.