Skip to content
New issue

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

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

Already on GitHub? # 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. Он думает, что отображает статическую картинку

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants