兼做NAS的离子平台媒体中心

这台媒体中心兼NAS是大约两年半前配的,到现在为止一直工作得很好。随着NUC 4×4平台即将上市,有点考虑要进行硬件平台的升级了,所以写篇文章纪念一下。

硬件篇

如下就是媒体中心电脑的样子了,电视柜左下角放置的是电脑主体。右边那格上边角落塞的是usb红外线接收器和无线键鼠接收器。另外有一个红外线发射器接在电视机上。

机箱内部配置

离子平台主板一块

内存两条4G,其中一部分分配给显存。

西数绿盘两块2T+1T

光驱无,有一个usb光驱需要时接上

 

机箱外部配置:

usb红外线接收器一个

无线键鼠

usb FM接收器

红外线发射器

喇叭一对,电视机一台

 

机箱用的是Shuttle K45准系统的机箱。话说这机箱并非刻意淘来,只是买回后用了不到两年主板就挂了,只得购买一套离子平台主板替换原有硬件。

下面就是系统的核心,离子平台主板。无风扇散热设计,通过一块DC稳压电源供电。有不少人关心离子平台性能如何。我用下来的感觉是除了flash卡以外别的都ok。只是我不看高码率原盘影片,所以这方面的性能不太清楚。

用了两年不到就挂掉的原主板(24×7开启),电容都鼓包了。原有的电源也吵死人。最夸张是机箱风扇,拆的时候发觉机箱风扇早就不转了。只得全都换掉,只留下原装硬盘一块。

USB红外线接收器是和这个遥控器配对的,就是普通的山寨媒体遥控器。

‘’

自制的红外线发射头粘在电视红外接收窗上,方便通过电脑遥控电视(主要是开关)。值得一提的是这根线的另外一端是连接在主板的PC Speaker针脚上,通过对PC Speaker编程完成红外线发射。

USB FM接收器,可以让媒体中心兼具播放广播的功能。左边这根线就是红外发射器的连接线了。

FM天线,为了更好的收音效果不得不连了根很长的天线。

功能篇

要配置一台满足需求的媒体中心,首先就需要考虑需要让它完成什么功能。我这台电脑有些辅助功能是慢慢建立起来的(比如FM广播),但是主要功能必须在搭建系统之前就确定:

1. 文件共享

2. 下载机

3. 电影播放

4. 音乐播放

5. 重要文件定时备份

6. 红外遥控

7. 调频广播

8. 网络视频观看

9. 日间整点半点三五座钟报时

在搭建htpc前,最大的考量,就是要不要让媒体中心机的功能和文件服务器+下载机分开来。这回决定你是配一台电脑还是两台电脑,也会决定你配电脑的思路。因为NAS需要24×7开启才方便不同家庭成员随时随地访问,所以能耗和静音成为第一考虑因素。相反媒体中心则要求性能足够播放主流媒体文件,性能不能太低。所以把两部分的功能做在一台机器里也是需要仔细进行平衡的。我曾经也是文件服务器与媒体中心分开,用一台单独的嵌入式NAS来存放文件和下载,但是最后还是选择了两者合一的方案,主要考虑有以下几点:

1. 两套系统维护起来要比一套系统需要更多的时间和精力。

2. 嵌入式NAS作为文件分享没有任何问题,但是当用来做下载机时偶尔还是有吃力的问题。

3. 媒体中心访问NAS的文件需要通过局域网,又多了一个不稳定的因素。

一旦决定了合二为一的配机思路,那么主要的考虑就是能耗和性能间的平衡了。我原本用浩鑫的准系统,结果并不理想。机箱虽小但是很吵。后来主板挂了后换成离子平台,总算在性能,能耗,静音等方面都满意了。

电影播放不用说,有很多现成的解决方案可以用。但是到音乐播放,就关系到需不需要每次都开电视或者开远程桌面了。这两个都是很麻烦的,所以我选择的是不需要开电视或者远程桌面的musicpd 解决方案,只要按下遥控器的播放钮就能播放音乐。为了能随时听音乐,我选了有源音箱并且24×7开启。虽然牺牲了一些音质,可是也免去了维护一套功放的麻烦。

调频广播也是很有用的一个功能,如果有自己喜欢听的音乐台,就可以直接通过媒体中心收听,不需要再搞一台收音机了,音质也还说得过去。另外我也希望广播内容可以转化成局域网里的流媒体,方便在其它房间通过其它设备(如手机等)收听。

网络视频观看就更有用了。原本这个系统是没装浏览器的,后来家人说想看综艺节目,就装上浏览器可以随时看网络视频。没想到这个功能成为了热门功能。毕竟媒体中心只用来看电影有点浪费,常常看综艺或者电视剧后,使用率就相当高了。

日间整点半点三五座钟报时是属于比较怀旧的功能,小时候家里有台三五座钟,每过半个小时都会报一次时。装了媒体中心后就设定让它整点半点敲一下。有时白天在家枯坐的时候也有种时间流淌的感觉。当然这个功能夜间是自动关闭的,免得打搅美梦。

重要文件定时备份这个功能实在太重要了,我曾经一块硬盘做文件服务器裸奔了很长时间。后来又买了一块2T硬盘后,原本的1T就拿来备份系统分区和重要资料比如照片什么的。有几次操作系统升挂掉或者误删照片什么的,就是通过备份找回来的。

实现篇

确定好需要的功能后,接下来就是寻找适当的软件来完成这些功能,首先要决定的是用什么操作系统。

操作系统:Archlinux

选择操作系统有很多讲究。我选择Linux系统的原因最主要是它是免费的;其次Linux上面免费软件特别好找,不像Windows,得靠订阅各种博客,看各种论坛,日常积累各种信息才能了解主要软件的免费替代品;再其次Linux上大多数软件都是开源的,有时候某个功能实在没有也能把代码改改搞出来。

Linux的可配置性也相当高,当然我相信这方面Windows应该也不差。Windows的高手自然会选择Windows作为基础平台。

值得自夸一下的是,虽然换过一次硬件,甚至连硬盘都换过,但是我的操作系统整个四年没有重装过。Archlinux在升级方面表现极佳,只需要一个命令就能随时升级到最新版的内核和软件版本,使用最新的软件功能。四年始终使用最新的操作系统并且不用重装,这点Windows是很难做到的。这点对于一个高度定制的媒体中心来说是很重要的,谁愿意没事重新配置一大堆功能呢?

媒体中心软件:XBMC

媒体中心软件毫无疑问的选择了XBMC。流畅的菜单体验,强大的插件功能,开放的控制接口,多平台支持,加上针对Nvidia的图形加速支持,XBMC是媒体中心软件的首选之一。我原本用Freevo,试用了XBMC后立马就转换到XBMC上了。关于XBMC有多好就不多谈了,网上资源到处都有。需要提一下的是我把XBMC直接配置成桌面,所以系统启动后直接全屏进入XBMC,不使用任何窗口管理器。

文件共享:Samba

文件共享则使用了Linux的标配Samba。配置好后Windows机可以通过网络邻居直接看到文件服务器的目录。如果是windows机的话,直接分享目录即可。

下载机:MLDonkey和Transmission

下载方面我以前一直使用MLDonkey下载VeryCD上的文件。这个软件可以下载多种协议,支持后台执行,支持web管理,同时也方便通过脚本交互。我曾经写过个脚本订阅VeryCD上某些专题页面,一有新链接放出就立马自动下载。可惜后来VeryCD大多数资源就不再提供了,这个软件也就偶尔应急用了。

后来开始用BT,就选择了Transmission,这个软件同样支持后台执行,也支持文件管理。更加方便的是可以配置一个文件夹,种子丢进去就自动开始下载。我把这个文件夹共享出来,这样就方便在Windows下面下载种子了,只需要保存到这个共享的文件夹里就可以。

文件定时备份:rsync

关于文件备份不同人有不同的策略,有人用raid热备份,有人用定时备份。我选择定时备份到专用的备份盘中。

这样选择,主要原因是raid需要两块一模一样的硬盘。这样如果需要升级磁盘容量,就需要购入两块一样的硬盘,开销无形中增加了。

另一个原因是raid没有历史记录,如果误删文件或者文件系统是无法回滚回去的。定时备份在时间上的延后性却解决了这个问题。我把备份时间设定在凌晨四点,只要不是在这个时刻误删文件,只要及时发现,还是能救回来的。我有一次升级的时候不慎把系统分区升挂了,还有几次不小心删了照片,就是通过备份文件系统找回了文件。在这里给大家提个醒,NAS一定要每天备份,免得到时后悔。

下面是备份用的两个脚本,第一个脚本将系统分区每周打一次包存到数据分区中,可以保存最近四周的四个系统分区备份。第二个脚本每天一次将数据分区备份到备份盘中。将这两个命令加入到crontab就可以每天定时执行了。如果有多个备份盘,也可以考虑将数据分区双备份或者分别备份一天前和一周前的数据。

rsync的使用非常容易,支持增量备份,所以不需要担心每次备份都要花很久。

音乐播放:musicpd

XBMC自身也带音乐播放功能,但是我使用的是musicpd软件,这个软件的特点是全后台运行,通过客户端进行控制。所以可以不用开电视就能操作。我一般是把播放功能映射到遥控器的几个按键上,通过遥控器就能控制播放,所以是完全不需要图形界面的。如果真的需要图形界面,也可以在Windows上安装gmplayer远程操作,界面如下。手机客户端可以配置后通过web操作。

红外遥控:自己写驱动(或者直接使用系统设置)

现在linux对usb遥控器都有很好的支持,比如我用的这款支持mceusb IR标准的遥控器,插上就能认出来,并且可以直接控制XBMC。不过我刚开始搭系统的时候,linux对usb红外遥控器的支持并没有这么完美。所以我自己写了个用户态小驱动,读取usb状态并且完成相应动作,同时操作对象也不止XBMC一项,可以操作的对象有:

1. XBMC界面

2. 收音机开始/停止/换台

3. musicpd播放/停止/换专辑

4. 开/关电视机

代码太长,而且对系统环境的针对性太强不具有通用性,就不贴出来了。现在linux对红外支持已经好了很多,这些功能应该都能通过lirc配置出来。

关于红外遥控还有一个需要达到的功能,通过红外线发射器控制电视机开关或者切换信号源。如果你使用的是学习型的遥控器,那么这一步可以略去。但是我的遥控器不是学习型的,所以我自己买了红外线led,DIY了一个红外线发射器。

接在pcspeaker上也是忽发奇想,pc speaker就是PC机开机时会“滴”一下的那个小喇叭。这个喇叭接在主板上的pcspkr引脚上。在这个引脚上输出的是0~5伏的一个方波。方波的频率由寄存器控制,正好满足红外遥控38kHz的发射要求。同时对外围电路要求很低(一个电阻搞定),正好适合我这样电子线路不行的人。

程序如果有人有兴趣的话再贴出,同样需要针对家里的电视机型号进行修改。如果嫌麻烦还是学习型遥控比较方便。

调频广播(自己写程序)

调频广播我用的是市售的pcear usb调频收音机,就是在硬件篇中的那个usb棒。这是我用到现在以来最稳定的方案。在这以前也试过两种方案:

1. 通过调频收音机连接音频线输出至媒体中心,再由媒体中心播放。但这样就多一个设备多一个插座,换台也不方便。

2. 网络上有很多调频电台流媒体,但是受网络影响很大。因为不是正式的服务,所以有时候就突然没有了。

最终选择的方案直接接收电台信号,转换成数字声音流通过usb传入,这样信号比较稳定,数字信号处理起来也方便。

PCear在linux上是通过v4l2驱动。我在网上下了个fm广播程序,根据自己的需求改了下,可以完成播放和换台。收音机被驱动模拟成一块声卡,读取声卡的输入就可以得到广播内容。

读取到广播的声音流以后,还需要转化成网络媒体流,方便在局域网中点播。我使用的是icecast,下面这条命令就是通过arecord读取声音流,通过sox进行润色后,再传给icecast转化成网络流。

sox是一个声音流处理软件,我主要用来进行音量动态平衡。因为电台节目的音量会时大时小,通过音量动态平衡就能让音量始终保持在一个水平。如果家里收讯质量不好,也可以通过这个软件截去高频沙沙声,或者做噪声消除。

通过这样处理后,在家里的其它房间也能通过浏览器播放高音质调频流。我在卧室放了个小型流媒体播放器,这样临睡前起床时可以听一会广播。

网络视频观看(任何浏览器)

网络视频观看有两种方法,一是使用xbmc内置的插件。但是xbmc的网络视频插件并不太稳定,常常有某些热播剧集无法播放的情况,所以更多时候还是通过浏览器播放。

说到浏览器播放网络视频,这可能是离子平台的短板。现在大多数视频网站都是通过flash播放,可是flash在离子平台下就是慢慢慢。也许是Linux下flash对GPU加速支持不好的原因,CPU始终在200%以上。如果不介意看低清码流或者是幻灯片,浏览器播放还是不错的选择。否则也许插件播放更合适。这也是我打算升级硬件平台到NUC的原因。

日间整点半点三五座钟报时

这也算是媒体中心的趣味应用了。如果各位年龄足够大的话,小时家里总有一台钟每过段时间“当当当”的敲那么几下。现在的钟倒是完全寂静无声了。我曾经去店里面看过,复古式的落地钟怎么也要几千元才能扛回家。比较起来自己做一个整点报时也算是给家里增添了一些复古气氛。

你需要搞得就是自己中意的座钟声音档,再加上一些脚本编程就能搞定。这里需要考虑的是要根据系统音量来决定用什么音量播放。这样无论系统音量当时是大是小,座钟报时总是保持一个音量,不至于音量忽大忽小。

将来计划

将来计划是能升级到core i3级别的平台上,这样浏览器播放网络视频速度能得到保证。初步锁定NUC平台,无论从体积还是功耗上都比较合意。作为Linux系统,硬件的升级是比较容易的。不需要重装系统和配置。只需要拆下原来的硬盘插到新平台,再针对平台的差异配置下驱动就可以了。当然,事先做好备份很重要。

反思篇

最后说说我对软硬件DIY的一些反思。
以上这个平台是几年前搭的,受限于当时的限制,在一些地方使用了自己编写的程序。比如mceusb的红外遥控器在2005年时内核没有支持,所以就自己写了个用户态驱动,随后就一直沿用到现在了。红外线发射在软硬件上就更加独特了。

但是这些自己编程的部分也是后来投入维护精力最多的时候。因为希望能常常尝试一下最新软件(比如xbmc升级了),所以我的系统隔一阵子就会升级一下。有时候就会发觉升级以后程序就不好用了。有时候是系统接口发生了变化,这时候就得自己改下程序重新编译。这些工作都是很占用时间精力的,特别是有时本只是打算花十几分钟升级一下软件包,之后却发现因为需要维护自己写的程序,不得不熬夜到半夜。这些DIY的硬件也为未来升级平台造成障碍,比如新的主板都没有pcspkr接口了,那么通过pcspkr接口实现的红外发射怎么办?

我们在年纪尚轻的时候,往往有大把时间可以花在这些事情上。但是随着年龄的增长,许多时间由不得自己支配。所以DIY时要考虑到未来如果没很多时间维护的话怎么办。如果有天HTPC忽然挂了,你又有一个紧急的任务需要全身心投入怎么办?如果家人这时在追看某个剧集的话就只能干等着了。

我自诩配置一下系统应该不成问题,不过现在也尽量避免通过写程序或者定制硬件来满足自己的需求,尽量使用市售的标准化的软硬件解决方案。现有的写过程序的部件,也会逐渐通过空闲时间改成系统提供的方案。毕竟市售的方案都有一堆专门人员在那里维护可用性和互操作性,我自己却只是一个人,没法一直跟着维护自己写的程序。

我一直赞同通过DIY来满足自己对环境的需求,Geek们正是通过对环境的不断改造和完善把自己和常人区别开来。但是我也赞同如果有现成方案可以满足这些需求的话,应该使用这些现成的解决方案。DIY只是在现成的方案解决不了自身需求时所采取的替代办法。毕竟DIY是让自己生活变得更好的手段,这个手段是要耗费自己的时间的。自己的时间=生命。如果用钱能换生命的话,你愿意花多少?

珍惜生命,尽量远离DIY。

我只能说尽量了。