Показаны сообщения с ярлыком DLNA. Показать все сообщения
Показаны сообщения с ярлыком DLNA. Показать все сообщения

воскресенье, 7 ноября 2021 г.

Как установить и настроить DLNA miniDLNA Server в Linux

В настоящее время делиться мультимедийным контентом с устройствами в нашем доме проще, чем когда-либо, мы можем делиться контентом с нашего NAS-сервера или напрямую с Linux-на основе сервера, установка программы miniDLNA, которая позволит нам легко обмениваться контентом. Сервер DLNA позволит нам передавать аудио, видео и фотографии на телевизоры, смартфоны, планшеты и любые устройства с экраном. Этот контент можно воспроизводить на любом устройстве, совместимом с UPnP / DLNA. Сегодня в этой статье мы покажем вам, как настроить наш сервер DLNA на любом сервере Linux.

Установка и настройка сервера DLNA miniDLNA в Linux

Для чего нужен медиа-сервер DLNA?

В настоящее время подавляющее большинство маршрутизаторов с USB-портом имеют медиа-сервер DLNA, это означает, что, если мы подключим внешний жесткий диск или флешку, мы сможем воспроизводить мультимедийный контент на любом устройстве, подключенном к домашней локальной сети, без необходимость ничего не делать. Однако возможно, что наш маршрутизатор недостаточно мощный для выполнения этой задачи, тем более, что для чтения фильма или сериала, который мы собираемся воспроизвести, используется много процессора, и, в зависимости от битрейта мультимедийного контента, он может не хватить. По этой причине наиболее распространенным является использование внешнего сервера DLNA на любом сервере на базе Linux, таком как Debian на NAS, Raspberry Pi или любое устройство.

Для всего этого нам будет служить DLNA-сервер на сервере с операционной системой Linux:

  • Это позволяет нашему телевизору обнаруживать сервер и воспроизводить контент (аудио, видео и фотографии), который находится на сервере.
  • Другие устройства, такие как смартфоны, планшеты и даже наша консоль, также могут обнаруживать его и воспроизводить содержимое сервера DLNA через Wi-Fi.
  • Мы можем подключить другие устройства, например, совместимые колонки.

По логике вещей необходимо, чтобы все устройства были совместимы с сервером DLNA, который мы собираемся установить.

Серверы DLNA, которые мы можем использовать

Одним из наиболее широко используемых серверов DLNA является популярный miniDLNA , который совместим со многими операционными системами и практически со всеми устройствами. В нашем случае это тот, который всегда давал нам лучший результат, хотя есть и другие, такие как Fuppes, которые также работают очень хорошо (интегрированы в XigmaNAS-ориентированную операционную систему NAS). Другими широко используемыми серверами DLNA являются, например, Plex Media Server, который не только включает Plex, но и встроенный сервер DLNA для тех телевизоров, которые несовместимы с вашим приложением.

Основными характеристиками miniDLNA является то, что это сервер DLNA, который потребляет очень мало ресурсов, как на CPU / ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР и Оперативная память На уровне, все будет работать очень быстро, а загрузка процессора будет как раз при чтении мультимедийного содержимого внешнего диска. Этот сервер DLNA может быть установлен на любом Linux, независимо от оборудования, хотя по логике нам нужно, чтобы он был чем-то мощным, чтобы не было никаких проблем, и мы должны учитывать его потребление электроэнергии, потому что он будет активирован 24 часа в сутки. . Другие характеристики заключаются в том, что он имеет действительно простую конфигурацию, но очень важная деталь заключается в том, что он не позволяет перекодировать аудио и / или видео, таким образом, мы должны убедиться, что наш телевизор поддерживает различные существующие видеоформаты.

В этой статье мы использовали miniDLNA более 5 лет, и за все это время у нас не было никаких проблем с воспроизведением мультимедийного контента, за исключением тех старых телевизоров, которые не поддерживают новые видеокодеки, такие как H.265, но если ваш телевизор новый (относительно), у вас не должно возникнуть проблем. +

Установка и ввод в эксплуатацию MiniDLNA

Программа miniDLNA настолько хорошо известна, что у нас есть она доступна в официальных репозиториях основных дистрибутивов GNU / Linux, поэтому она будет у нас через диспетчер пакетов. В этом руководстве мы использовали Debian 10, но вы можете использовать любую версию, например Ubuntu, Linux Mint или любой другой дистрибутив, потому что все они работают одинаково.

Первое, что нужно сделать, это установить miniDLNA со всеми ее зависимостями:

sudo apt install minidlna

После установки запускаем службу miniDLNA:

sudo service minidlna start

Автоматически эта служба запускается вместе с операционной системой, нам не нужно делать абсолютно ничего другого, как вы можете видеть, когда мы добавляем:

sudo service minidlna status

Настроить сервер miniDLNA

Этот сервер DLNA настраивается с помощью одного файла конфигурации, который нам придется редактировать, поэтому он значительно облегчает его настройку и запуск, потому что нам не нужно будет редактировать несколько, а только один. Для его редактирования мы будем использовать любой текстовый редактор, обычно используется vim или nano, в нашем случае мы будем использовать nano.

sudo nano /etc/minidlna.conf

В самом файле конфигурации у нас будет вся необходимая документация для запуска сервера DLNA, но в этой статье мы подробно объясним, как его настроить, поскольку он поставляется на английском языке. Важной деталью является то, что у нас есть справочная страница (руководство) медиа-сервера miniDLNA, поэтому мы можем получить больше информации об операции.

man minidlna

Первое, что нам нужно узнать, это загрузить источники мультимедийного контента, в зависимости от того, есть ли у нас видео, аудио или фотографии, синтаксис будет следующим:

media_dir=A,/home/bron/multimedia/audio

media_dir = P, / home / bron / multimedia / фотографии

media_dir = V, / главная / броня / мультимедиа / видео

Как видите, если мы хотим загрузить «A» - это звук, P - это фотографии, а V - видео, таким образом, на телевидении он будет выглядеть идеально классифицированным. Если мы хотим, чтобы появились видео и фотографии, мы также могли бы это сделать, что идеально подходит для камер, которые также записывают видео:

media_dir=PV,/home/bron/multimedia/camara_fotos

Еще одно предложение, которое мы должны настроить, - где хранить базу данных DLNA, в этом случае это делается раскомментированием следующей строки:

db_dir=/var/cache/minidlna

То же самое происходит с каталогом журналов или регистров, в случае какой-либо ошибки:

log_dir=/var/log/minidlna

Остальные параметры конфигурации можно оставить таким образом:

port 8200

friendly_name = DLNA-сервер

inotify = да

notify_interval = 30

У нас есть все операторы, уже написанные в файле конфигурации, но они прокомментированы, поэтому мы должны раскомментировать их, чтобы они активировались. После того, как мы его настроили, мы сохраняем файл конфигурации и приступаем к перезагрузке сервера DLNA, чтобы он правильно применил изменения.

sudo service minidlna restart

Как только мы все это сделаем, мы сможем получить доступ к нашему телевизору или смартфону и протестировать медиа-сервер DLNA.

Настроить брандмауэр сервера Linux

Во всех операционных системах Linux брандмауэр всегда работает, обычно на основе iptables, но по умолчанию у нас есть «разрешить все», поэтому вам не нужно создавать какие-либо дополнительные правила для доступа к медиа-серверу DLNA. Если вы настроили брандмауэр iptables в ограничительном режиме с «запретить все», вам придется ввести два правила для его правильной работы.

iptables -A INPUT -p tcp --dport 8200 -j ACCEPT

iptables -A INPUT -p udp –dport 1900 -j ПРИНЯТЬ

Мы предполагаем, что у вас есть только один сетевой интерфейс и одна подсеть, в случае, если вы хотите фильтровать по порту или подсети, вам нужно будет добавить это, это правило разрешает локальный доступ только к двум портам, определенным выше.

Если вы хотите, чтобы эти правила в брандмауэре сохранялись, вам нужно будет выполнить следующую команду:

iptables-save > /etc/iptables/rules.v4

Теперь мы можем проверить, все ли правильно работает с тем клиентом DLNA, который нам нужен, например телевизор, смартфон или планшет.

Проверить статус сервера miniDLNA

Если мы получим доступ к нашему локальному IP-адресу через Интернет или с любого компьютера и поместим порт 8200, мы получим доступ к веб-интерфейсу статуса miniDLNA. Здесь мы увидим только медиа-библиотеку, количество аудио-, видео- и графических файлов. Мы также сможем увидеть клиентов, которые в настоящее время подключены к медиа-серверу DLNA, с их IP-адресом, MAC-адресом и количеством подключений.

В нашем случае мы положили:

http://localhost:8200

Воспроизведение содержимого нашего сервера DLNA

Теперь, когда мы все установили правильно, все, что нам нужно сделать, это найти сервер DLNA в локальной сети. В зависимости от того, какой клиент (устройство) вы используете, вам придется использовать ряд программ:

  • ТВ: Во всех телевизорах распознавание медиа-серверов DLNA полностью автоматическое, оно будет отображаться в верхней или нижней части, где появляются съемные устройства хранения.
  • ПК с Windows, Linux или MacOS: мы можем использовать KODI или VLC, два лучших варианта для всех платформ.
  • Android: VLC или BubbleUPnP - два приложения, которые позволят нам искать сервер DLNA в среде и воспроизводить его.
  • iOS: VLC

Во всех этих программах мы должны перейти к «Cеть”И найдите такую ​​опцию, как UPnP или DLNA, и наш недавно настроенный сервер DLNA появится автоматически. Если он не отображается ни на одном устройстве, мы рекомендуем вам проверить брандмауэр iptables, а также, если он активирован.

Как вы видели, установка и настройка сервера DLNA на нашем NAS или сервере Linux очень проста, нам просто нужно установить его и настроить текстовый файл, что не вызовет особых трудностей.

 

пятница, 30 октября 2015 г.

Linux Mint 17 и DLNA

Зачем это все надо


Linux Mint — отличная домашняя ОС. Богатый выбор графических сред на любой вкус, простая и понятная даже новичку установка, сразу после установки имеем основной набор необходимого софта, удобный менеджер приложений, основные мультимедийные кодеки. В общем, отличная система для перехода и ознакомления с Linux.

image

Но возникает проблема для тех, у кого нет дома NAS или чего-то подобного, а смотреть контент с ПК на других устройствах, поддерживающих DLNA хочется. Под Linux существует множество различных DLNA-серверов, но оптимальным, все же, является MiniDLNA. И тому есть несколько причин. Во-первых, это типичный Unix-way: этот сервер является именно DLNA-сервером, а не комбайном с кучей свистелок, при этом контент без проблем воспринимается на любом устройстве. Даже телевизоры Samsung со своим AllShare прекрасно подключаются к нему. Также можно отметить и замечательную скорость работы и нетребовательность к ресурсам этого сервера.

И все бы было хорошо, но вот в с помощью команды
sudo apt-get install minidlna
установить его не получится — нет его в репозитарии.

Существуют разные варианты устранения этого недоразумения, но самый правильный путь — установка из исходников.
Чтобы не отвратить возможных новоиспеченных линуксоидов с этого пути и, возможно, помочь кому-то, напишу как обойти подводные камни, ибо информации много, но в начале пути людям нужно попроще.

Подготовка


Если будете выполнять команды в консоли, запущенной с правами root, команду sudo писать не нужно.

Для начала нужно установить необходимые библиотеки:

Обновляемся:

sudo apt-get update
И устанавливаем сами библиотеки:
sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libflac-dev libvorbis-dev libogg-dev libid3tag0-dev libexif-dev libjpeg-dev libsqlite3-dev


Самая свежая версия MiniDLNA на данный момент — 1.1.3, ее можно скачать здесь, либо загрузить из консоли:
wget --trust-server-names http://sourceforge.net/projects/minidlna/files/latest/download
ключ перед адресом нужен, чтобы сохранилось оригинальное имя, с выхдом новой версии имя файла будет отличатся. После этого архив нужно распаковать: 

tar -xf minidlna-1.1.3.tar.gz
Теперь перейдем в распакованную папку с исходниками
cd minidlna-1.1.3


Если вы хотите, чтобы на устройстве отображались сразу папки с файлами, нужно немного подправить код:
Открывайте спойлер
Для отключения запроса способа отображения файлов нужно в папке с исходниками (minidlna-1.1.3, мы в нее уже должны были перейти) подправить файл upnpsoap.c, но сначала сделаем его резервную копию:

sudo cp upnpsoap.c upnpsoap.c.old
и откроем в редакторе
sudo nano upnpsoap.c
поиском (F6), ищем процедуру: 

"BrowseContentDirectory"static void
BrowseContentDirectory(struct upnphttp * h, const char * action)
{


В начале процедуры выполняется разбор SOAP/XML-запроса, затем его обработка и возврат результата. Разбор запроса завершается формированием отладочного сообщения:
DPRINTF(E_DEBUG, L_HTTP, "Browsing ContentDirectory:\n"
    " * ObjectID: %s\n"
    " * Count: %d\n"
    " * StartingIndex: %d\n"
    " * BrowseFlag: %s\n"
    " * Filter: %s\n"
    " * SortCriteria: %s\n",
   ObjectID, RequestedCount, StartingIndex,
   BrowseFlag, Filter, SortCriteria);


Далее реализован выбор корневого контейнера в зависимости от конфигурационного параметра root_container:

 // Если запрошен корневой контейнер
 if( strcmp(ObjectID, "0") == 0 )
 {
  // Выставляем флаг корневого контейнера
  args.flags |= FLAG_ROOT_CONTAINER;
  // Если в конфиге задан корневой контейнер
  if( runtime_vars.root_container )
  {
   // Если клиентом является аудио плейер и в конфиге задан обзор папок
   // Отправляем его в папку с музыкой
   if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_container, BROWSEDIR_ID) == 0) )
    ObjectID = MUSIC_DIR_ID;
   else // Иначе выставляем контейнер, заданный в конфиге
    ObjectID = runtime_vars.root_container;
  }
  else // Если контейнер в конфиге не задан
  {
   // Если клиентом является аудио плейер
   // Отправляем его в папку с музыкой
   if( args.flags & FLAG_AUDIO_ONLY )
    ObjectID = MUSIC_ID;
  }
 }


Сразу после этого блока и перед блоком с запросами к БД добавляем код перенаправления папок для видео, музыки и изображений: 

 //Redirect video to folder
 if( strcmp(ObjectID, VIDEO_ID) == 0 )
 {
  ObjectID = VIDEO_DIR_ID;
 }

 //Redirect music to folder
 if( strcmp(ObjectID, MUSIC_ID) == 0 )
 {
  ObjectID = MUSIC_DIR_ID;
 }

 //Redirect images to folder
 if( strcmp(ObjectID, IMAGE_ID) == 0 )
 {
  ObjectID = IMAGE_DIR_ID;
 }
В итоге правленный фрагмент должен выглядеть следующим образом:
        if( strcmp(ObjectID, "0") == 0 )
        {
                args.flags |= FLAG_ROOT_CONTAINER;
                if( runtime_vars.root_container )
                {
                        if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_containe$
                                ObjectID = MUSIC_DIR_ID;
                        else
                                ObjectID = runtime_vars.root_container;
                }
                else
                {
                        if( args.flags & FLAG_AUDIO_ONLY )
                                ObjectID = MUSIC_ID;
                }
        }

        //Redirect video to folder
        if( strcmp(ObjectID, VIDEO_ID) == 0 )
        {
                ObjectID = VIDEO_DIR_ID;
        }

        //Redirect music to folder
        if( strcmp(ObjectID, MUSIC_ID) == 0 )
        {
                ObjectID = MUSIC_DIR_ID;
        }

        //Redirect images to folder
        if( strcmp(ObjectID, IMAGE_ID) == 0 )
        {
                ObjectID = IMAGE_DIR_ID;
        }

        if( strcmp(BrowseFlag+6, "Metadata") == 0 )
        {
                args.requested = 1;
                sql = sqlite3_mprintf("SELECT %s, " COLUMNS
                                      "from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID$
                                      " where OBJECT_ID = '%q';",
                                      (args.flags & FLAG_ROOT_CONTAINER) ? "0, -1" : "o.OBJECT_I$
                                      ObjectID);
                ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg);
                totalMatches = args.returned;
        }


Чтобы упростить процедуру последующего обновления, сохраним патч с внесенными изменениями:
diff -u upnpsoap.c.old upnpsoap.c > ../minidlna-folders.patch


Теперь вместо редактирования файла, достаточно применить патч:

cd ~/src/minidlna/minidlna-НоваяВерсия
patch < ../minidlna-folders.patch
Теперь можно переходить к конфигурированию.
Если вам это не нужно, переходите сразу к конфигурированию: 

./configure


И компилируем: 

make

Установка


1) Для тех, кто в дальнейшем захочет обновить версию, предыдущую можно удалить (конфигурационные файлы при этом сохраняются), если этого не сделать, то в случае, если в новой версии состав установочных файлов изменится, в /usr/local могут остаться старые файлы, при первой установке — переходим сразу к пункту 2. 

Для удаления заходим в папку с предыдущей установкой и выполняем команду:
sudo apt-get remove minidlna
2) Запускаем установку (в комментариях предложили более правильный путь, чем make install): 

sudo checkinstall -D
Ключ -D указывает, что должен быть создан Debian-пакет

3)Если мы производим первоначальную установку, нужно создать init-скрипт:
sudo nano /etc/init.d/minidlna
, если мы обновляем версию, больше ничего делать не нужно, при первоначальной установке у нас откроется пустой файл, в который нужно внести следующий код: 

Листинг
#!/bin/sh
#
# MiniDLNA initscript
#
# Based on the mediatomb debian package.
# Original authors: Tor Krill <tor@excito.com>
#                   Leonhard Wimmer <leo@mediatomb.cc>
#                   Andres Mejia <mcitadel@gmail.com>
#
# Modified by: Benoit Knecht <benoit.knecht@fsfe.org>
#
### BEGIN INIT INFO
# Provides:          minidlna
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop::    $network $local_fs $remote_fs
# Should-Start:      $all
# Should-Stop:       $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start minidlna at boot time
# Description:       Manage the minidlna daemon, a DLNA/UPnP-AV media server.
### END INIT INFO

unset USER

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="DLNA/UPnP-AV media server"
NAME=minidlnad
DAEMON=/usr/local/sbin/minidlnad
PIDDIR=/run/$NAME
PIDFILE=$PIDDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/minidlna
DEFAULT=/etc/default/minidlna

# Exit if the package is not installed
[ -x $DAEMON ] || exit 0

# Read configuration variable file if it is present
[ -r $DEFAULT ] && . $DEFAULT

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# Do not start the daemon if NO_START is enabled in DEFAULT
if [ "$START_DAEMON" != "yes" ] && [ "$1" != "stop" ]; then
        log_warning_msg "$NAME: Not starting $DESC."
        log_warning_msg "$NAME: Disabled in $DEFAULT."
        exit 0
fi

# Set the default configuration file
if [ -z $CONFIGFILE ]; then
        CONFIGFILE=/etc/minidlna.conf
fi

# Set the default log file
if [ -z $LOGFILE ]; then
        LOGFILE=/var/log/minidlna.log
fi

# Run as `minidlna' if USER is not specified or is `root'
if [ -z $USER ]; then
        USER=minidlna
fi

# If no group is specified, use USER
if [ -z $GROUP ]; then
        GROUP=$USER
fi

DAEMON_ARGS="-f $CONFIGFILE -P $PIDFILE $DAEMON_OPTS"

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        touch $LOGFILE && chown $USER:$GROUP $LOGFILE || return 2
        if [ ! -d $PIDDIR ]; then
            mkdir $PIDDIR || return 2
        fi
        chown $USER:$GROUP $PIDDIR || return 2

        start-stop-daemon --start --quiet --pidfile $PIDFILE \
                --chuid $USER:$GROUP --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE \
                --chuid $USER:$GROUP --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -rf $PIDDIR
        return "$RETVAL"
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
    do_start
    case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
  ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
       status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                if [ "$1" = "force-reload" ]; then
                        # Rescan the collection
                        DAEMON_ARGS="$DAEMON_ARGS -R"
                fi
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
        exit 3
        ;;
esac

:
, сохранить комбинацией клавиш Ctrl+O и выйти из редактора — Ctrl+X.

4) После этого даем права на запуск скрипта:
sudo chmod 755 /etc/init.d/minidlna
5) И активируем запуск init-скрипта:
sudo update-rc.d minidlna defaults
6) Так как по умолчанию служба запускается под пользователем minidlna, нам нужно создать соответствующую учетную запись:

sudo adduser --system --home /var/lib/minidlna --group --gecos "MiniDLNA server" minidlna
7) Правим файл конфигурации сервера:
sudo nano /etc/minidlna.conf
В нем нам нужно следующее содержимое (здесь подправлен интервал, с которым сервер себя анонсирует, так как не все телевизоры опрашивают сервер, также вам надо прописать путь к папке с медиа, к примеру так: «media_dir=V,/mnt/sdb6/Video/Alex/» в соответствующем разделе файла): 

Листинг minidlna.conf
# Порт сервера
port=8200

# Привязка к сетевому интерфейсу
# Можно задать несколько интерфейсов
# в формате network_interface=eth0,eth1
#network_interface=eth0

# Имя пользователя или UID, под которым будет работать служба
# Добавлен в версии 1.1.0
# В Debian задается в параметрах init-скрипта
#user=jmaggard

# Путь к папке с медиа-файлами
# Для сканирования нескольких папок, укажите несколько параметров media_dir
# Чтобы сканировать файлы определенного типа, укажите соответствующий префикс:
#   A - аудио: media_dir=A,/home/jmaggard/Music
#   V - видео: media_dir=V,/home/jmaggard/Videos
#   P - изображения: media_dir=P,/home/jmaggard/Pictures
# Начиная с версии 1.1.0, можно задать несколько типов:
#   PV - изображения и видео: media_dir=AV,/var/lib/minidlna/digital_camera
#
# При изменении параметра, потребуется повторное сканирование файлов.
# Необходимо выполнить команду "service minidlna force-reload" от имени root.
# Начиная с версии 1.1.0, при изменении параметра, сканирование выполняется автоматически.
media_dir=/var/lib/minidlna

# Имя DLNA-сервера, отображаемое клиентом
# По умолчанию: "$HOSTNAME:$USER"
#friendly_name=

# Путь к папке для хранения базы данных и кэша обложек альбомов
db_dir=/var/lib/minidlna

# Путь к папке с лог-файлами
log_dir=/var/log

# Уровень детальности лога
# В формате log_level=источник1,источник2=значение1,источник3,источник4=значение2 ...
# Доступные источники: "general", "artwork", "database", "inotify", "scanner", "metadata", "http", "ssdp", "tivo"
# Возможные значения: "off", "fatal", "error", "warn", "info" or "debug"
#log_level=general,artwork,database,inotify,scanner,metadata,info,ssdp,tivo=warn

# Перечень имен файлов-обложек альбомов, разделитель: "/"
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg

# Автообнаружение новых файлов
# Включено по умолчанию
inotify=yes

# Поддержка устройств TiVo
#enable_tivo=no

# Строго следовать DLNA-стандарту
# Использовать серверное масштабирование для очень больших JPEG-изображений
# Что может снизить скорость их обработки.
#strict_dlna=no

# Адрес веб-страницы устройства
# По умолчанию IP-адрес и заданный порт сервера
#presentation_url=http://www.mylan/index.php

# Интервал отправки SSDP-уведомлений, в секундах
notify_interval=30

# Серийный номер и номер модели DLNA-сервера, сообщаемый клиенту
serial=12345678
model_number=1

# Путь к сокету MiniSSDPd, если установлен
# Требуется для обеспечения работы нескольких DLNA/UPnP служб на одном сервере
#minissdpdsocket=/run/minissdpd.sock

# Контейнер, используемый в качестве корневой папки для клиентов
#   * "." - стандартный контейнер
#   * "B" - "Обзор папки"
#   * "M" - "Музыка"
#   * "V" - "Видео"
#   * "P" - "Изображения"
# Если задано "B" и клиент представится как аудиоплеер, в качестве корня будет использована папка "Music/Folders"
#root_container=.

# Всегда использовать заданный критерий сортировки, вместо значения, запрошенного клиентом
#force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title

# Максимальное число одновременных подключений
# Учтите: многие клиенты открывают несколько подключений одновременно
#max_connections=50
8)Затем проверяем параметры init-скрипта /etc/default/minidlna:
sudo nano /etc/default/minidlna
Обычно корректировка не требуется. Если файл отсутствует, при первичной установке из исходников, копируем листинг:
# Запускать демон, если задано "yes"
START_DAEMON="yes"

# Путь к файлу конфигурации
#CONFIGFILE="/etc/minidlna.conf"

# Путь к лог-файлу
#LOGFILE="/var/log/minidlna.log"

# Запуск от имени заданного пользователя и группы
# По умолчанию: minidlna
#USER="minidlna"
#GROUP="minidlna"

# Дополнительные ключи запуска
DAEMON_OPTS=""
Обычно после этого не требуется дополнительных настроек, но если есть проблемы с доступом к медиа (или хотите перестраховаться), можно настроить права доступа:

Настройка прав доступа:
Поскольку служба работает под пользователем с ограниченными правами, публикуемые папки и файлы должны быть доступны на чтение для всех пользователей, следовательно, иметь разрешения 644: «rw- r-- r--», для файлов и 755: «rwx r-x r-x», для папок.

Проверяем доступность для каждой папки, заданной в minidlna.conf, командой:
sudo -u minidlna ls -l папка
Если папка недоступна, задаем права доступа:
sudo chmod -R 755 папка
Вышестоящие папки также должны быть доступны на чтение всем пользователям. Проверяем доступность на чтение каждой папки, указанной в пути. Для вышестоящих папок используем chmod без ключа -R, если не требуется сброс разрешений для всех дочерних файлов и папок. 
В качестве альтернативы смене разрешений, можно запустить MiniDLNA от имени пользователя или группы-владельца файлов. Для этого необходимо задать параметры USER и GROUP в /etc/default/minidlna, и сменить владельца папки /var/lib/minidlna командой:
sudo chown -R пользователь:группа /var/lib/minidlna

Запуск сервера


Запускаем:

sudo service minidlna force-reload


Проверяем, работает ли служба, также смотрим параметры запуска:

ps ax | grep minidlna


Проверяем, слушается ли порт:

sudo ss -4lnp | grep minidlna


Проверяем лог:

cat /var/log/minidlna.log


В случае успешного старта, лог должен быть примерно следующим:

Gothician gothician # cat /var/log/minidlna.log
[2014/07/27 10:05:31] minidlna.c:1014: warn: Starting MiniDLNA version 1.1.3.
[2014/07/27 10:05:31] minidlna.c:355: warn: Creating new database at /var/lib/minidlna/files.db
[2014/07/27 10:05:31] minidlna.c:1053: warn: HTTP listening on port 8200
[2014/07/27 10:05:31] scanner.c:706: warn: Scanning /var/lib/minidlna
[2014/07/27 10:05:31] scanner.c:793: warn: Scanning /var/lib/minidlna finished (0 files)!
[2014/07/27 10:05:31] playlist.c:125: warn: Parsing playlists...
[2014/07/27 10:05:31] playlist.c:259: warn: Finished parsing playlists.
[2014/08/03 09:25:35] minidlna.c:1053: warn: HTTP listening on port 8200


Если видим: «WARNING: Inotify max_user_watches [8192] is low.», необходимо увеличить число дескрипторов слежения inotify до 100 000. Для этого в файл /etc/sysctl.conf добавим строки:

#MiniDLNA warning fix
fs.inotify.max_user_watches = 100000


Вручную редактором:

sudo nano /etc/sysctl.conf


Или копипастом команды:

sudo sh -c 'printf "\n\n#MiniDLNA warning fix\nfs.inotify.max_user_watches = 100000\n" >> /etc/sysctl.conf && cat /etc/sysctl.conf'


Изменение параметра вступит в силу после перезагрузки системы.
Открываем в браузере адрес.сервера:8200, видим количество файлов в библиотеке, начиная с версии 1.1.2, также отображается список подключенных клиентов.

Настройка DLNA/UPnP-AV сервера завершена.

При появлении ошибок в каталоге, необходимо выполнить повторное сканирование файлов.
При использовании приведенного выше init-скрипта, для запуска сканирования медиа-библиотеки используем команду:

sudo service minidlna force-reload


Служба при этом будет перезапущена, подключенные клиенты будут отключены.

Для сканирования медиа-библиотеки при каждом старте системы можно задать ключ запуска: "-R" в параметре DAEMON_OPTS в файле /etc/default/minidlna. Сканирование большой медиа-библиотеки существенно нагружает диск, что может замедлить загрузку системы.

Полное формирование каталога может занять несколько минут. Сканирование папок выполняется в порядке их объявления в конфиге. Файлы из небольших папок, объявленных в конфиге выше, появятся в каталоге в самом начале процесса сканирования. Крупные папки с редко воспроизводимым контентом имеет смысл размещать в конфиге последними.

Все это опробовано на своей системе, пользуйтесь на здоровье. Надеюсь, количество пользователей Linux будет постоянно увеличиваться.

По материалам http://itadept.ru/wiki.archlinux.orghttp://habrahabr.ru/post/231653/