3 мая 2012 г.

Установка и настройка MiniDLNA

Что это и кому это надо?
Начнем с того, что выясним что такое DLNA. Вот что написано в википедии:
DLNA (Digital Living Network Alliance) — стандарт, позволяющий совместимым устройствам передавать и принимать по домашней сети различный медиа-контент (изображения, музыку, видео), а также отображать его в режиме реального времени. Это технология для соединения домашних компьютеров, мобильных телефонов, ноутбуков и бытовой электроники в единую цифровую сеть.
Мудрёно? Да. Простыми словами - из своего компьютера (и не только) вы сможете сделать медиасервер, с которого можно будет смотреть и слушать видео, фотографии и музыку на любом телевизоре, музыкальном центре и прочей технике в своей квартире (причем независимо друг от друга) правда при одном условии - ваша техника должна поддерживать стандарт DLNA. Обычно об этом можно прочесть на коробке от этой самой техники или в ее документации. А еще можно заглянуть за телевизор (музыкальный плеер, DVD/Blue-ray плеер) и поискать разъем Ethernet. Конечно вы его можете и не найти, например если ваш телевизор поддерживает Wi-Fi.
Короче - изучайте матчасть ;)
Так вот, для того чтобы ваш компьютер стал-таки таким медиасервером на нем необходимо установить и настроить DLNA-сервер. Таких серверов существует множество. Из известных мне: MiniDLNA, MediaTomb, Rygel.


Почему MiniDLNA?
Всё очень просто - всё очень просто :)
MiniDLNA очень прост в настройке. Да у него нет всяких современных фич как транскодирование или трансляция видео с Youtube. Но мне это не нужно. Лично мне несложно найти видео сжатым нужным мне кодеком или перекодировать его самостоятельно. Более того у меня есть Blue-ray плеер, который знает больше кодеков чем мой телек. Так что если что-то не идет на телеке - идет на Blue-ray плеере.
Установка
Устанавливается MiniDLNA из репозиториев

sudo apt-get install minidlna
Кому хочется иметь последнюю версию может воспользоваться PPA
sudo add-apt-repository ppa:stedy6/stedy-minidna
sudo apt-get update
sudo apt-get install minidlna
Я рекомендую использовать именно PPA. Тот minidlna сервер, который идет из стандартного репозитория у меня почему-то не хотел запоминать предыдущее место воспроизведения в видео файлах. Приходилось использовать перемотку. Не критично, но когда знаешь, что это должно работать, то свербит ;)
Настройка
Файл с настройками MiniDLNA находится по пути /etc/minidlna.conf.
Открываем его своим любимым редактором (nano, vim, gedit и т.д.). У кого нет любимого редактора можно воспользоваться шпаргалкой
sudo gedit /etc/minidlna.conf
Далее смотрим, что там есть. Базовый файл с настройками имеет коментарии ко всем параметрам. Все довольно просто и понятно.
Если совсем ничего не понятно, то сделаем минимальные изменения в настройках.
Путь к медиабиблиотеке
Необходимо указать нашему серверу где же находится вся наша медиабиблиотека (директория или несколько директорий) с фильмами, мультиками, фотографиями и музыкой. Пути к библиотекам указываются ключом media_dir. Таких ключей можно указать сколько угодно. Примеры настройки лежат тут же.
media_dir=A,/home/jmaggard/Music
media_dir=V,/home/jmaggard/Videos
media_dir=P,/home/jmaggard/Pictures
Никто не запрещает указать две и более директории с (например) видео:
media_dir=V,/первый/путь/к_видео
media_dir=V,/второй/путь/к_видео
Я предлагаю другой подход - использовать в качестве медиабиблиотеки путь /opt, который указан в настройках по-умолчанию. И по этому пути собирать символические ссылки на все наши директории с медиаконтентом.
Стало быть приводим часть с описанием медиадиректорий в настройках к следующему виду:
media_dir=V,/opt/medialib/video
media_dir=A,/opt/medialib/audio
media_dir=P,/opt/medialib/pictures
Идем дальше...
Как будет называться наш сервер
Конечно же мы не оставим это на откуп компьютеру ;) Мы назовем свой сервер сами. Находим параметр friendly_name раскоментируем его если он закоментирован и пишем туда свое имя сервера
friendly_name=My super mediaserver
Директория с базой данных
MiniDLNA использует в качестве СУБД sqlite3. Соответственно вся база данных хранится в файле. Нам стоит позаботиться о том где этот файл будет лежать. Для этого просто раскоментируем (или добавим свой) параметр
db_dir=/var/cache/minidlna
Куда складывать логи
За это отвечает параметр log_dir по-умолчанию он равен /var/log. Оставим его без изменения. Разве что раскоментируем его, если он закоментирован. Файл с логами будет называться minidlna.log
Собственно настройка закончена. Сохраняем файл, закрываем его и переходим к организации файловой системы для правильной работы нашего сервера
Организация файловой системы
Звучит грозно? Не надо бояться. Здесь мы будем создавать директории и символические ссылки. Итак.
Создаем заготовку для нашей медиабиблиотеки.
sudo mkdir -p /opt/medialib/video
sudo mkdir -p /opt/medialib/audio
sudo mkdir -p /opt/medialib/pictures
Далее меняем владельца этих директорий
sudo chown -R minidlna:minidlna /opt/medialib
Создаем директорию для файла базы данных MiniDLNA
sudo mkdir /var/cache/minidlna
Меняем владельца папки, чтобы сервер имел доступ к своей же базе данных
sudo chown minidlna:minidlna /var/cache/minidlna
Директорию для логов создавать не надо. Она уже есть.
Собственно осталась самая малость - добавить ссылки на директории с медиаконтентом в нашу медиабиблиотеку
sudo ln -s <путь_к_папке_с_видео_1> /opt/medialib/video/Films1
sudo ln -s <путь_к_папке_с_видео_2> /opt/medialib/video/Films2
sudo ln -s <путь_к_папке_с_аудио> /opt/medialib/audio/Music
sudo ln -s <путь_к_папке_с_фото> /opt/medialib/video/Photos
Ну и последний штрих - перезапускаем наш MiniDLNA сервер
sudo service minidlna restart
Ничего не работает :(
Должно пройти некторое время пока сервер просканирует все папки и запишет к себе в базу все, что ему надо. В зависимости от количества файлов этот процесс может занять от нескольких секунд до нескольких минут.
По собственному опыту могу сказать одно, что в основном все проблемы (телевизор видит сервер, но не видит файлов; файлы видно, но показывать не хочет и т.п.) из-за того, что:
  1. Вы неправильно раздали права на папки с видео/музыкой/фотками (или на конечные файлы). В данном случае просто надо выдать правильные права. Для файлов подойдут 664. Для папок 775. Как правило с папками все нормально. Не хватает прав как раз на конечных файлах. Для этого можно воспользоваться командой:
    find <папка_с_видео> -type f | sed 's/ /\\ /g' | xargs chmod 664
  2. Ваше устройство просто не поддерживает данный тип фалов или кодек. В данном случае изучайте документацию на устройство - возможно его можно перепрошить и обновить кодеки в нем
Ну а если все-равно ничего не работет, то видимо это судьба. Махни рукой и не забивай себе голову всякой ерундой.