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
- 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
- Check the device's supported features in the integration (play_url availability) before sending URLs
- 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
- Always send absolute URLs with scheme+host to play_media
- Serve local media over HTTP reachable from the TV
- Check the entity's supported features before scripting playback
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
- stream_failed
- {address}: Authentication failed, try reconfiguring device:
- Command not found. Exiting sequence
- keyboard_not_available
- keyboard_error
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/94db48592cecee18.
Report an issue: GitHub.