В современной бытовой технике, например в телевизоре Samsung LE32B652T4W, поддерживается протокол DLNA (http://ru.wikipedia.org/wiki/DLNA), позволяющий организовать обращения к контенту других устройств. Было решено расшарить мультимедиа контент через DLNA-сервер под Linux.
Исследуем варианты
Судя по [[http://elinux.org/DLNA_Open_Source_Projects статье]] на elinux.org существует 3 реализации DLNA сервера под Linux:
1. [[http://ushare.geexbox.org/ uShare]]
2. [[http://live.gnome.org/Rygel Rygel]]
3. [[http://sourceforge.net/projects/minidlna/ minidlna]]
Не буду писать много про преимущества и недостатки каждого. Скажу просто, Rygel у меня вылетел и высыпал в консоль кучу отладочной информации. uShare заработал, но остановился на сканировании первого же каталога. Не понимает он кириллицу. Проблема известная и вроде как не решена, впрочем я сильно не исследовал этот вопрос, потому могу ошибаться. Остался minidlna. И он у меня заработал на ура.
++ Настраиваем и поднимаем
Скачиваем последнюю версию сервера и распаковываем архив. Внутри не будет исходников, там лежит бинарник minidlna и файл конфигурации minidlna.conf. Файл конфигурации копируем в /etc, а бинарник в /usr/sbin.
Приступим к конфигурированию сервера. Ни чего сложного в этом нет. Приведу часть моего конфига, ту, которую я изменил.
media_dir=V,/media/hdd/Медиа/Видео
media_dir=A,/home/user/Моя музыка
media_dir=P,/home/user/Мои рисунки
notify_interval=60
То есть я указал путь для контента (media_dir=). При этом буквы V, A и P указывают на характер контента. V - видео, A - аудио и P - картинки. Можно без этих букв, просто после знака равно сразу указать путь. Обратите внимание, название некоторых каталогов - minidlna все кушает на ура, даже пробелы не нужно экранировать.
Параметром notify_interval указан интервал в секундах для автоматического обнаружения новых файлов. Иногда, после копирования нового фильма, хочется сразу его посмотреть, и не ждать 900 секунд, которые установлены по умолчанию.
++ Запускаем
Все просто
minidlna -d -f /etc/minidlna.conf
и можно идти и смотреть фильмы. Но как быть с автозапуском? Можно конечно поместить команду в стандартный гномовский или кдешный автозапуск. Но на мой взгляд лучше воспользоваться init.d скриптом.
#! /bin/sh
# chkconfig: 345 99 10
# description: Fedora Startup/shutdown script for MiniDLNA daemon
# If you have chkconfig, simply:
# chkconfig --add minildna
# Original author: Perry Clark
## BEGIN INIT INFO
# Provides: minidlna
# Required-Start: $local_fs $remote_fs $syslog $network
# Should-Start:
# Required-Stop: $local_fs $remote_fs $syslog $network
# Should-Stop:
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: Minidlna
# Description: DLNA Media Server
### END INIT INFO
## EDIT FROM HERE
# Installation details
MINIDLNA="/usr/sbin/minidlna"
ARGS="/etc/minidlna.conf"
# Where to keep a log file
MINIDLNA_LOG="/var/log/minidlna.log"
# Where the PID lives
PID_FILE="/var/run/minidlna.pid"
## STOP EDITING HERE
# The path that is to be used for the script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
set -e
# Only start if we can find the minidlna.conf.
test -x $MINIDLNA || exit 0
# Parse command line parameters.
case $1 in
start)
echo -n "Starting MiniDLNA: "
$MINIDLNA -f $ARGS -P $PID_FILE >> $MINIDLNA_LOG 2>&1
echo "ok"
;;
stop)
echo -n "Stopping MiniDLNA: "
for pidf in `/bin/ls $PID_FILE 2>/dev/null`; do
if [ -s $pidf ]; then
kill `cat $pidf` >/dev/null 2>&1
fi
rm -rf $PIF_FILE
done
echo "ok"
;;
restart|reload|force-reload)
echo "Restarting MiniDLNA: "
$0 stop
sleep 2
$0 start
;;
*)
# Print help
echo "Usage: /etc/init.d/minidlna {start|stop|restart| reload|force-reload}"
exit 1
;;
esac
exit 0
Называем скрипт minidlna, копируем в /etc/init.d, присваиваем права 755 и добавляем в автозапуск.
chmod 755 minidlna
sudo chkconfig minidlna on
Запускать и останавливать minidlna вручную можно командами:
sudo /etc/init.d/minidlna start
sudo /etc/init.d/minidlna stop
После запуска minidlna будет сканировать каталоги с контентом. Это может занят несколько минут. За ходом сканирования можно следить в файле /tmp/minidlna/minidlna.log. Если после изменения путей в файле конфигурации телевизор не видит новых каталогов, попробуйте удалить /tmp/minidlna/files.db и перезапустить сервер.
И напоследок, телевизор и сервер подключены через WiFi маршрутизатор D-Link DIR-300.
URL: http://karapuzz.blogspot.com/2010/03/dlna.html
Обсуждается: http://www.opennet.dev/tips/info/2328.shtml