В нашей организации есть много видеоэкранов развешенных по коридорам на которых целый день демонстрируются различные информационные и рекламные видеоролики. В большинстве своем видеоэкраны это старые телевизоры большой диагонали в которых нет SmartTV, видео проигрывается с флэшки подключенной по USB. Чтоб добавить очередное видео на любой экран нужно идти, отключать флэшку, добавлять видео из планшета или как-то еще и подключать обратно. Это все долго и неудобно. Для автоматизации процесса решено было докупить ТВ-приставки подключающиеся в компьютерную сеть и транслировать на них видео из сервера. О том как это все реализовано написано далее.
DLNA (англ. Digital Living Network Alliance) — набор стандартов, позволяющих совместимым устройствам передавать и принимать по сети различный медиаконтент , а также отображать его в режиме реального времени. DLNA сервер работает внутри одной локальной сети. Если сеть поделена на сегменты, то для DLNA трансляции нужно дополнительно настроить туннели между подсетями.
DLNA-сервер использует протокол UPnP (Universal Plug and Play), который работает на основе SSDP (Simple Service Discovery Protocol). При старте – сервер отправляет многоадресные (multicast) сообщения по UDP на адрес 239.255.255.250, порт 1900. Это объявляет его присутствие в сети. Возможна работа по запросу клиента – клиенты могут отправлять многоадресный SSDP-запрос, и сервер ответит им unicast-сообщением. Периодически – сервер повторяет объявления о себе, чтобы клиенты знали, что он еще активен. При завершении работы – сервер отправляет «byebye»-сообщение, чтобы клиенты удалили его из списка доступных устройств. Таким образом, это не совсем классическое широковещание (broadcast), а скорее многоадресная (multicast) и одноадресная (unicast) связь, завязанная на SSDP.
Сервер.
В процесс создания системы видеотрансляции в роли сервера протестировались три разные операционные системы: Windows, Ubuntu и RouterOS. У всех ОС есть свои плюсы и минусы.
DLNA-Windows.
Сервер может быть установлен на физический ПК или виртуальную машину. В данном случае используется гипервизор Windows Server 2019 Hyper-V и гостевая ОС Windows 10 22H2. Ресурсы зависят от количества клиентов: минимум двух-ядерный процессор и 4Гб ОЗУ. Место на диске с расчетом под необходимый размер и количество видеороликов +небольшой запас.
Переходим в настройки сети Windows этой виртуальной машины.
Win+R >> control /name Microsoft.NetworkandSharingCenter
или Панель управления >> Сеть и Интернет >> Центр управления сетями и общим доступом >> Параметры потоковой передачи мультимедиа.
Активируем потоковую передачу.
Очень часто активация заканчивается таким сообщением: Потоковая передача мультимедиа не включена.
Причины как правило в том, что отключены вспомогательные службы. Как устранить эту проблему написано под спойлером.
Проверяем общий доступ и сетевое обнаружение. Они должны быть включены.
Пробуем включить потоковую передачу еще раз.
Переходим в службы нажав на ссылку «Средство администрирования служб Windows или Win+R >> services.msc
Включаем службу «Служба общих сетевых ресурсов проигрывателя Windows Media».
Иногда запуск службы может завершиться ошибкой 1068.
В этом случае нужно запустить вспомогательные службы для этой службы.
Проверяем службы по очереди и включаем, если они остановлены.
Plug and Play.
Сетевые подключения.
Служба шлюза уровня приложения.
Служба сведений о подключенных сетях.
Удаленный вызов процедур (RPC).
Диспетчер автоматических подключений удаленного доступа.
Диспетчер подключений удаленного доступа.
После успешной активации откроется окно настроек.
Тут можно указать название этого сервера, задать разрешения для конкретных сетевых устройств и другие настройки. Нажимаем ОК.
Размещаем видеофайлы в папке «Видео».
Проверяем работу по сети.
На соседнем компьютере в той же сети открываем проигрыватель Windows Media. В списке находим DLNA-сервер по названию и в папке «Видео» размещенные видеофайлы.
Если все работает переходим к настройкам на ТВ-приставке (в конце страницы).
В процессе работы выявились недостатки этого сервера:
-видео на ТВ-приставках загружается очень долго;
-1 раз в два-три дня может зависнуть и остановится воспроизведение;
-можно долго пытаться найти службу которая мешает запуску потоковой передачи.
DLNA-Ubuntu.
Сервер установлен на гипервизор Windows Server 2019 Hyper-V, гостевая ОС Ubuntu 22. Много ресурсов не требуется: двух-ядерный процессор, 4Гб ОЗУ. Место на диске для видеороликов 10Гб (у каждого свой объем). Сервер подключен в сеть, ему назначен IP-адрес, есть доступ в Интернет.
Настройка выполняется по сети из ПК с ОС Windows. Подключаемся к ВМ через cmd по SSH или другим удобным способом.
Подключаемся в Ubuntu (не по ssh).
Запускаем терминал Ctrl+Alt+T.
Выполняем обновление.
1 2 |
apt-get update apt-get upgrade |
Устанавливаем сервер ssh.
1 |
apt install openssh-server |
В Windows 10 ничего устанавливать не нужно, так как есть встроенный OpenSSH клиент.
Подключаемся из Windows в Ubuntu. Открываем cmd и вводим команду.
1 |
ssh user@192.168.10.16 |
user – это имя пользователя, у каждого свое;
IP-адрес своего Ubuntu.
Вводим пароль.
Подтверждаем подключение – yes.
Далее логинимся с правами root.
1 |
sudo su - root |
пароль
Установка DLNA-сервера.
Для сервера выбрана программа miniDLNA. Выполним её установку.
Актуализируем базы и обновляем пакеты до последней версии.
1 2 |
apt-get update apt-get upgrade |
Устанавливаем сервер.
1 |
apt-get install minidlna -y |
Отредактируем конфигурацию с помощью редактора nano.
1 |
nano /etc/minidlna.conf |
Расположение медиафайлов. Можно указать любую папку. В данном случае выбрана папка Videos.
1 |
media_dir=V,/home/ваш_пользователь/Videos |
(V – означает видеоконтент)
Отображаемое имя сервера.
1 |
friendly_name=PC360 |
Сохраняем, выходим.
Копируем тестовое видео в папку Videos.
Теперь нужно назначить права на папку Videos и файлы в ней. Если не назначить, то при проверке статуса службы появится такая ошибка:
1 |
minidlna.c:670: error: Media directory "V,/home/user/Videos" not accessible [Permission denied] |
Изменим группу у папки Videos на minidlna.
1 |
chown -R ваш_пользователь:minidlna /home/ваш_пользователь/Videos |
(-R – означает рекурсивно, т.е. изменения относятся к папке и файлам внутри)
Добавляем пользователя minidlna в группу своего пользователя.
1 |
usermod -aG ваш_пользователь minidlna |
Назначаем права на чтение для всех пользователей для папки и ее содержимого. Это чтоб клиенты могли получить доступ к видеофайлам.
1 |
chmod 644 /home/ваш_пользователь/Videos/* |
Можно посмотреть что получилось с помощью команды:
1 |
getfacl /home/ваш_пользователь/Videos |
Перезапускаем сервер.
1 |
systemctl restart minidlna |
Пересканируем медиатеку.
1 |
minidlnad -R |
Проверяем статус.
1 |
service minidlna status |
Переходим на клиента (соседний ПК в этой же сети) и проверяем наличие созданного DLNA-сервера через Windows Media Player.
Мониторинг DLNA-сервера возможен через web-интерфейс.
1 |
http://IP-адрес_вашего_сервера:8200 |
Деинсталляция DLNA-сервера и всех зависимостей (на случай если понадобится).
1 |
apt-get remove --auto-remove minidlna |
Зачистка с удалением файлов конфигурации.
1 |
apt-get purge minidlna |
Главный недостаток этого сервера – права доступа для папки и для запуска. Могут быть разные проблемы неработоспособности по причине прав доступа к папкам и файлам. Настройки конфигурации сервера тоже могут быть разными вариантами для разных пользователей и групп. Плюс комбинации из этих двух проблем. На этой теме было потрачено несколько часов пока был найден рабочий вариант.
DLNA-RouterOS.
Сервер установлен на гипервизор Windows Server 2019 Hyper-V, гостевая CHR RouterOS 7.17. Много ресурсов не требуется: одно-ядерный процессор, 512Мб ОЗУ. Место на диске для видеороликов 10Гб (у каждого свой объем). Сервер подключен в сеть.
В Mikrotik DLNA появился недавно и только в ROSv7. Для того чтоб не мучится с установкой и настройкой ОС, можно скачать виртуальный диск с установленной системой с сайта mikrotik.com и добавить его в ВМ.
Скачивать нужно диск в формате .vhdx.
Создаем ВМ, добавляем диск, сетевой адаптер, запускаем.
Подключаемся к ВМ через WinBox по MAC-адресу, потому что IP-адрес еще не назначен. Логин admin без пароля.
Настраиваем получение IP-адреса по DHCP.
Активируем DLNA-сервер.
Interface – интерфейс, который подключен в локальную сеть.
Path – путь к папке с видео. В данном случае в файлах создана папка VIDEO и видеоролики загружены в нее.
Friendly Name – название сервера в сети.
На этом настройка окончена.
Проверяем на клиенте.
К сожалению, сразу виден главный недостаток этого сервера – вместо русских букв видны вопросики в названии видеофайла. RouterOS не поддерживает кириллицу и решить это пока ни как не получится.
Клиент загружает видео быстро, работает без отключений, настройка сервера простая. И поэтому в нашей сети из трех вариантов решено было оставить DLNA на RouterOS. Видеофайлы переименовали латинскими буквами.
Для приема медиаконтента с DLNA-сервера подходят большинство современных ТВ-приставок. Главное чтоб было наличие сетевого разъема или wifi.
Модели использованных приставок. Blaupunkt B-Stream Box, Xiaomi TV Box (wifi, или USB-LAN переходник т.к. нет сетевого разъема), Z1.
Первоначально в приставку нужно организовать удаленный доступ, чтоб постоянно к ней не бегать. Для этого используется программа AppControl. Можно использовать другие программы удаленного доступа, например droidVNC-NG. Кому как удобно.
Устанавливаем AppControl на ПК с ОС Windows. Скачать можно тут.
Скачиваем архив, распаковываем, размещаем в папке, из которой программа будет работать, выносим ярлык на рабочий стол.
Вводим IP-адрес приставки и нажимаем подключение.
Переходим на вкладку инструменты и жмем на «Управление экраном вашего устройства».
При первом подключении может потребоваться установка приложения Scrcpy.
Скачиваем, устанавливаем последнюю версию Scrcpy.
Для успешного подключения нужно разрешить отладку по USB в настройках приставки через пульт дистанционного управления.
Иногда еще могут потребоваться какие-то действия, чтоб войти в режим разработчика. Например в Z1 нужно перейти в меню «Об устройстве» и восемь раз нажать на пункт «Сборка».
При первом подключении отметить галку «Всегда разрешать отладку с этого компьютера» и подтвердить.
Далее появится экран приставки.
Скачиваем и устанавливаем программу droidVNC-NG.
Можно выполнить некоторые настройки, например включить курсор мыши.
Разрешаем приложению удаленный доступ и некоторые другие разрешения.
Далее как вариант можно выбрать ссылку для доступа через браузер.
Вставляем ссылку в браузер на компьютере и далее откроется экран приставки.
Так же можно использовать вьювер для подключения к приставке, например Real VNC Viewer.
Устанавливаем, вводим IP-адрес, подтверждаем.
Недостаток этого способа подключения в том, что может отсутствовать управление мышью из-за недостатка прав, которые непонятно как включить в урезанных ОС некоторых приставок.
В приставку нужно установить проигрыватель с возможностью просмотра видео по сети. Это делается через PlayMarket если он присутствует в меню или можно скачать .apk через браузер на компьютере и переместить на приставку, затем запустить установку через файловый менеджер. В данном случае используется VLC плеер.
Устанавливаем, запускаем. Выбираем сеть.
Выбираем DLNA-сервер и нужную папку, включаем просмотр.
Устанавливаем проигрывание видео по кругу.
Недостаток данного способа – при отключении приставки, например в случае пропадания электропитания, админу нужно подключится на каждую приставку и запустить воспроизведение. Этот недостаток устраняется автоматизацией процесса с помощью макросов программы MacroDroid.
Автозапуск воспроизведения VLC при загрузке ТВ-приставки.
Скачиваем, устанавливаем MacroDroid.
Создаем новый макрос. Вводим название.
Добавляем триггер – загрузка устройства. Макрос будет выполняться при включении приставки.
Добавляем действие – отправить интент.
В интенте вводим данные.
Цель: Activity
Действие:
1 |
android.intent.action.VIEW |
Пакет:
1 |
org.videolan.vlc |
Класс:
1 |
org.videolan.vlc.gui.video.VideoPlayerActivity |
Данные:
1 |
upnp://192.168.5.18:2828/upnp/control/media_1/cd?ObjectID=1 |
MME-тип
1 |
video/* |
Подробности тут.
Данные – это ссылка на нужную папку в DLNA-сервере. Чтоб узнать эту ссылку, запускаем VLC проигрыватель, выбираем DLNA-сервер и нажимаем на нужную папку долгим нажатием. Откроются свойства с адресом источника. Переписываем ссылку в блокнот и далее копируем в интент макроса.
Сохраняем настроенный макрос. Проверяем, чтоб он был активирован.
Перезагружаем приставку. Убеждаемся, что происходит запуск согласно макроса.
Иногда после запуска приставки видео начинает воспроизводиться и останавливается. Достаточно нажать кнопку ОК на пульте и воспроизведение продолжается. Можно добавить это действие в макрос. Что-то типо этого.
Попробовать по очереди эти действия или вместе или какой-то другой подобный вариант.
Если представленный способ организации видеотрансляции не подходит или не получается по каким-либо причинам, то есть более простой вариант без сервера, о котором написано тут.