Raghotham Sripadraj

07 Sep 2014

DLNA on RaspberryPi

I always wanted to setup a media server at home for the following reasons:

  1. Reduce redundancy — having multiple copies of media for different devices like phone, tablet, smart TV etc
  2. Ease of use — no need to copy files to and from devices to play media (mostly Pink Floyd and movies)
  3. One stop shop with transmission integration — download files on RaspberryPi and they appear on the media server

The easiest solution was to turn my RaspberryPi into a DLNA server. For this, I required to have a few basic packages and had to configure each.

It was a bit hard to find all of them in a single post and hence I’m writing this post.

Packages required

  • samba
  • nginx (for transmission)
  • nfs
  • ntfs (optional, to support ntfs file system)
  • transmission-daemon
  • minidlna
sudo apt-get install samba samba-common-bin sudo apt-get install nginx sudo apt-get install nfs-kernel-server nfs-common portmap sudo apt-get install ntfs-3g # if you want ntfs sudo apt-get install transmission-daemon sudo apt-get install minidlna

samba

Append /etc/samba/smb.conf

[public] path = /path/to/public/folder browseable = yes writeable = yes guest ok = no read only = no

minidlna

Edit /etc/minidlna.conf

media_dir=/path/to/public/folder media_dir=V,/path/to/public/videos/folder media_dir=A,/path/to/public/music/folder media_dir=P,/path/to/public/pictures/folder friendly_name=rpi

transmission-daemon

mkdir -p /opt/torr sudo chown -R debian-transmission /opt/torr cp /etc/transmission-daemon/settings.json /etc/transmission-daemon/settings_template.json

Edit /etc/transmission-daemon/settings.json

Change the value of download-dir field to /opt/torr

{ .. "download-dir": "/opt/torr", .. }

Time to test!

sudo service samba stop sudo service samba start sudo service minidlna stop sudo service minidlna start sudo service transmission-daemon stop sudo service transmission-daemon start

To test if transmission daemon is running, open http://rpi_ip_addr:9091/transmission/web/

IP address of devices keep changing and hence it is difficult to access it with IP address. We can solve this problem by using the .local domain. For this we need avahi-daemon and tweak the hosts file

avahi-daemon

sudo apt-get install avahi-daemon

Edit /etc/init.d/hostname

Change

127.0.1.1 raspberrypi127.0.1.1 [new name here]

Reboot rpi

Now you should be able to access your raspberrypi using the URL http://host_name.local

For example, http://raspberrypi.local

PS: Most of the times minidlna does not refresh the collection in the specified folders. We need to explicitly run the following command

sudo minidlna -R sudo service minidlna restart

This problem might be because of the inotify functionality of the linux kernel. It has to be enabled by the kernel. A solution is posted here

References