Raspberry Pi从零开始搭建低成本NAS(5)-UPNP/DLNA多媒体

说到RPi上的DNLA,就不得不说下MiniDLNA,网上资料教程最多的就是它了,我自己用的也是它。后面我会介绍用plex来搭建流媒体服务,它的功能更加强大,支持在线转码,缺点就是其专用客户端需要收费,树莓派跑起来比较占资源。其实有很多软件可以用来搭建流媒体服务,下面两个网站有关于这方面的详细信息,有兴趣可以参考,

https://en.wikipedia.org/wiki/Comparison_of_UPnP_AV_media_servers/
https://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients/

miniDLNA

安装miniDLNA

如果采用sudo apt-get install miniDLNA,可能安装的不是最新版本,并且miniDLNA默认是不支持rmvb格式的视频,所以我们最好自己下载源代码,只需要做很少改动就可以支持rmvb,然后编译安装。
如果已经安装Raspbian仓库的miniDLNA,需要先移除

sudo apt-get purge minidlna -y
sudo apt-get remove minidlna
sudo apt-get autoremove -y

然后安装miniDLNA所依赖的包

sudo apt-get build-dep minidlna -y

如果提示出错,可以手动安装

sudo apt-get install libjpeg-dev libsqlite3-dev libexif-dev libid3tag0-dev libvorbis-dev libflac-dev libavformat-dev libavcodec-dev –y

安装编译相关工具

sudo apt-get install autoconf automake autopoint build-essential

下载miniDLNA源代码,目前最新的是1.1.5版

wget http://sourceforge.net/projects/minidlna/files/minidlna/1.1.5/minidlna-1.1.5.tar.gz
tar -xvf minidlna-1.1.5.tar.gz
cd minidlna-1.1.5

修改源代码支持rmvb/rm

## metadata.c
//line 840
else if( strncmp(ctx->iformatctx->name, "matroska", 8) == 0 )
    xasprintf(&m.mime, "video/x-matroska");
else if( strcmp(ctx->iformatctx->name, "flv") == 0 )
    xasprintf(&m.mime, "video/x-flv");
//----add----
else if( strcmp(ctx->iformat->name, "rm") == 0 )
    xasprintf(&m.mime, "video/x-pn-realvideo");
else if( strcmp(ctx->iformat->name, "rmvb") == 0 )
    xasprintf(&m.mime, "video/x-pn-realvideo");
//---end----
if( m.mime )
    goto video_nodlna;

## upnpglobalvars.h
// Line 169
    "http-get:*:audio/mp4:*," \
    "http-get:*:audio/x-wav:*," \
    "http-get:*:audio/x-flac:*," \
    "http-get:*:application/ogg:*," \
    "http-get:*:video/x-pn-realvideo:*" // Add this

#define DLNA_FLAG_DLNA_V1_5      0x00100000
#define DLNA_FLAG_HTTP_STALLING  0x00200000


## utils.c
//line 381
        ends_with(file, ".m2t") || ends_with(file, ".mkv")   ||
        ends_with(file, ".vob") || ends_with(file, ".ts")    ||
        ends_with(file, ".flv") || ends_with(file, ".xvid")  ||
//----add----
        ends_with(file, ".rm")  || ends_with(file, ".rmvb")  ||
//----end----
#ifdef TIVO_SUPPORT
        ends_with(file, ".TiVo") ||
#endif
        ends_with(file, ".mov") || ends_with(file, ".3gp"));

配置,编译和安装miniDLNA,大概需要5分钟完成

./configure && make && sudo make install

复制默认配置文件

sudo cp minidlna.conf /etc/

复制启动脚本,来自动启动miniDLNA.

sudo cp linux/minidlna.init.d.script /etc/init.d/minidlna

为启动脚本添加执行权限

sudo chmod +x /etc/init.d/minidlna

然后更新rc,添加自启动服务

sudo update-rc.d minidlna defaults

先备份然后编辑配置文件

sudo cp /etc/minidlna.conf /etc/minidlna.conf.orig
sudo vim /etc/minidlna.conf

修改如下设置

media_dir=/home/pi/nas-data/DLNA
media_dir=/home/pi/usbhdd/usbhdd1
media_dir=/home/pi/usbhdd/usbhdd2

db_dir=/home/pi/nas-data/DLNA/db
log_dir=/home/pi/nas-data/DLNA/log

friendly_name=RasPi DLNA Server

创建文件夹

mkdir /home/pi/nas-data/DLNA
mkdir /home/pi/nas-data/DLNA/{Music,Pictures,Videos,db,log}

最后重启miniDLNA服务

sudo service minidlna restart

打开计算机网络,可以看到RasPi DLNA Server媒体设备,如图Figure 1所示。同时如果是使用Windows 10(win7没有,win8没测试过),在我的电脑->网络位置还会显示RasPi DLNA Server,如图Figure 2所示,这一点配合WMP比较有用,正好弥补了WMP的不足,后面会有详细介绍。



Figure 1. 树莓派DLNA


Figure 2. 网络位置DLNA Server

MP3中文名称乱码

用Windows Media Player(后面用WMP替代)查看minidlna多媒体服务器文件,有些中文文件名显示乱码,有些就正常。目前Linux中流行的很多播放器经常不能正确显示如歌曲名、专辑名等MP3 tag信息,经过有些工具转换后,标签又不能被Windows识别。MP3的歌曲名、艺术家、专辑名等信息都以一定的编码格式存储在MP3标签中。简单地说,乱码出现的原因就是播放器未能准确识别出MP3标签的中文编码格式。

具体的说,现在MP3文件的标签主要有几种标准:ID3v1、ID3v2(现在常见的又分为2.3和2.4)、APEv2。可以从两个角度解决这个问题。一是转换已有MP3文件的标签编码,二是使用支持GBK编码的播放软件,这种方案我没试过。

mp3tagiconv是一款可用于解决MP3乱码问题的软件。它可以自动探测MP3标签的编码,并以合理的方式重新写入,经过其处理的编码可被Linux、Windows(包括Windows Media Player)和各种移动设备正确识别。
mp3tagiconv 需要 mutagen 的支持,确保之前已经安装。

# The script depends on mutagen to run. Please install it from the repository of your distribution (in Ubuntu: python-mutagen).
sudo apt-get install python-mutagen
git clone https://github.com/cxcxcxcx/mp3tagiconv.git

Usage:
For mp3 files with Chinese tags(we first try gbk, then utf8), ID3v2 tags which are already encoded in unicode will not be affected:
mp3tagiconv a.mp3
You can use -e to specify the encoding used if the tag is stored by latin-1. The program will guess your encoding according to your list:
mp3tagiconv -e gbk,utf8 b.mp3
If you don’t want to confirm for every file(not recommended):
mp3tagiconv –do-update *.mp3

Plex Media Server

下载plex media server deb安装包

sudo wget https://dev2day.de/plex-latest

等待下载完成。

安装deb包

sudo dpkg -i plex*

安装转码(transcoding)所需要的软件

sudo apt-get install mkvtoolnix libexpat1 ffmpeg -y

等待安装完成。

重启plex media server服务

sudo service plexmediaserver restart

访问Plex Media Server WebGUI, 用浏览器访问http://192.168.1.118:32400/web, 192.168.1.118为RPi的IP地址
大概会弹出一个对话框,在页面右上角(如图Figure 3)点agree,之后进入主页,



Figure 3. 主页右上角部分

然后点击页面右上角的扳手图标进入设置页面,如图Figure 4,点击右上角Web,然后在最左边选择General,先设置语言为中文,点最下面的SAVE CHANGES按钮,然后刷新,界面会马上切换为中文。


Figure 4. 设置页面

这里面有很多设置选项,我也不一一讲,下面只列出我认为比较重要的设置,
1. 播放器设置,如图Figure 5,在这里面可以设置流媒体质量、分辨率、音量和字幕等,可以根据实际需要做修改,另外右上角可以打开高级选项,我暂时没有做任何改动,全部默认。


Figure 5. 播放器设置界面

2. 服务器—>资料库,勾选“自动更新我的资料库”和“定期更新我的媒体库”,如图Figure 6所示。


Figure 6. 资料库设置

3. 最后讲如何添加多媒体资料,在主页左上角点击+号,或弹出如图Figure 7所示界面,然后就可以尽情添加你想要的资料了。


Figure 7. 添加资料库

DLNA client选择

下面主要列出Windows,Android,IOS平台,我测试过的,其他平台linux,mac留给你们测了。

跨平台Kodi(XMBC)

Kodi就是大名鼎鼎的XBMC,一款功能强大的重量级播放器,支持Windows, Linux, Mac OS, IOS, Android全平台。但是我认为这家伙最适合在大屏幕的播放设备,支持遥控器,作为家庭影院终端播放器比较多。手机,电脑我个人感觉操作不是很方便,必须要全屏。

Windows平台

Windows平台推荐用VLC或者WMP,VLC可以比较好地支持miniDLNA,有个问题就是默认设置播放视频时,中文名字的视频在VLC中显示小方块也就是乱码,字幕也是,需要需改设置,打开VLC后点击“工具”->“首选项”->“字幕和OSD”->“字体”右侧下拉菜单选择“MingLiU”保存后重启播放器即可。测试发现Windows 7系统下还可以选择以下字体:PMingLiU, DFKai-SB, Microsoft JhengHei, MingLiU_HKSCS。Windows XP系统下还可以选择以下字体:PMingLiU, 宋体, 黑体, 新宋体。

WMP也可以支持miniDLNA,但是不能显示文件夹,所有内容都只能显示在一起,这点比较可惜,另外WMP支持格式有限,需要安装外部解码包,推荐K-Lite Codec Pack。在windows 10上,在网络位置会显示DLNA服务器,打开之后,选择需要播放的文件,右键->打开方式->Windows Media Player,然后就可以直接播放了,如果选择其他播放器打开会显示下载进度条,目前发现只有WMP支持直接播放。如果谁发现其他播放器,请告诉我。

Android平台

Android平台有很多选择, BubbleUPNP, MediaHouse等。BubbleUPNP功能强大,支持作为DLNA server,mediahouse功能专一,专门用作client,但是他们都需要外挂播放器。外挂播放器推荐VLC for android或者MX Player,其中MX Player有些视频会出现声音画面不同步的现象,这点很可惜,不知道后面版本会不会解决,但VLC目前测试下来还没有发现这个问题。所以在Android上面,我主要使用VLC作为外挂播放器。

IOS平台

IOS平台不像Android平台那样,有那么多免费的软件可以选择,目前免费的好像就是 Moli Player,收费的有AV Player, GoodPlayer, AcePlayer等。

参考

http://skypegnu1.blog.51cto.com/8991766/1654186
http://www.htpcguides.com/install-readymedia-minidlna-1-1-4-raspberry-pi/
http://linux-wiki.cn/wiki/Mp3标签乱码问题分析与解决方案