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

В режиме караоке при трансляции по Chromecast трансляция в определенный момент прерывается #495

Closed
x-iLex-x opened this issue Apr 16, 2024 · 9 comments
Assignees
Labels
bug Something isn't working

Comments

@x-iLex-x
Copy link

x-iLex-x commented Apr 16, 2024

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

В журнале следующая ошибка:

Регистратор: aiohttp.server
Источник: /usr/local/lib/python3.12/site-packages/aiohttp/web_protocol.py:421
Первое сообщение: 12:37:34 (1 сообщений)
Последнее сообщение: 12:37:34

Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/aiohttp/web_protocol.py", line 452, in _handle_request
    resp = await request_handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/web_app.py", line 543, in _handle
    resp = await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/web_middlewares.py", line 114, in impl
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 92, in security_filter_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 83, in forwarded_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 26, in request_context_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 88, in ban_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 236, in auth_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 32, in headers_middleware
    response = await handler(request)
               ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/http.py", line 73, in handle
    result = await handler(request, **request.match_info)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/camera/__init__.py", line 823, in get
    return await self.handle(request, camera)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/camera/__init__.py", line 863, in handle
    stream = await camera.handle_async_mjpeg_stream(request)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/yandex_station/camera.py", line 73, in handle_async_mjpeg_stream
    if cover := await self.get_cover():
                ^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/yandex_station/camera.py", line 158, in get_cover
    self.cover = draw_cover(entity.media_title, entity.media_artist, image)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/yandex_station/core/image.py", line 65, in draw_cover
    draw_text(ctx, artist, (0, HEIGHT2 + 25, WIDTH - 450, HEIGHT2), "mt", "grey", font)
  File "/config/custom_components/yandex_station/core/image.py", line 26, in draw_text
    lines = re.findall(r"(.{1,%d})(?:\s|$)" % line_width, text)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/re/__init__.py", line 217, in findall
    return _compile(pattern, flags).findall(string)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: expected string or bytes-like object, got 'NoneType'

UPD: Бывает, что трансляция зависает на одном месте и спустя какое то время прекращается, при этом, без каких-либо ошибок в журнале. Сущность camera. при этом переходит в состояние idle.

@AlexxIT AlexxIT added the bug Something isn't working label Apr 16, 2024
@AlexxIT AlexxIT self-assigned this Apr 16, 2024
@AlexxIT
Copy link
Owner

AlexxIT commented Apr 16, 2024

Вероятно это какое-то радио. Или другая песня с пустым Артистом

@x-iLex-x
Copy link
Author

Вероятно это какое-то радио. Или другая песня с пустым Артистом

В данном случае играла подборка "Плейлист дня".

@AlexxIT
Copy link
Owner

AlexxIT commented Apr 16, 2024

Желательно посмотреть атрибуты медиа плеера в момент проблемы. Но в любом случае я добавлю поддержку пустого Артиста

@x-iLex-x
Copy link
Author

Желательно посмотреть атрибуты медиа плеера в момент проблемы. Но в любом случае я добавлю поддержку пустого Артиста

Попробую отловить проблему и прислать атрибуты

@AlexxIT
Copy link
Owner

AlexxIT commented Apr 16, 2024

@AlexxIT AlexxIT closed this as completed Apr 16, 2024
@x-iLex-x
Copy link
Author

https://github.com/AlexxIT/YandexStation/releases/tag/v3.15.1

Проблема, вызывающая ошибку в лог исчезла.
Проблема с зависанием и самовольным уходом сущности camera. в состояние idle сохранилась.

Буду тестировать дальше.

@AlexxIT
Copy link
Owner

AlexxIT commented Apr 16, 2024

idle означает, что клиентов больше нет. Если б оно падало по вине интеграции - это было бы видно в логе

@x-iLex-x
Copy link
Author

idle означает, что клиентов больше нет. Если б оно падало по вине интеграции - это было бы видно в логе

Да, разобрался. Это из за особенности хромкаста: когда идет трансляция, сущность хромкаста остается в состоянии paused. А хромкаст при длительной паузе автоматом отрубается.

Думаю, если бы при трансляции сущности camera. состояние хромкаста было бы отлично от paused, то трансляция бы не прекращалась со временем.

@AlexxIT
Copy link
Owner

AlexxIT commented Apr 17, 2024

Да. В моих тестах хромкаст тоже засыпал. Возможно особенность mjpeg. Он думает, что отображает статическую картинку

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

2 participants