Сначала я подозревал в кривизне DLNA-клиент телевизора, но потом решил попробовать сменить медиасервер и в качестве новой жертвы выбрал DLNA-сервер Serviio.
По моему чисто субъективному мнению у этого сервера есть один минус:
- он тянет за собой яву, мне это не особо нравится, лишний софт на сервере не приветствуется.
Но есть и плюсы:
- папок при просмотре через клиента гораздо богаче, особенно мне понравилась папка со списком последних добавленных файлов;
- есть веб-морда по адресу http://server_ip_address:23423/console (в ней можно задать ip сервера);
- на сайте разработчиков serviio я нашел serviioDroid - консоль для устройств, работающих под android.
- Использованные версии ПО:
# uname -sr FreeBSD 10.1-RELEASE-p13 # pkg info | grep serviio serviio-1.5.2 Transcoding DLNA-server implemented in Java
- Установка
# cd /usr/ports/net/serviio # make install clean
Настроек у порта нет никаких.
Во время установки будут созданы пользователь dlna и группа dlna
- Первоначальная настройка
/etc/rc.conf:serviio_enable="YES"
- Запуск
# /usr/local/etc/rc.d/serviio start
- Управление
При помощи serviioDroid. Ищем в GooglePlay, устанавливаем, запускаем, вручную добавляем наш медиасервер по ip. После подключения интерфейс интуитивно понятен и конфигурация не должна вызвать проблем.
Отмечу только, что папки, в которых медиасервер ищет файлы, добавляются и настраиваются на вкладке Shared folders
- Sony Bravia KLD-32W654A
Медиасервер не распознает нужную конфигурацию для Sony Bravia TV, поэтому идем на вкладку Devices, ищем в списке устройств свой телевизор (предварительно его надо включить, чтобы он подсоединился к медиасерверу), жмем на него пальцем и для поля Profile выбираем наиболее близкую по названию ТВ и году выпуска конфигурацию. Я для своего ТВ выбрал Sony Bravia TV (2012).
- Тюнинг - как заставить serviio видеть фильмы с кириллицей в названии
Главное условие - FreeBSD должна быть заточена на работу с кодировкой UTF-8.
Метод от разработчиков заключается в добавлении в /etc/rc.conf следующей строчки:serviio_lang="ru_RU.UTF-8"
Но увы, он не работает. Если после добавления строчки и перезапуска serviio посмотреть /var/log/serviio/serviio.log, то там по-прежнему для File encoding будет следующее:INFO [MediaServer] ------------------------------------------------------------------------ INFO [MediaServer] Serviio DLNA media streaming server v 1.5.2 (rev. 4b9ce176daa1) INFO [MediaServer] Petr Nejedly 2009-2015 INFO [MediaServer] http://www.serviio.org INFO [MediaServer] INFO [MediaServer] Java 1.8.0_72-Oracle Corporation amd64 INFO [MediaServer] OS FreeBSD 10.1-RELEASE-p13 INFO [MediaServer] File encoding: US-ASCII INFO [MediaServer] Headless mode enabled: true INFO [MediaServer] User: dlna INFO [MediaServer] User home dir: /home/dlna INFO [MediaServer] Temp dir: /tmp/ INFO [MediaServer] ------------------------------------------------------------------------
В результате экспериментов, я нашел свой способ как заставить serviio работать с UFT-8.
Отдельный экспорт LANG в /usr/local/etc/rc.d/serviio (так сделали разработчики) не помогает, и я решил определять переменные окружения прямо в строке для запуска демона. К сожалению, в /usr/local/etc/rc.d/serviio это не прокатило и я стал смотреть что там дальше. А дальше был файлик /usr/local/sbin/serviiod, в котором и идет запуск демона.
Самая последняя строчка в нем начинается с:exec java ........
В начало этой строчки добавляем своё:LANG="ru_RU.UTF-8"; export LANG && LC_ALL="ru_RU.UTF-8"; export LC_ALL && exec java ........
Перезапускаем serviio, смотрим лог:INFO [MediaServer] ------------------------------------------------------------------------ INFO [MediaServer] Serviio DLNA media streaming server v 1.5.2 (rev. 4b9ce176daa1) INFO [MediaServer] Petr Nejedly 2009-2015 INFO [MediaServer] http://www.serviio.org INFO [MediaServer] INFO [MediaServer] Java 1.8.0_72-Oracle Corporation amd64 INFO [MediaServer] OS FreeBSD 10.1-RELEASE-p13 INFO [MediaServer] File encoding: UTF-8 INFO [MediaServer] Headless mode enabled: true INFO [MediaServer] User: dlna INFO [MediaServer] User home dir: /home/dlna INFO [MediaServer] Temp dir: /tmp/ INFO [MediaServer] ------------------------------------------------------------------------
- Ошибки. Да, бывает и такое.
FreeBSD, serviio: Unsupported major.minor version...
Вот такое стал выдавать serviio при запуске после очередного обновления:Exception in thread "main" java.lang.UnsupportedClassVersionError: org/serviio/MediaServer : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
Почему и как бороться?
В последней на момент написания этих строк версии serviio в качестве минимального требования заявлена Java версии 8. Однако, в FreeBSD может быть установлена не только восьмая, но и седьмая версия Java, так как она необходима тем приложениям, которые ещё не доросли до восьмой версии. И, конечно же, система честно отвечает какая версия установлена:# java -version openjdk version "1.7.0_76" OpenJDK Runtime Environment (build 1.7.0_76-b13) OpenJDK 64-Bit Server VM (build 24.76-b04, mixed mode)
Чтобы serviio не паниковал, ему необходимо намекнуть, что у нас в системе есть и восьмая версия Java, для этого перед запуском нужно подсунуть следующее:JAVA_VERSION="1.8+" export JAVA_VERSION
Я эти строчки вписал в скрипт для запуска демона: /usr/local/etc/rc.d/serviio. Криво, конечно, так как при обновлении этот файлик может быть перезаписан, но ничего лучше не придумал.
Проверяем:# /usr/local/etc/rc.d/serviio start Starting serviio.
Serviio запускается и работает.