使用 Raspberry Pi 配置 DLNA server

家里有一款老版本的 Raspberry Pi, 已经闲置在布满灰尘的角落里多年。 今日忽然心血来潮,心想不如搭建一个的 DLNA server 以便用于视频,音乐,以及照片的分享。

什么是 DLNA 呢

DLNA 的全称为: Digital Living Network Alliance. 由 Sony 在 2003 年提出,旨在使得家庭网络中的设备可以共享媒体数据。

DLNA 设备分为 Server 端 和 Client 端。 两者通过 WiFi 相连,所以需要把两种设备放到一个局域网内。

Server 端设备主要是用来存储,分享与发送媒体文件。本文中的描述会 把一台 Raspberry Pi 变身为一台 DLNA Server 设备。 一般, PC 通过安装 DLNA Server 软件就可以工作。 比如 Windows 系统里的 Media Player 就自带了 DLNA server 功能。 而 Linux 下,我们采用 minidlna

DLNA Client 端设备主要用来查看和播放媒体文件。 一般的智能电视,智能手机(非 Apple iPhone),智能音响等都集成了 DLNA client 的功能。

媒体播放中的问题

虽然这个设想很好,不能保证可以 100% 顺利工作。原因有很多,一种为 Client 端设备不支持媒体文件的格式,例如 mp4, Divx 等等。

RaspberryPi 的硬件和软件版本

硬件版本
 pi@raspberrypi:~ $ cat /proc/device-tree/model
 Raspberry Pi Model B Rev 1
软件版本
 pi@raspberrypi:~ $ cat /etc/os-release
 PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
 NAME="Raspbian GNU/Linux"
 VERSION_ID="9"
 VERSION="9 (stretch)"
 ID=raspbian
 ID_LIKE=debian
 HOME_URL="http://www.raspbian.org/"
 SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
 BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

安装和配置

选择安装的包: minidlna

更新以及安装
 pi@raspberrypi:~ $ sudo apt-get update
 Get:1 http://raspbian.raspberrypi.org/raspbian stretch InRelease [15.0 kB]
 Get:2 http://archive.raspberrypi.org/debian stretch InRelease [25.4 kB]
 Get:3 http://raspbian.raspberrypi.org/raspbian stretch/main armhf Packages [11.7 MB]
 Get:4 http://archive.raspberrypi.org/debian stretch/main armhf Packages [220 kB]
 Get:5 http://archive.raspberrypi.org/debian stretch/ui armhf Packages [45.0 kB]
 Get:6 http://raspbian.raspberrypi.org/raspbian stretch/contrib armhf Packages [56.9 kB]
 Get:7 http://raspbian.raspberrypi.org/raspbian stretch/non-free armhf Packages [95.5 kB]
 Fetched 12.1 MB in 3min 32s (57.1 kB/s)
 Reading package lists... Done

 pi@raspberrypi:~ $ sudo apt-get install minidlna
 Reading package lists... Done
 Building dependency tree
 Reading state information... Done
 The following packages were automatically installed and are no longer required:
   kodi-bin libao-common libao4 libcec4 libmariadbclient18 libmicrohttpd12 libp8-platform2 libpcrecpp0v5 libpulse-mainloop-glib0
   libshairplay0 libssh-4 libtinyxml2.6.2v5 mysql-common python-bluez python-imaging
 Use 'sudo apt autoremove' to remove them.
 The following NEW packages will be installed:
   minidlna
 0 upgraded, 1 newly installed, 0 to remove and 330 not upgraded.
 Need to get 128 kB of archives.
 After this operation, 362 kB of additional disk space will be used.
 Get:1 http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian stretch/main armhf minidlna armhf 1.1.6+dfsg-1 [128 kB]
 Fetched 128 kB in 1s (84.9 kB/s)
 Selecting previously unselected package minidlna.
 (Reading database ... 124950 files and directories currently installed.)
 Preparing to unpack .../minidlna_1.1.6+dfsg-1_armhf.deb ...
 Unpacking minidlna (1.1.6+dfsg-1) ...
 Processing triggers for systemd (232-25+deb9u2) ...
 Processing triggers for man-db (2.7.6.1-2) ...
 Setting up minidlna (1.1.6+dfsg-1) ...
 Processing triggers for systemd (232-25+deb9u2) ...
配置媒体文件目录以便共享
 sudo vi /etc/minidlan.conf
更改以下几项
 media_dir=A,/home/pi/Music      # A means audio, like music
 media_dir=P,/home/pi/Pictures   # P means pictures, photos, images
 media_dir=V,/home/pi/Videos     # V means videos
 friendly_name=RaspberryPi       # 设置自己喜欢的名字,以便出现在 dlna 客户端的设备列表中
 inotify=yes                     # 自动侦测媒体文件的变化
重启服务
 pi@raspberrypi:~ $ sudo systemctl restart minidlna
 pi@raspberrypi:~ $ sudo systemctl force-reload minidlna
 pi@raspberrypi:~ $ sudo systemctl enable minidlna
 minidlna.service is not a native service, redirecting to systemd-sysv-install.
 Executing: /lib/systemd/systemd-sysv-install enable minidlna