mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Fix camera play stream (#40641)
Co-authored-by: Justin Wong <46082645+uvjustin@users.noreply.github.com>
This commit is contained in:
parent
af88a78aae
commit
59daab9434
@ -19,6 +19,7 @@ from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView
|
||||
from homeassistant.components.media_player.const import (
|
||||
ATTR_MEDIA_CONTENT_ID,
|
||||
ATTR_MEDIA_CONTENT_TYPE,
|
||||
ATTR_MEDIA_EXTRA,
|
||||
DOMAIN as DOMAIN_MP,
|
||||
SERVICE_PLAY_MEDIA,
|
||||
)
|
||||
@ -46,7 +47,7 @@ from homeassistant.helpers.config_validation import ( # noqa: F401
|
||||
PLATFORM_SCHEMA,
|
||||
PLATFORM_SCHEMA_BASE,
|
||||
)
|
||||
from homeassistant.helpers.entity import Entity
|
||||
from homeassistant.helpers.entity import Entity, entity_sources
|
||||
from homeassistant.helpers.entity_component import EntityComponent
|
||||
from homeassistant.helpers.network import get_url
|
||||
from homeassistant.loader import bind_hass
|
||||
@ -695,14 +696,47 @@ async def async_handle_play_stream_service(camera, service_call):
|
||||
options=camera.stream_options,
|
||||
)
|
||||
data = {
|
||||
ATTR_ENTITY_ID: entity_ids,
|
||||
ATTR_MEDIA_CONTENT_ID: f"{get_url(hass)}{url}",
|
||||
ATTR_MEDIA_CONTENT_TYPE: FORMAT_CONTENT_TYPE[fmt],
|
||||
}
|
||||
|
||||
await hass.services.async_call(
|
||||
DOMAIN_MP, SERVICE_PLAY_MEDIA, data, blocking=True, context=service_call.context
|
||||
)
|
||||
# It is required to send a different payload for cast media players
|
||||
cast_entity_ids = [
|
||||
entity
|
||||
for entity, source in entity_sources(hass).items()
|
||||
if entity in entity_ids and source["domain"] == "cast"
|
||||
]
|
||||
other_entity_ids = list(set(entity_ids) - set(cast_entity_ids))
|
||||
|
||||
if cast_entity_ids:
|
||||
await hass.services.async_call(
|
||||
DOMAIN_MP,
|
||||
SERVICE_PLAY_MEDIA,
|
||||
{
|
||||
ATTR_ENTITY_ID: cast_entity_ids,
|
||||
**data,
|
||||
ATTR_MEDIA_EXTRA: {
|
||||
"stream_type": "LIVE",
|
||||
"media_info": {
|
||||
"hlsVideoSegmentFormat": "fmp4",
|
||||
},
|
||||
},
|
||||
},
|
||||
blocking=True,
|
||||
context=service_call.context,
|
||||
)
|
||||
|
||||
if other_entity_ids:
|
||||
await hass.services.async_call(
|
||||
DOMAIN_MP,
|
||||
SERVICE_PLAY_MEDIA,
|
||||
{
|
||||
ATTR_ENTITY_ID: other_entity_ids,
|
||||
**data,
|
||||
},
|
||||
blocking=True,
|
||||
context=service_call.context,
|
||||
)
|
||||
|
||||
|
||||
async def async_handle_record_service(camera, call):
|
||||
|
@ -3,7 +3,7 @@
|
||||
"name": "Google Cast",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/cast",
|
||||
"requirements": ["pychromecast==7.2.1"],
|
||||
"requirements": ["pychromecast==7.5.0"],
|
||||
"after_dependencies": ["cloud", "http", "media_source", "tts", "zeroconf"],
|
||||
"zeroconf": ["_googlecast._tcp.local."],
|
||||
"codeowners": ["@emontnemery"]
|
||||
|
@ -21,6 +21,7 @@ from homeassistant.components import media_source, zeroconf
|
||||
from homeassistant.components.http.auth import async_sign_path
|
||||
from homeassistant.components.media_player import PLATFORM_SCHEMA, MediaPlayerEntity
|
||||
from homeassistant.components.media_player.const import (
|
||||
ATTR_MEDIA_EXTRA,
|
||||
MEDIA_TYPE_MOVIE,
|
||||
MEDIA_TYPE_MUSIC,
|
||||
MEDIA_TYPE_TVSHOW,
|
||||
@ -574,7 +575,9 @@ class CastDevice(MediaPlayerEntity):
|
||||
except NotImplementedError:
|
||||
_LOGGER.error("App %s not supported", app_name)
|
||||
else:
|
||||
self._chromecast.media_controller.play_media(media_id, media_type)
|
||||
self._chromecast.media_controller.play_media(
|
||||
media_id, media_type, **kwargs.get(ATTR_MEDIA_EXTRA, {})
|
||||
)
|
||||
|
||||
# ========== Properties ==========
|
||||
@property
|
||||
|
@ -71,6 +71,7 @@ from .const import (
|
||||
ATTR_MEDIA_DURATION,
|
||||
ATTR_MEDIA_ENQUEUE,
|
||||
ATTR_MEDIA_EPISODE,
|
||||
ATTR_MEDIA_EXTRA,
|
||||
ATTR_MEDIA_PLAYLIST,
|
||||
ATTR_MEDIA_POSITION,
|
||||
ATTR_MEDIA_POSITION_UPDATED_AT,
|
||||
@ -139,6 +140,7 @@ MEDIA_PLAYER_PLAY_MEDIA_SCHEMA = {
|
||||
vol.Required(ATTR_MEDIA_CONTENT_TYPE): cv.string,
|
||||
vol.Required(ATTR_MEDIA_CONTENT_ID): cv.string,
|
||||
vol.Optional(ATTR_MEDIA_ENQUEUE): cv.boolean,
|
||||
vol.Optional(ATTR_MEDIA_EXTRA, default={}): dict,
|
||||
}
|
||||
|
||||
ATTR_TO_PROPERTY = [
|
||||
|
@ -12,6 +12,7 @@ ATTR_MEDIA_CONTENT_ID = "media_content_id"
|
||||
ATTR_MEDIA_CONTENT_TYPE = "media_content_type"
|
||||
ATTR_MEDIA_DURATION = "media_duration"
|
||||
ATTR_MEDIA_ENQUEUE = "enqueue"
|
||||
ATTR_MEDIA_EXTRA = "extra"
|
||||
ATTR_MEDIA_EPISODE = "media_episode"
|
||||
ATTR_MEDIA_PLAYLIST = "media_playlist"
|
||||
ATTR_MEDIA_POSITION = "media_position"
|
||||
|
@ -1265,7 +1265,7 @@ pycfdns==0.0.1
|
||||
pychannels==1.0.0
|
||||
|
||||
# homeassistant.components.cast
|
||||
pychromecast==7.2.1
|
||||
pychromecast==7.5.0
|
||||
|
||||
# homeassistant.components.cmus
|
||||
pycmus==0.1.1
|
||||
|
@ -613,7 +613,7 @@ pyblackbird==0.5
|
||||
pybotvac==0.0.17
|
||||
|
||||
# homeassistant.components.cast
|
||||
pychromecast==7.2.1
|
||||
pychromecast==7.5.0
|
||||
|
||||
# homeassistant.components.coolmaster
|
||||
pycoolmasternet-async==0.1.2
|
||||
|
Loading…
x
Reference in New Issue
Block a user