Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблемы со стримингом музыки на Apple TV #594

Open
MacSergey opened this issue Dec 29, 2024 · 12 comments
Open
Assignees
Labels
bug Something isn't working

Comments

@MacSergey
Copy link

Подключена Яндекс станция мини 3 через вашу интеграцию, так же подключен HomePod Mini через интеграцию Apple TV.
В источнике у станции выбираю Homepod и музыка из станции начинает играть на Homepod, но только до того момента пока песня не закончится. После этого воспроизведение следующей песни как бы начинается, но ничего не слышно. Если я переключу песню вручную (до окончания), следующая песня будет играть нормально

image
image

@AlexxIT AlexxIT added the bug Something isn't working label Dec 29, 2024
@AlexxIT
Copy link
Owner

AlexxIT commented Dec 29, 2024

Думаю проблема с AirPlay. У меня, к сожалению, нет таких устройств для теста

@MacSergey
Copy link
Author

В логе есть ошибки, не уверен какой именно интеграцией они вызваны

home-assistant_yandex_station_2024-12-29T19-50-08.750Z.log

@MacSergey
Copy link
Author

Попробовал выводить музыку на телевизор Самсунг и тоже работает не корректно. следующая песня включается, но на перемотку не реагирует

@MacSergey
Copy link
Author

MacSergey commented Dec 29, 2024

Видимо изначальная проблема с не воспроизведением следующей песни действительно связана с работой AirPlay в интеграции AppleTV. Установил Music Assistant и добавил в него HomePod через AirPlay и вывил этот медиаплеер в HA. через вот такую колбасу интеграций все работает норм с одним нюансом: с перемоткой точно такая же проблема как и при выводе на телевизор самсунг и это уже более вероятно ошибка в вашей интеграции

@MacSergey
Copy link
Author

После некоторых дополнительных тестов я пришел к выводу, что состояние медиа плеера яндекс станции и медиаплеера на который передается воспроизведение не синхронизируются между друг другом. Перемотка песни в одном месте не перематывает ее в другом. Так же метаданные не передаются

image
image

@AlexxIT
Copy link
Owner

AlexxIT commented Dec 30, 2024

Позиция воспроизведения действительно не синхронизируется. Этого никогда и не было в планах.
Метаданные сильно зависят от интеграции стороннего плеера. Сейчас поддерживается только Chromecast устройства.

@AlexxIT AlexxIT changed the title Воспроизводится не продолжается после окончания песни Проблемы со стримингом музыки на Apple TV Dec 30, 2024
@MacSergey
Copy link
Author

Я посмотрел немного код и документацию и нашел что у медиа плеера есть действие установления позиции https://www.home-assistant.io/integrations/media_player/#action-media_playermedia_seek почему бы не вызывать его при перемотке?

@MacSergey
Copy link
Author

я добавил этот метод в класс YandexStation и перемотка заработала. Можно добавить это в интеграцию?

async def async_media_seek(self, position):
     await super().async_media_seek(position)

     if self.local_state:
         source = self.sync_sources[self._attr_source]
         data = {
             "entity_id": source["entity_id"],
             "seek_position": position
         }

         await self.hass.services.async_call("media_player", "media_seek", data)

@AlexxIT
Copy link
Owner

AlexxIT commented Dec 31, 2024

Такое можно. Но этот код не будет работать, если позицию поменять голосом с колонки. Что собственно и было основным смыслом синхронизации.

@MacSergey
Copy link
Author

Пошаманил с кодом, вроде перемотка и с колонки, в том числе голосом, работают и в другую сторону из плеера ХА. После нг сделаю пул реквест

@Laxilef
Copy link
Contributor

Laxilef commented Jan 8, 2025

Добавить возможность перемотки я уже предлагал, и оно даже как-то работало на тот момент. У себя использовал такой метод:

from homeassistant.const import (
    ATTR_SUPPORTED_FEATURES,
)

# ...

    async def async_media_seek(self, position):
        if self.local_state:
            await self.glagol.send({"command": "rewind", "position": position})
        
        if self.sync_enabled:
            source = self.sync_sources[self._attr_source]
            state = self.hass.states.get(source["entity_id"])
            
            if state.attributes[ATTR_SUPPORTED_FEATURES] & MediaPlayerEntityFeature.SEEK:
                data = {
                    "entity_id": source["entity_id"],
                    "seek_position": position,
                }
                await self.hass.services.async_call("media_player", "media_seek", data)

upd: если стримить в хромкаст ссылки из интеграции вида http://localhost:8123/api/yandex_station/..., то перемотка не работает в принципе.
upd2: заголовок Range прокси из интеграции обрабатывает корректно.
upd3: в действительности, если соединение уже открыто, то Range работает некорректно, проверить можно через браузер, если добавить

                response.headers.update({
                    "Content-Type": MIME_TYPES[ext],
                })

после

response.headers.update(r.headers)

@dmr1987
Copy link

dmr1987 commented Jan 8, 2025

Исправлено #609
Надо остановить стриминг на AirPlay устройстве. А потом передать в него новый трек

@AlexxIT AlexxIT self-assigned this Jan 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants