Главная
Главная Руководства FreeBSD › Установке Serviio в FreeBSD



Автор:

Статья опубликована: 2016-02-01 12:16:20
Последние правки: 2017-11-10 12:42:10

На FreeBSD особого разнообразия DLNA-серверов нет, Serviio я считаю лучшим из них.

Буквально на днях я приобрел ЖК TV Sony Bravia KLD-32W654A, который, помимо SMART начинки обладает встроенным DLNA-клиентом. Я уже писал статью об DLNA медиасервере mediatomb, и поэтому было очевидным проверить работу телевизора именно с ним, тем более он уже был установлен и настроен. Проверка, увы, потерпела полную неудачу - телевизор видел папки с медиасервера, но все папки были пустыми.

Сначала я подозревал в кривизне 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 запускается и работает.