Come installare un server DLNA su un router


In questa pagina descriverò come installare un server DLNA su un router (Asus RT-AC56U) - useremo un pacchetto Entware, pertanto fare riferimento a questa pagina su come installare Entware su un router.
Noi useremo il server "minidlna", uno dei più usati server DLNA degli ambienti Linux. Per installare questo pacchetto, useremo il comando "opkg install minidlna". Questo comando installerà il server minidlna e tutti i pacchetti dipendenti. Una volta installato, possiamo usare il seguente comando per conoscere quanti file sono inclusi in questo pacchetto:

opkg files minidlna

Package minidlna (1.2.1-2) is installed on root and has the following files:
/opt/bin/minidlna
/opt/etc/minidlna.conf
/opt/etc/init.d/S90minidlna

Pertanto abbiamo il file binario denominato "minidlna", il file di configurazione "minidlna.conf" e il file script (S90minidlna) per avviare/fermare il server minidlna.
Così se vogliamo avviare il server minidlna, possiamo usare il comando "/opt/etc/init.d/S90minidlna start", mentre per fermarlo useremo il comando "/opt/etc/init.d/S90minidlna stop". Questo script può essere eseguito ogni qualvolta viene montata l'unità disco esterna USB come descritto nella pagina "Come installare Entware su un router".
Diamo uno sguardo al file binario usando il comando "minidlna --help":

minidlna --help

Usage:
minidlna [-d] [-v] [-f config_file] [-p port]
[-i network_interface] [-u uid_to_run_as]
[-t notify_interval] [-P pid_filename]
[-s serial] [-m model_number]
[-w url] [-r] [-R] [-L] [-S] [-V] [-h]

Notes:
Notify interval is in seconds. Default is 895 seconds.
Default pid file is /var/run/minidlna/minidlna.pid.
With -d minidlna will run in debug mode (not daemonize).
-w sets the presentation url. Default is http address on port 80
-v enables verbose output
-h displays this text
-r forces a rescan
-R forces a rebuild
-L do not create playlists
-S changes behaviour for systemd
-V print the version number

Non abbiamo bisogno del parametro "-f" (il file di configurazione) poiché questo parametro viene usato automaticamente dallo script nella sottocartella "/opt/etc/init.d" (il file di configurazione predefinito è "/opt/etc/minidlna.conf").
Invece abbiamo bisogno del parametro "-r" (forza una nuova scansione) ogni qualvolta abbiamo bisogno di riesaminare tutti i file multimediali e per ricreare il database.
Il più importante file del pacchetto "minidlna" è il file di configurazione, posto nella sottocartella "/opt/etc".
Ciò che segue è un esempio di file di configurazione:

# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200

# network interfaces to serve, comma delimited
#network_interface=eth0

# specify the user account name or uid to run as
#user=jmaggard

# set this to the directory you want scanned.
# * if you want multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to specific content types, you
# can prepend the types, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
# + "PV" for pictures and video (eg. media_dir=PV,/home/jmaggard/digital_camera)
media_dir=/opt/media

# set this to merge all media_dir base contents into the root container
# note: the default is no
#merge_media_dirs=no

# set this if you want to customize the name that shows up on your clients
#friendly_name=My DLNA Server

# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache
db_dir=/opt/var/minidlna

# set this if you would like to specify the directory where you want MiniDLNA to store its log file
log_dir=/opt/var/minidlna

# set this to change the verbosity of the information that is logged
# each section can use a different level: off, fatal, error, warn, info, or debug
#log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn

# this should be a list of file names to check for when searching for album art
# note: names should be delimited with a forward slash ("/")
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

# set this to no to disable inotify monitoring to automatically discover new files
# note: the default is yes
inotify=yes

# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
enable_tivo=no

# set this to strictly adhere to DLNA standards.
# * This will allow server-side downscaling of very large JPEG images,
# which may hurt JPEG serving performance on (at least) Sony DLNA products.
strict_dlna=no

# default presentation url is http address on port 80
#presentation_url=http://www.mylan/index.php

# notify interval in seconds. default is 895 seconds.
notify_interval=900

# serial and model number the daemon will report to clients
# in its XML description
serial=12345678
model_number=1

# specify the path to the MiniSSDPd socket
#minissdpdsocket=/opt/var/minidlna/minissdpd.sock

# use different container as root of the tree
# possible values:
# + "." - use standard container (this is the default)
# + "B" - "Browse Directory"
# + "M" - "Music"
# + "V" - "Video"
# + "P" - "Pictures"
# + Or, you can specify the ObjectID of your desired root container (eg. 1$F for Music/Playlists)
# if you specify "B" and client device is audio-only then "Music/Folders" will be used as root
#root_container=.

# always force SortCriteria to this value, regardless of the SortCriteria passed by the client
#force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title

# maximum number of simultaneous connections
# note: many clients open several simultaneous connections while streaming
#max_connections=50

# PNG image to use for an icon, optionally followed by a hex background
# color
#icon=myicon.png,7f7f7f

# Background color (hex rgb triplet) for PNG images converted to jpeg. Two
# colors indicate that a checkerboard background, in those colors, should
# be used.
#bgcolor=666666,999999

# Suport to Movie Thumbnail generation. To use this option, thumbnail generation must be enable at compile time.
enable_thumbnail=yes

# The width of the thumbnail image. Large images takes more time to generate. To use this option, thumbnail generation must be enable at compile time.
thumbnail_width=160

# Thumbnail Image quality. To use this option, thumbnail generation must be enable at compile time.
thumbnail_quality=8

# Should the thumbnail have a film strip? To use this option, thumbnail generation must be enable at compile time.
enable_thumbnail_filmstrip=yes

# For owners of LG TVs who suffer from 100% CPU utilization on the server
# If you have a large collection of movies, set this value to define
# how many objects will be sent by the server at once (0-100)
# The downside of using this option is being unable to
# "see" all images and/or pictures at once, the workaround is to use
# the "Browse Folders" mode
# search_limit=0

Suggerisco di modificare le seguenti linee nel file "minidlna.conf":

  • "#network_interface=eth0". Per la maggior parte dei router Asus, l'interfaccia di rete da usare è "br0", pertanto modifichiamo la linea in "network_interface=br0";
  • "#user=jmaggard". Io suggerisco di eseguire il server "minidlna" come utente "nobody" (se questa linea rimane commentata, il server verrà eseguito come utente "root"), pertanto cambiamo questa linea in "user=nobody";
  • "#friendly_name=My DLNA Server". Questo è il nome visualizzato dall'applicazione client DLNA. Ad esempio per il router RT-AC56U possiamo usare la linea "friendly_name=RT-AC56U";
  • "media_dir=/opt/media". Questa è la cartella di origine che verrà esaminata dal server minidlna e che verrà mostrata dall'applicazione client DLNA. Più cartelle significa più lavoro da effettuare dal server minidlna e più cartelle che verranno mostrate dall'applicazione client DLNA. Se volete usare tutte le unità disco esterne USB montate, potete usare la linea "media_dir=/mnt".

Da ricordare che il server "minidlna" può mostrare una pagina di presentazione, solitamente è all'indirizzo "http://[indirizzo router]:[porta]", dove "porta" è la porta inclusa nel file di configurazione all'interno della linea "port=" (il valore predefinito è 8200). La pagina di presentazione include un sommario di tutti i file esaminati (classificati in "file Audio", "file Video" e "file Immagine"), ed un sommario di tutti i client connessi.
Sfortunatamente la pagina di presentazione non include nessun pulsante attivo che esegue un'azione sul server minidlna, ad esempio non permette di riesaminare le cartelle oppure di ricostruire il database. Queste azioni vanno eseguite manualmente, usando lo script per fermare il server ed in seguito avviare manualmente il server con i parametri appropriati.