Домашний медиа-сервер

в 22:59, , рубрики: Управление медиа

Выбор

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

Начало эксплуатации

Так как основная задача была обеспечить доступ к медиаконтенту с различных устройств внутри локальной сети особо не заморачивался с ограничением доступа. Так же сразу же отбросил (ну по крайней мере на момент развертывания) всякие задачи транскодирования, решив что если формат не поддерживается то это проблема владельца устройства. В итоге в недрах HYPER-V выделил одну виртуальную машину которой дал 2ГБ ОЗУ и одно ядро процессора, ну и жесткий диск размером в 1ТБ (ради эксперимента установил Windows Server 2016 с графическим интерфейсом). Установка и запуск прошел без особых сложностей, единственно что нужно настроить что бы медиа сервер работал как служба. Для удобства получения контента добавил на ту же машину торрент с web-интерфейсом и работающий как служба.

Однако после начала эксплуатации осознал, что навигация начинает напрягать, т.е. в телевизоре нужно сначала выйти в Smart Share (ТВ от LG) потом добраться до устройства, и там становится не легче нужно перейти, например, к видео, далее по структуре…. Однако быстро выкупил что прям в корне устройства можно создавать собственные папочки, которые в принципе упростят навигацию, однако возник вопрос как же добиться что бы в них появлялось то что нужно. Гуглил много, однако либо я вопросы не правильные задавал, либо юзеры в основном используют программу для просмотра подкастов…. В итоге понял, что нужно писать скрипты, описания как это делать тоже особо не нашел… ну видно я реально не те вопросы гуглу задаю…

Написание скриптов

Долго копая и убив кучу времени накопал плагин, к редактору скриптов который напоминает среду разработки ПО (ну всякие там выпадающие списки, подсветка ключевых слов и т.д.). В итоге немного сломав голову написал скрипт который тупо наполняет «корневую» папку с фильмами по следующей логике:

  1. Складывает все фильмы из указанной папки медиаресурсов жесткого диска
  2. Добавляет в эту папку все коллекции фильмов из известной папки

Фактически это выглядит следующим образом:

Домашний медиа-сервер - 1

Скрипт для выполнения данной операции выглядит следующим образом:

Var
  root, video, movie: THmsScriptMediaItem;
  i,j,k,c : Integer;
  res : TStrings;
Begin
  //Очищаем папку, если этого не сделать, при каждом обращении к папке 
  //в ней будет появляться дубликат контента.
  CurrentMediaItem.DeleteChildItems();
  //Получаем корневой элемент БД 
  root := HmsDatabaseRootItem();
  for i:=0 to root.ChildCount-1 Do
  Begin
    //Если элемент с видео то начинаем анализ
    if root.ChildItems[i].ItemClassName = «TVideoItemsFolder» Then
    Begin
      video := root.ChildItems[i];
      for j:=0 to video.ChildCount-1 Do
      Begin
        //Если нашли папку с каталогом медиаресурсов, анализируем ее содержимое
        if video.ChildItems[j].ItemClassName = «TVideoWatchFoldersItem» Then
        for k:=0 to video.ChildItems[j].ChildCount-1 Do
        Begin
          //Если нашли папку ФИЛЬМЫ, копируем все содержимое
          if video.ChildItems[j].ChildItems[k].Properties[mpiTitle] = «Фильмы» Then
          Begin
            movie:= video.ChildItems[j].ChildItems[k];
            For c:=0 to movie.ChildCount-1 Do
              CurrentMediaItem.AddItem(«»,movie.ChildItems[c]);
            End
          End;
          //Если нашли папку с сериалами, копируем все содержимое
          if video.ChildItems[j].Properties[mpiTitle] = «Сериалы» Then
          Begin
            for k:=0 to video.ChildItems[j].ChildCount-1 Do
            Begin
              CurrentMediaItem.AddItem(«», video.ChildItems[j].ChildItems[k]);
            End
          End
        End
      End
    End;
End.

В итоге получаем требуемый результат:

Домашний медиа-сервер - 2

Автор: бро

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js