Функционал моделей событий для видео аналитики: различия между версиями
м N.Bloshkin переименовал страницу Настройка событий для видео аналитики в Функционал моделей событий для видео аналитики |
|||
| (не показано 18 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
== '''Описание ситуации''' == | == '''Описание ситуации''' == | ||
В рамках реализации проекта видеоаналитики | В рамках реализации проекта видеоаналитики была переработана и расширена старая логика работы событий. Теперь пользователи могут добавлять события не только в настройках трансляции, а также создавать их в отдельной категории личного кабинета «События трансляций» в разделе «Трансляция». Заранее подготовленные события из «События трансляций» позволяют использовать новые типы событий связанных с серверным приложением, а добавление события по внешнему источнику.<br> | ||
Новая логика позволяет создавать события и переиспользовать их в различных трансляциях, а старая логика событий использовалась только для одной конкретной трансляции и не созданное событие нигде не сохранялось и не могло быть переисопльзовано. <br> | |||
Обе логики сейчас работают и позволяют взаимодействовать с трансляциями более гибко. | |||
=== '''Сценарий использования''' === | === '''Сценарий использования''' === | ||
Для правильной работы с событиями рекомендуется придерживаться следующего сценария использования функциональности: | Для правильной работы с событиями рекомендуется придерживаться следующего сценария использования функциональности: | ||
# Подготовить для | # Подготовить для дальнейших (идентификатор события, API-ключ, json-файл, событие, трансляцию). | ||
# Создать событие в категории «События | # Создать событие в категории «События трансляций» (добавить json-файл в качестве ключа и взять из события идентификатор). | ||
# Подготовить API-ключ из личного кабинета SmartPlayer. | # Подготовить API-ключ из личного кабинета SmartPlayer. | ||
# Подготовить POST-запрос по API с идентификатором события. | # Подготовить POST-запрос по API с идентификатором события. | ||
# Создать трансляции с привязкой к событиям. | # Создать трансляции с привязкой к событиям. | ||
# Привязать созданные трансляции к нужным устройствам. | # Привязать созданные трансляции к нужным устройствам. | ||
== '''Важная информация''' == | == '''Важная информация''' == | ||
{{Note|Новая логика работы событий реализована параллельно со старой. Со старой логикой работы событий можно ознакомиться [https://wiki.smartplayer.org/index.php/%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F_%D0%B2_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D0%B8 здесь]. В старой логике нельзя использовать в качестве ключа события «Внешний источник». Данный ключ доступен только в новой реализации при условии что событие создается в категории «События | {{Note|Новая логика работы событий реализована параллельно со старой. Со старой логикой работы событий можно ознакомиться [https://wiki.smartplayer.org/index.php/%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F_%D0%B2_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D0%B8 здесь]. В старой логике нельзя использовать в качестве ключа события «Внешний источник». Данный ключ доступен только в новой реализации при условии, что событие создается в категории «События трансляций».|warn}} | ||
=== '''Приоритеты событий''' === | === '''Приоритеты событий''' === | ||
В личном кабинете SmartPlayer | В личном кабинете SmartPlayer реализовано три вида приоритетов: | ||
# Низкий; | # Низкий; | ||
# Средний; | # Средний; | ||
| Строка 18: | Строка 21: | ||
[[File:Приоритеты_событий.png|thumb|center| Пример списка приоритетов|800px]] | [[File:Приоритеты_событий.png|thumb|center| Пример списка приоритетов|800px]] | ||
'''Логика работы приоритетов следующая:''' | '''Логика работы приоритетов следующая:''' | ||
* если текущее событие ниже по приоритету, чем то, которое | * если текущее событие ниже по приоритету, чем то, которое пришло от сервера клиента, то произойдет переключение на событие с более высоким приоритетом. | ||
* если текущее событие имеет приоритет выше, чем то, которое | * если текущее событие имеет приоритет выше, чем то, которое пришло от сервера клиента, то переключения события не произойдет. | ||
* если текущее событие и следующее событие то они проиграются по очереди. | * если текущее событие и следующее событие имеют одинаковый приоритет, то они проиграются по очереди. | ||
== '''Доработка платформы SmartPlayer''' == | == '''Доработка платформы SmartPlayer''' == | ||
| Строка 28: | Строка 31: | ||
=== '''Категория «События трансляций»''' === | === '''Категория «События трансляций»''' === | ||
Категория «События трансляций» располагается в личном кабинете в разделе «Трансляция». | Категория «События трансляций» располагается в личном кабинете в разделе «Трансляция». | ||
[[File:События_трансляции.png|thumb|center| Пример отображения категории «События | [[File:События_трансляции.png|thumb|center| Пример отображения категории «События трансляций» в разделе «Трансляции» |800px]] | ||
Перейдя категорию «События | Перейдя в категорию «События трансляций», пользователю откроется главная страница раздела, которая разделена на два блока: | ||
# События | # События трансляций — включает в себя все созданные события. | ||
# Журнал событий трансляций — список с подробным описанием использования событий. | # Журнал событий трансляций — список с подробным описанием использования событий. | ||
[[File:Главная_страница_событий.png|thumb|center| Пример отображения главной страницы категории «События | [[File:Главная_страница_событий.png|thumb|center| Пример отображения главной страницы категории «События трансляций»|800px]] | ||
{{Note|Выделенные с помощью чекбокса события отображаются в правой части экрана. | {{Note|Выделенные с помощью чекбокса события отображаются в правой части экрана. | ||
[[File:Выделенные_события.png|thumb|center| Пример отображения главной страницы категории «События | [[File:Выделенные_события.png|thumb|center| Пример отображения главной страницы категории «События трансляций»|800px]] | ||
Для выделенных событий | Для выделенных событий доступно два действия: | ||
# Отменить выбор — снимает чекбокс (галочку) выделения со всех устройств. | # Отменить выбор — снимает чекбокс (галочку) выделения со всех устройств. | ||
# Удалить — | # Удалить — стирает сущность выделенных событий из списка, а также записи о событиях с сервера. | ||
[[File:Функционал_для_выделенных_устройств.png|thumb|center| Пример отображения функций для взаимодействия с выделенными устройствами|800px]]|warn}} | [[File:Функционал_для_выделенных_устройств.png|thumb|center| Пример отображения функций для взаимодействия с выделенными устройствами|800px]]|warn}} | ||
=== '''События трансляции''' === | === '''События трансляции''' === | ||
Блок «События трансляции» включает в себя следующую информацию и возможности: | Блок «События трансляции» включает в себя следующую информацию и возможности: | ||
* кнопка «Создать» — позволяет создать событие и | * кнопка «Создать» — позволяет создать событие и впоследствии прикрепить его к трансляции; | ||
* чекбокс для выделения — выделяет нужное событие; | * чекбокс для выделения — выделяет нужное событие; | ||
* название — отображается текстовое название события; | * название — отображается текстовое название события; | ||
* тип события — отображается тип имеющегося события; | * тип события — отображается тип имеющегося события; | ||
* ключ — отображается ключ используемый для события; | * ключ — отображается ключ, используемый для события; | ||
* значение — численное значение для события; | * значение — численное значение для события; | ||
* приоритет — отображается текстом приоритет события; | * приоритет — отображается текстом приоритет события; | ||
* кнопка «Отправить» — кнопка | * кнопка «Отправить» — кнопка, помогает тестировать привязанные события к трансляции (эмулирует это событие виртуально) и отображает событие на экране. При корректной настройке трансляции и события кнопка «Отправить» переключит событие, если его приоритет выше, чем у текущего события. | ||
{{Note|Для более удобного поиска событий пользователь может | {{Note|Для более удобного поиска событий пользователь может обратиться в систему поиска. | ||
[[File:Система_поиск_события.png|thumb|center| Пример отображения системы поиска|800px]]|warn}} | [[File:Система_поиск_события.png|thumb|center| Пример отображения системы поиска|800px]]|warn}} | ||
==== '''Кнопка «Создать»''' ==== | ==== '''Кнопка «Создать»''' ==== | ||
Кнопка «Создать» открывает модальное окно в котором пользователю необходимо заполнить поля для создания события. Доступны следующие основные поля: | Кнопка «Создать» открывает модальное окно, в котором пользователю необходимо заполнить поля для создания события. Доступны следующие основные поля: | ||
* название — прописать текстовое название события; | * название — прописать текстовое название события; | ||
* приоритет — выставить приоритет события. Доступно три вида: низкий, средний, высокий; | * приоритет — выставить приоритет события. Доступно три вида: низкий, средний, высокий; | ||
* тип события — выбрать из раскрывающегося списка нужный тип события (в данном случае «Серверное приложение») | * тип события — выбрать из раскрывающегося списка нужный тип события (в данном случае «Серверное приложение») | ||
[[File:Базовая_модалка_создания_событий.png|thumb|center| Пример отображения списка основных параметров|800px]] | [[File:Базовая_модалка_создания_событий.png|thumb|center| Пример отображения списка основных параметров|800px]] | ||
После выбора в качестве типа события значения «Серверное приложение» появится | После выбора в качестве типа события значения «Серверное приложение» появится ещё один параметр — «Ключ». Это параметр отвечает за поиск события со стороны сервера. В текущей реализации необходимо выбрать в качестве ключа «Внешний источник». | ||
{{Note|В старой логике работы событий такого ключа для события типа «Серверное приложение» нет и его невозможно выбрать.|warn}} | {{Note|В старой логике работы событий такого ключа для события типа «Серверное приложение» нет и его невозможно выбрать.|warn}} | ||
[[File:Выбор_ключа.png|thumb|center| Пример отображения ключа «Внешний источник»|800px]] | [[File:Выбор_ключа.png|thumb|center| Пример отображения ключа «Внешний источник»|800px]] | ||
Выбрав «Внешний источник» в качестве ключа пользователь увидит что модальное окно увеличилось | Выбрав «Внешний источник» в качестве ключа пользователь увидит, что модальное окно увеличилось ещё больше и появились новые параметры. | ||
[[File:Добавленные_параметры.png|thumb|center| Пример отображения дополнительных | [[File:Добавленные_параметры.png|thumb|center| Пример отображения дополнительных параметров|800px]] | ||
Это параметры: | Это параметры: | ||
* модель | * модель входящих данных — позволяет перенести с помощью drag-n-drop (перетаскивания файла) json-файл, который будет расшифрован и выбрать (с помощью клика по значению) в этом файле нужное поле. Это поле будет ориентиром для сервера для получения данных. Клик по значению автоматически заполнит поле «Значение». | ||
* целевой путь к значению в json — отображает «путь» до значения в добавленном json-файле. Выставляется автоматически по клику на любом значении из подгруженного json-файла. Это поле нельзя изменить. | * целевой путь к значению в json — отображает «путь» до значения в добавленном json-файле. Выставляется автоматически по клику на любом значении из подгруженного json-файла. Это поле нельзя изменить. | ||
* значение — поле в котором необходимо указать | * значение — поле в котором необходимо указать значение вручную или с помощью клика по значению в json-файле. | ||
[[File:Заполненные_поля.png|thumb|center| Пример отображения заполненного поля «Значение»|800px]] | [[File:Заполненные_поля.png|thumb|center| Пример отображения заполненного поля «Значение»|800px]] | ||
{{Note|Поля «Целевой путь» и «Значение» после выделения кликом в json-файле определяются автоматически, но также «Значение» можно ввести вручную.|warn}} | {{Note|Поля «Целевой путь» и «Значение» после выделения кликом в json-файле определяются автоматически, но также «Значение» можно ввести вручную.|warn}} | ||
| Строка 74: | Строка 77: | ||
* информация — по клику открывает модальное окно с данными о: названии, типе, целевом пути, ключе и значении события. | * информация — по клику открывает модальное окно с данными о: названии, типе, целевом пути, ключе и значении события. | ||
[[File:Данные_с_инфомрацией.png|thumb|center| Пример отображения данных настройки «Информация»|800px]] | [[File:Данные_с_инфомрацией.png|thumb|center| Пример отображения данных настройки «Информация»|800px]] | ||
* параметры запроса — по клику открывает модальное окно с данными | * параметры запроса — по клику открывает модальное окно с данными об имени сервера, методе для запроса, идентификаторе события. | ||
[[File:Данные_с_запросами.png|thumb|center| Пример отображения данных настройки «Параметры запроса»|800px]] | [[File:Данные_с_запросами.png|thumb|center| Пример отображения данных настройки «Параметры запроса»|800px]] | ||
* редактировать — по клику открывает модальное окно с параметрами, которые настраивались при создании события | * редактировать — по клику открывает модальное окно с параметрами, которые настраивались при создании события | ||
[[File:Данные_с_параметрами_.png|thumb|center| Пример отображения системы поиска|800px]] | [[File:Данные_с_параметрами_.png|thumb|center| Пример отображения системы поиска|800px]] | ||
* удалить — удаляет выбранное событие. | * удалить — удаляет выбранное событие. | ||
=== '''Журнал событий''' === | === '''Журнал событий''' === | ||
Блок «Журнал событий» включает в себя все созданные и передает о них следующую информацию: | Блок «Журнал событий» включает в себя все созданные события, и передает о них следующую информацию: | ||
* название — | * название — текстовое название события; | ||
* тип события — | * тип события — наименование типа события; | ||
* ключ — | * ключ — тип ключа используемого для события; | ||
* значение — | * значение — отображается значение ключа зашитое в событие; | ||
* приоритет — | * приоритет — выбранные приоритет для события; | ||
* дата и время — | * дата и время — дата и время создания события; | ||
* статус — | * статус — отображается статус работы события. | ||
{{Note|Для более удобного поиска событий пользователь может | {{Note|Для более удобного поиска событий пользователь может обратиться в систему поиска. | ||
[[File:Система_поиска_журнала.png|thumb|center| Пример отображения системы поиска|800px]]|warn}} | [[File:Система_поиска_журнала.png|thumb|center| Пример отображения системы поиска|800px]]|warn}} | ||
В правой части экрана есть оповещение для пользователей, которое передаёт информацию о длительности хранения записей в журнале - 30 дней. | В правой части экрана есть оповещение для пользователей, которое передаёт информацию о длительности хранения записей в журнале - 30 дней. | ||
[[File:Информация_к_сведению.png|thumb|center| Пример отображения оповещения с информацией|800px]] | [[File:Информация_к_сведению.png|thumb|center| Пример отображения оповещения с информацией|800px]] | ||
=== '''Количество отображаемых событий в личном кабинете''' === | === '''Количество отображаемых событий в личном кабинете''' === | ||
Если пользователю необходимо подготовить и добавить множество событий, можно | Если пользователю необходимо подготовить и добавить множество событий, можно столкнуться с неудобствами их отображения на странице «Журнал событий». Чтобы этого избежать, пользователю необходимо перейти в раздел «Настройки» личного кабинета и найти пункт «События трансляций». | ||
[[File:Настройки_и_события.png|thumb|center| Пример отображения раздела «Настройки» и пункта «События | [[File:Настройки_и_события.png|thumb|center| Пример отображения раздела «Настройки» и пункта «События трансляций»|800px]] | ||
Развернув этот пункт отобразится поле «Отображение меню в правой панели» | Развернув этот пункт отобразится поле «Отображение меню в правой панели». В этом поле необходимо установить числовое значение. Какое значение пользователь выставит в поле - столько записей в журнале события будет отображаться. | ||
[[File:Строка_со_значением.png|thumb|center| Пример отображения строки с заполненным значением|800px]] | [[File:Строка_со_значением.png|thumb|center| Пример отображения строки с заполненным значением|800px]] | ||
=== '''Создание трансляции''' === | === '''Создание трансляции''' === | ||
| Строка 106: | Строка 110: | ||
В правой части экрана откроется список настроек, в котором необходимо обратить внимание на два параметра: | В правой части экрана откроется список настроек, в котором необходимо обратить внимание на два параметра: | ||
* события — позволяет добавить события к трансляции (в данном случае событие уже было подготовлено ранее в шагах выше); | * события — позволяет добавить события к трансляции (в данном случае событие уже было подготовлено ранее в шагах выше); | ||
* следующая страница — позволяет выбрать на какую страницу будет происходить переключение или зациклить страницу саму в себе при наличии события. | * следующая страница — позволяет выбрать на какую страницу будет происходить переключение, или зациклить страницу саму в себе при наличии события. | ||
[[File:Нужные_параметрыстраницы.png|thumb|center| Пример отображения параметров на странице настроек|800px]] | [[File:Нужные_параметрыстраницы.png|thumb|center| Пример отображения параметров на странице настроек|800px]] | ||
{{Note|Если у пользователя трансляция состоит из нескольких страниц и он хочет их переключать по событиям, ему необходимо настроить переключение страниц следующим образом: | |||
* cтраница 1 — зацикливает саму в себя (то есть выбирает переключение на страницу 1) | |||
[[File:Страница_1.png|thumb|center| Пример отображения настройки страницы 1|800px]] | |||
* cтраница 2 — это страница с контентом для события (на нее добавляется событие и она переключается на 1 страницу. По завершению проигрывания контента она переключится обратно на страницу 1. | |||
[[File:Страница_2.png|thumb|center| Пример отображения настройки страницы 2|800px]] |warn}} | |||
==== '''Добавление события в трансляцию''' ==== | ==== '''Добавление события в трансляцию''' ==== | ||
Чтобы добавить готовое событие пользователю необходимо | Чтобы добавить готовое событие пользователю необходимо нажать на иконку «+». | ||
[[File:Иконка плюс.png|thumb|center| Пример отображения иконки для добавления события|800px]] | [[File:Иконка плюс.png|thumb|center| Пример отображения иконки для добавления события|800px]] | ||
После клика по иконке откроется новое модальное окно в котором необходимо перейти в блок «Выбор события из списка» и кликнуть на нужное событие. | После клика по иконке откроется новое модальное окно, в котором необходимо перейти в блок «Выбор события из списка» и кликнуть на нужное событие. | ||
[[File:Выбор_события_из_списка.png|thumb|center| Пример отображения блока «Выбор события из списка»|800px]] | [[File:Выбор_события_из_списка.png|thumb|center| Пример отображения блока «Выбор события из списка»|800px]] | ||
После выбора нужного события пользователя | После выбора нужного события, пользователя вернёт на страницу с настройками, а ниже отобразится выбранное событие. | ||
{{Note|Добавленное событие можно удалить по отдельной иконке в виде мусорной корзины.|warn}} | {{Note|Добавленное событие можно удалить по отдельной иконке в виде мусорной корзины.|warn}} | ||
[[File:Событие_и_удалить.png|thumb|center| Пример отображения добавленного события к странице|800px]] | [[File:Событие_и_удалить.png|thumb|center| Пример отображения добавленного события к странице|800px]] | ||
Для применения настроек необходимо нажать на кнопку «Сохранить» в нижней части экрана. Если выбранные настройки применять не нужно кликнуть на кнопку «Отменить» слева. | Для применения настроек необходимо нажать на кнопку «Сохранить» в нижней части экрана. Если выбранные настройки применять не нужно, кликнуть на кнопку «Отменить» слева. | ||
[[File:Отменить_и_сохранить.png|thumb|center| Пример отображения кнопки «Сохранить»|800px]] | [[File:Отменить_и_сохранить.png|thumb|center| Пример отображения кнопки «Сохранить»|800px]] | ||
== '''Изменения серверной логики''' == | == '''Изменения серверной логики''' == | ||
Новая реализация | Новая реализация подразумевает также и переделку серверного приложения. На данный момент серверное приложение принимает вебхуки (webhook) через POST-запрос по API, который позволяет серверу клиента отправлять запросы на сервер SmartPlayer. Для формирования POST-запроса на вебхук (webhook) пользователю необходимо передать объект, в котором есть event_id и value для корректной работы событий, а также выбранные в качестве ключа события параметры. Также необходимо добавить API-ключ, который генерируется в личном кабинете SmartPlayer. Токен API-ключа добавляется в POST-запрос параметром "token".<br> | ||
Например: <code>api/v2/broadcast-event?token=smartuser-d86f05c6-2e3a-4c15-931f-2b8f5ec249ab</code><br><br> | |||
Запрос по адресу состоит из следующих частей: | |||
* адрес сервера: https://develop.smartplayer.org/ | |||
* путь вебхука: api/v2/broadcast-event | |||
* параметр токена: token=smartuser-d86f05c6-2e3a-4c15-931f-2b8f5ec249ab | |||
Из описанных выше частей собирается полноценный запрос показанный в примере.<br><br> | |||
'''Пример (отправка POST-запроса)''': https://develop.smartplayer.org/api/v2/broadcast-event?token=smartuser-d86f05c6-2e3a-4c15-931f-2b8f5ec249ab<br><br> | |||
В личном кабинете можно получить следующие данные: | В личном кабинете можно получить следующие данные: | ||
* ключ события (процесс создания описан в создании события выше) | * ключ события (процесс создания описан в создании события выше) | ||
* идентификатор | * идентификатор (процесс описан в параметрах события выше) | ||
* получение API-ключа в личном кабинете SmartPlayer (с процессом создания API-ключа можно ознакомиться [https://wiki.smartplayer.org/index.php/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_API_%D0%B2_%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%BC_%D0%BA%D0%B0%D0%B1%D0%B8%D0%BD%D0%B5%D1%82%D0%B5 здесь]. | * получение API-ключа в личном кабинете SmartPlayer (с процессом создания API-ключа можно ознакомиться [https://wiki.smartplayer.org/index.php/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_API_%D0%B2_%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%BC_%D0%BA%D0%B0%D0%B1%D0%B8%D0%BD%D0%B5%D1%82%D0%B5 здесь]). | ||
== '''Дополнительная информация''' == | == '''Дополнительная информация''' == | ||
Если данная статья не помогает использовать функционал по назначению или после | Если данная статья не помогает использовать функционал по назначению или после её прочтения остаются вопросы, их можно озвучить в разделе "Обсуждения" вверху страницы. | ||
[[File: | [[File:Обсуждение_видеоаналитии.png|thumb|center| Пример отображения вкладки «Обсуждения» на wiki-странице |800px]] | ||
Также дополнительную информацию можно узнать на странице [[Как взаимодействовать пользователю с разделом "Обсуждения"]] | Также дополнительную информацию можно узнать на странице [[Как взаимодействовать пользователю с разделом "Обсуждения"]] | ||
Текущая версия от 10:00, 24 ноября 2025
Описание ситуации
В рамках реализации проекта видеоаналитики была переработана и расширена старая логика работы событий. Теперь пользователи могут добавлять события не только в настройках трансляции, а также создавать их в отдельной категории личного кабинета «События трансляций» в разделе «Трансляция». Заранее подготовленные события из «События трансляций» позволяют использовать новые типы событий связанных с серверным приложением, а добавление события по внешнему источнику.
Новая логика позволяет создавать события и переиспользовать их в различных трансляциях, а старая логика событий использовалась только для одной конкретной трансляции и не созданное событие нигде не сохранялось и не могло быть переисопльзовано.
Обе логики сейчас работают и позволяют взаимодействовать с трансляциями более гибко.
Сценарий использования
Для правильной работы с событиями рекомендуется придерживаться следующего сценария использования функциональности:
- Подготовить для дальнейших (идентификатор события, API-ключ, json-файл, событие, трансляцию).
- Создать событие в категории «События трансляций» (добавить json-файл в качестве ключа и взять из события идентификатор).
- Подготовить API-ключ из личного кабинета SmartPlayer.
- Подготовить POST-запрос по API с идентификатором события.
- Создать трансляции с привязкой к событиям.
- Привязать созданные трансляции к нужным устройствам.
Важная информация
Приоритеты событий
В личном кабинете SmartPlayer реализовано три вида приоритетов:
- Низкий;
- Средний;
- Высокий.

Логика работы приоритетов следующая:
- если текущее событие ниже по приоритету, чем то, которое пришло от сервера клиента, то произойдет переключение на событие с более высоким приоритетом.
- если текущее событие имеет приоритет выше, чем то, которое пришло от сервера клиента, то переключения события не произойдет.
- если текущее событие и следующее событие имеют одинаковый приоритет, то они проиграются по очереди.
Доработка платформы SmartPlayer
Для реализации данного проекта разработчикам команды SmartPlayer понадобилось изменить реализацию на стороне:
- личного кабинета;
- серверного приложения.
Категория «События трансляций»
Категория «События трансляций» располагается в личном кабинете в разделе «Трансляция».

Перейдя в категорию «События трансляций», пользователю откроется главная страница раздела, которая разделена на два блока:
- События трансляций — включает в себя все созданные события.
- Журнал событий трансляций — список с подробным описанием использования событий.


Для выделенных событий доступно два действия:
- Отменить выбор — снимает чекбокс (галочку) выделения со всех устройств.
- Удалить — стирает сущность выделенных событий из списка, а также записи о событиях с сервера.

События трансляции
Блок «События трансляции» включает в себя следующую информацию и возможности:
- кнопка «Создать» — позволяет создать событие и впоследствии прикрепить его к трансляции;
- чекбокс для выделения — выделяет нужное событие;
- название — отображается текстовое название события;
- тип события — отображается тип имеющегося события;
- ключ — отображается ключ, используемый для события;
- значение — численное значение для события;
- приоритет — отображается текстом приоритет события;
- кнопка «Отправить» — кнопка, помогает тестировать привязанные события к трансляции (эмулирует это событие виртуально) и отображает событие на экране. При корректной настройке трансляции и события кнопка «Отправить» переключит событие, если его приоритет выше, чем у текущего события.

Кнопка «Создать»
Кнопка «Создать» открывает модальное окно, в котором пользователю необходимо заполнить поля для создания события. Доступны следующие основные поля:
- название — прописать текстовое название события;
- приоритет — выставить приоритет события. Доступно три вида: низкий, средний, высокий;
- тип события — выбрать из раскрывающегося списка нужный тип события (в данном случае «Серверное приложение»)

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

Выбрав «Внешний источник» в качестве ключа пользователь увидит, что модальное окно увеличилось ещё больше и появились новые параметры.

Это параметры:
- модель входящих данных — позволяет перенести с помощью drag-n-drop (перетаскивания файла) json-файл, который будет расшифрован и выбрать (с помощью клика по значению) в этом файле нужное поле. Это поле будет ориентиром для сервера для получения данных. Клик по значению автоматически заполнит поле «Значение».
- целевой путь к значению в json — отображает «путь» до значения в добавленном json-файле. Выставляется автоматически по клику на любом значении из подгруженного json-файла. Это поле нельзя изменить.
- значение — поле в котором необходимо указать значение вручную или с помощью клика по значению в json-файле.

Выбор события
Выбор события осуществляется по клику. При клике на событие оно подсвечивается серым цветом, а в правой части экрана появляется панель с настройками события.

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

- параметры запроса — по клику открывает модальное окно с данными об имени сервера, методе для запроса, идентификаторе события.

- редактировать — по клику открывает модальное окно с параметрами, которые настраивались при создании события

- удалить — удаляет выбранное событие.
Журнал событий
Блок «Журнал событий» включает в себя все созданные события, и передает о них следующую информацию:
- название — текстовое название события;
- тип события — наименование типа события;
- ключ — тип ключа используемого для события;
- значение — отображается значение ключа зашитое в событие;
- приоритет — выбранные приоритет для события;
- дата и время — дата и время создания события;
- статус — отображается статус работы события.

В правой части экрана есть оповещение для пользователей, которое передаёт информацию о длительности хранения записей в журнале - 30 дней.

Количество отображаемых событий в личном кабинете
Если пользователю необходимо подготовить и добавить множество событий, можно столкнуться с неудобствами их отображения на странице «Журнал событий». Чтобы этого избежать, пользователю необходимо перейти в раздел «Настройки» личного кабинета и найти пункт «События трансляций».

Развернув этот пункт отобразится поле «Отображение меню в правой панели». В этом поле необходимо установить числовое значение. Какое значение пользователь выставит в поле - столько записей в журнале события будет отображаться.

Создание трансляции
Пользователь в личном кабинете переходит в раздел «Трансляция» и выбирает категорию «Создать».

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

Настроив количество страниц и зон пользователь должен открыть «Настройки страницы» кликом по иконке.

В правой части экрана откроется список настроек, в котором необходимо обратить внимание на два параметра:
- события — позволяет добавить события к трансляции (в данном случае событие уже было подготовлено ранее в шагах выше);
- следующая страница — позволяет выбрать на какую страницу будет происходить переключение, или зациклить страницу саму в себе при наличии события.

- cтраница 1 — зацикливает саму в себя (то есть выбирает переключение на страницу 1)

- cтраница 2 — это страница с контентом для события (на нее добавляется событие и она переключается на 1 страницу. По завершению проигрывания контента она переключится обратно на страницу 1.

Добавление события в трансляцию
Чтобы добавить готовое событие пользователю необходимо нажать на иконку «+».

После клика по иконке откроется новое модальное окно, в котором необходимо перейти в блок «Выбор события из списка» и кликнуть на нужное событие.

После выбора нужного события, пользователя вернёт на страницу с настройками, а ниже отобразится выбранное событие.

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

Изменения серверной логики
Новая реализация подразумевает также и переделку серверного приложения. На данный момент серверное приложение принимает вебхуки (webhook) через POST-запрос по API, который позволяет серверу клиента отправлять запросы на сервер SmartPlayer. Для формирования POST-запроса на вебхук (webhook) пользователю необходимо передать объект, в котором есть event_id и value для корректной работы событий, а также выбранные в качестве ключа события параметры. Также необходимо добавить API-ключ, который генерируется в личном кабинете SmartPlayer. Токен API-ключа добавляется в POST-запрос параметром "token".
Например: api/v2/broadcast-event?token=smartuser-d86f05c6-2e3a-4c15-931f-2b8f5ec249ab
Запрос по адресу состоит из следующих частей:
- адрес сервера: https://develop.smartplayer.org/
- путь вебхука: api/v2/broadcast-event
- параметр токена: token=smartuser-d86f05c6-2e3a-4c15-931f-2b8f5ec249ab
Из описанных выше частей собирается полноценный запрос показанный в примере.
Пример (отправка POST-запроса): https://develop.smartplayer.org/api/v2/broadcast-event?token=smartuser-d86f05c6-2e3a-4c15-931f-2b8f5ec249ab
В личном кабинете можно получить следующие данные:
- ключ события (процесс создания описан в создании события выше)
- идентификатор (процесс описан в параметрах события выше)
- получение API-ключа в личном кабинете SmartPlayer (с процессом создания API-ключа можно ознакомиться здесь).
Дополнительная информация
Если данная статья не помогает использовать функционал по назначению или после её прочтения остаются вопросы, их можно озвучить в разделе "Обсуждения" вверху страницы.

Также дополнительную информацию можно узнать на странице Как взаимодействовать пользователю с разделом "Обсуждения"