Выбор
По ряду причин столкнулся с дилеммой выбора домашнего медиа-сервера… Покупка готового аппаратно реализованного не рассматривалась по той причине, что в любом случае 24 часа в стуки гоняю домашний сервер, и как бы решил использовать имеющиеся ресурсы, а не покупать новые. Почитав кучу сравнений различных программных реализаций выбрал наиболее дешевый вариант, точнее абсолютно бесплатный, который так и называется Домашний медиа-сервер
Начало эксплуатации
Так как основная задача была обеспечить доступ к медиаконтенту с различных устройств внутри локальной сети особо не заморачивался с ограничением доступа. Так же сразу же отбросил (ну по крайней мере на момент развертывания) всякие задачи транскодирования, решив что если формат не поддерживается то это проблема владельца устройства. В итоге в недрах HYPER-V выделил одну виртуальную машину которой дал 2ГБ ОЗУ и одно ядро процессора, ну и жесткий диск размером в 1ТБ (ради эксперимента установил Windows Server 2016 с графическим интерфейсом). Установка и запуск прошел без особых сложностей, единственно что нужно настроить что бы медиа сервер работал как служба. Для удобства получения контента добавил на ту же машину торрент с web-интерфейсом и работающий как служба.
Однако после начала эксплуатации осознал, что навигация начинает напрягать, т.е. в телевизоре нужно сначала выйти в Smart Share (ТВ от LG) потом добраться до устройства, и там становится не легче нужно перейти, например, к видео, далее по структуре…. Однако быстро выкупил что прям в корне устройства можно создавать собственные папочки, которые в принципе упростят навигацию, однако возник вопрос как же добиться что бы в них появлялось то что нужно. Гуглил много, однако либо я вопросы не правильные задавал, либо юзеры в основном используют программу для просмотра подкастов…. В итоге понял, что нужно писать скрипты, описания как это делать тоже особо не нашел… ну видно я реально не те вопросы гуглу задаю…
Написание скриптов
Долго копая и убив кучу времени накопал плагин, к редактору скриптов который напоминает среду разработки ПО (ну всякие там выпадающие списки, подсветка ключевых слов и т.д.). В итоге немного сломав голову написал скрипт который тупо наполняет «корневую» папку с фильмами по следующей логике:
- Складывает все фильмы из указанной папки медиаресурсов жесткого диска
- Добавляет в эту папку все коллекции фильмов из известной папки
Фактически это выглядит следующим образом:
Скрипт для выполнения данной операции выглядит следующим образом:
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.
В итоге получаем требуемый результат:
Автор: бро