Детектор черного экрана: различия между версиями

Материал из SmartPlayer
Нет описания правки
Строка 4: Строка 4:
<!--T:2-->
<!--T:2-->
=== '''Причина''' ===
=== '''Причина''' ===
В устройствах, работающих на местах во время проигрывания контента, появляется «чёрный экран». При этом трансляция в личном кабинете продолжает работать.
В устройствах, работающих на местах во время проигрывания контента, появляется «чёрный экран». При этом трансляция в личном кабинете продолжает работать. Эта проблема может возникнуть по нескольким причинам:
Эта ситуация возникла из-за ошибок при запуске трансляции, поэтому пользователь видел заместитель (placeholder).<br>
* Из-за ошибок при запуске трансляции. В итоге пользователь видит placeholder.  
 
* Пользователь загрузил видео, которое использует кодек не поддерживаемый программой
Такое решение позволит снизить процент негативных реакций от клиента, поскольку оперативность получения данных о проблеме и ее быстрое решение уменьшают осведомленность клиента о проблеме.<br>
* Проблемы с клиентским приложением (баг)
 
Поэтому было решено сделать автоматизированное решение, которое поможет более оперативно оповещать и работать с этой проблемой.  
Для автоматизации и решения проблемы было решено создать «Анализатор скриншотов». Он необходим для более быстрой реакции разработчиков на проблему. Это позволит снизить процент негативных реакций от клиента. Оперативность получения данных о проблеме и её быстрое решение уменьшить знание клиента о проблеме.<br>
<!--T:3-->
''Примечание:''
Данный функционал не доступен пользователю в личном кабинете.
=== '''Концепт решения''' ===
=== '''Концепт решения''' ===
У каждого клиента/компании есть свой ID связанный с сервером. К этому ID привязываются все устройства компании.
Для решения проблемы и ее автоматизации было решено создать «Детектор черных экранов». Его функция – заранее предупреждать нас о случившейся на конкретном устройстве проблеме.  Этот функционал позволяет работать нам проактивно и не ждать оповещения о проблеме от клиента.
С определенным промежутком сервер отправляет на устройства «ивент».<br>
{{Note|Данный функционал не доступен пользователю в личном кабинете. Обратитесь для его включения к системному администратору.}}
Запуская «ивент» устройство с помощью детектора проверяет наличие «черного экрана», делая скриншот во время запуска.<br>
=== '''Принципе действия''' ===
 
У каждого компании работающей в нашем приложении есть свой персональный ID. Его можно найти в личном кабинете. К этому ID привязываются все устройства компании.<br>
После запуска детектора возможно получить два вида ответа:
При возникновении ошибки с «чёрным» экраном, на одном или нескольких устройствах наш сервер отправляет «ивент» на эти устройства. Устройство этот «ивент» запускает. В момент запуска «ивента» «детектор» делает скриншот. И по этому скриншоту проверяется наличие «черного» экрана.<br>
После запуска детектора возможно получить два вида ответа:
# После запуска «ивента» черного экрана нет - система продолжает работу в штатном режиме.
# После запуска «ивента» черного экрана нет - система продолжает работу в штатном режиме.
# После запуска «ивента» чёрный экран обнаружен - сервер отправляет повторный, проверочный "ивент". Промежуток для повторной отправки составляет 10 секунд.
# После запуска «ивента» чёрный экран обнаружен - сервер отправляет повторный, проверочный "ивент". Промежуток для повторной отправки составляет 10 секунд.
Если же и во второй раз отправляется черный экран, то со стороны сервера отправляется письмо на почту.<br>
Если вариант «2» подтверждает наличие проблемы, то со стороны сервера отправляется уведомление на почту. Очень важно, чтобы указанная почта была привязана к серверу, иначе уведомления о проблеме приходить не будут.
<!--T:4-->
'''Важно''': Указанная почта должна быть привязана к серверу.<br>
 
Если и во второй раз обнаруживается черный экран, то со стороны сервера отправляется письмо на почту.
=== '''Тонкости и нюансы''' ===
1. Для правильного работы необходимо чтобы placeholder с белой точкой воспринимался как черный экран. Поэтому используется не абсолютная проверка.<br>
 
2. '''Актуально только при проигрывании видео.''' При наличии root прав на устройстве – детектор работает нормально. Но, если, на устройстве нет root прав детектор не сможет сделать скриншот.<br>
'''Исключения:'''
Скриншот доступен:</div>
- если приложение подписано «подписью разработчика» (уровень прав – Signage)<br>
 
- Некоторые устройства (Vestel, Hikvision, Phillips) могут сделать скриншот без root прав из-за особенностей прошивки.<br>
 
3. Если пользователь попробует сделать скриншот без root прав, то создается «пустой скриншот» с надписью «Идёт воспроизведение видео. Отсутствуют права для снятия скриншота».<br>
 
4. Информация от сервера к разработчикам отправляется через ивент. Внутри отправленного «ивента» сервер ждет callback от разработчиков.<br>
 
5. Тайм – аут “Callback” на сервере составляет – 30 секунд.
<!--T:5-->
=== '''Реализация''' ===
Серверное приложение, через определенны промежуток времени («N», настраивается через CLI) отправляет «ивент» на устройства. Устройства после получения «ивента» снимают скриншоты со всех онлайн устройств в компании. Далее происходит анализ скриншота по цвету (картинка «не черная»). Результат этого анализа/ответ отправляется обратно на сервер.<br>
 
Если картинка черная, серверное приложение повторно делает запрос на данное устройство, спустя 10 секунд. Далее цикл проверки на устройствах проводится еще раз и результат также снова отправляется на сервер. Это делается для того, чтобы точно зафиксировать проблему (возможно на экран попал черный кадр в видео).<br>
 
При подтверждении нештатной ситуации отправляется письмо на почту администратора. Эта почта указывается при включении этой функциональности.<br>
 
Скриншоты, снятые с помощью детектора, не хранятся вечно. Срок хранения скриншота три дня. Также они не должны появляться в «истории скриншота».
<!--T:6-->
=== '''Итоговый результат''' ===
=== '''Итоговый результат''' ===
Детектор черных экранов запускается только для конкретных компаний/заказчиков. По умолчанию он выключен.
После получения информации о проблеме начинается оперативное ее решение. Таким образом мы всегда знаем о проблеме первые и не заставляем лишний раз беспокоиться наших клиентов.
Включение и выключение мониторинга доступно через CLI.
При включении данные передаются в настройки CLI.
Это:
*ID компании, для которой включаем детектор
* Можно передать платформу (или несколько платформ), для которой необходимо запустить мониторинг.
'''Например:''' передаем ANDROID и мониторинг включается только для устройств ANDROID
*E-mail адрес или несколько адресов на которые должно отправляться уведомление о нештатной ситуации
*Указанное время хранения скриншотов (по умолчанию 3 дня)

Версия от 11:45, 3 августа 2023

Описание ситуации

У пользователя начались проблемы с трансляциями. Во время воспроизведения трансляций на устройствах контент прерывается и появляется «чёрный экран. Из-за пользователь недоволен нашей работой и продуктом.

Причина

В устройствах, работающих на местах во время проигрывания контента, появляется «чёрный экран». При этом трансляция в личном кабинете продолжает работать. Эта проблема может возникнуть по нескольким причинам:

  • Из-за ошибок при запуске трансляции. В итоге пользователь видит placeholder.
  • Пользователь загрузил видео, которое использует кодек не поддерживаемый программой
  • Проблемы с клиентским приложением (баг)

Поэтому было решено сделать автоматизированное решение, которое поможет более оперативно оповещать и работать с этой проблемой.

Концепт решения

Для решения проблемы и ее автоматизации было решено создать «Детектор черных экранов». Его функция – заранее предупреждать нас о случившейся на конкретном устройстве проблеме. Этот функционал позволяет работать нам проактивно и не ждать оповещения о проблеме от клиента.

Данный функционал не доступен пользователю в личном кабинете. Обратитесь для его включения к системному администратору.

Принципе действия

У каждого компании работающей в нашем приложении есть свой персональный ID. Его можно найти в личном кабинете. К этому ID привязываются все устройства компании.
При возникновении ошибки с «чёрным» экраном, на одном или нескольких устройствах наш сервер отправляет «ивент» на эти устройства. Устройство этот «ивент» запускает. В момент запуска «ивента» «детектор» делает скриншот. И по этому скриншоту проверяется наличие «черного» экрана.

После запуска детектора возможно получить два вида ответа:
  1. После запуска «ивента» черного экрана нет - система продолжает работу в штатном режиме.
  2. После запуска «ивента» чёрный экран обнаружен - сервер отправляет повторный, проверочный "ивент". Промежуток для повторной отправки составляет 10 секунд.

Если вариант «2» подтверждает наличие проблемы, то со стороны сервера отправляется уведомление на почту. Очень важно, чтобы указанная почта была привязана к серверу, иначе уведомления о проблеме приходить не будут.

Итоговый результат

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