Over the years, I have gradually built up a collection of videos, photos and music, the collection size has gone up to terra-byte level that is far beyond my laptop SSD.  I have decided to store the media on external drive.  On a second thought, given I have devices such as iPhone, iPad, WDTV, Sony TV and many other computers at home, I started to dream about having a server that could serve all the contents to all of my devices, so I can watch and show them anywhere my home network could reach.

The Challenge

While sharing media among computer is easy, I can easily designate a computer as server, and have other computers connect to the server; the real challenge comes to sharing the media to iPhone/iPad given Apple’s close ecosystem.  The closest answer that I have found working is Stream To Me, a $2.99 application which comes with a handy free server component, Serve To Me.  It not only can share out contents to all devices well, but also can do on-the-fly media transcoding to best fit the form factor, device capability and bandwidth.  For example, iPhone/iPad cannot play formats such as mkv and avi, Serve To Me would quietly transcode the media on-the-fly when I try to watch mkv contents off my iPhone.

However, I am not settled with Stream To Me/Serve To Me solution.  My main concern with the approach is that I need to dedicate a computer for the purpose, which eats up precious real-estate in my office and lots of electricity.  My ideal solution is to employ a server as small and as lean as possible.  The solution from PlugComputer Community, SheevaPlug, seems to be a natural fit to this requirement.  The plug computers are fairly inexpensive, for less than $200, I can order a powerful computer that’s just barely larger than my palm, it comes with Debian server, and host of features such as USB connectivity, gigabit ethernet and WiFi.

Yet, the solution is still not readily available, the challenges remain as:

  1. Out of the box the computer OS cannot read NTFS, which is the file format I use for my external hard drives.  I intend to keep it that way, so I can use the hard drive with any of my Windows computer directly.
  2. Application such as Serve to Me does not have a Linux counter part that works on Plug Computer as the solutions I found were designed for x86 processors, but my Plug Computer runs ARM.

The Solution

After a few sleepless nights, numerous trial and failure.  I have finally arrived at a solution that makes me smile.

Global Scale Dream Plug

Server Side

  • I choose GlobalScale’s DreamPlug as it is only plug that has descent reviews on Amazon, and I can enjoy the good customer service from Amazon too.
    • To make the plug ready for the following steps, I had to update the software on the plug, this can achieved by running (warning, this could take quite a few minutes)
      • apt-get update
      • apt-get upgrade
      • apt-get upgrade-dist
    • Install gcc and g++ compilers
      • app-get install gcc
      • app-get install g++
  • I run NTFS-3g to gain full read/write access on NTFS hard drive.  NTFS-3g is an open-source solution which comes with handy description on how to obtain the solution, and build.
  • To make sure the server uses NTFS-3g to mount the NTFS volume.  SheevaPlug seems to regard USB ports as /dev/sdd1 and /dev/sdd2
  • For media serving software, I choose TVMobili.  It works well with iOS applications such as PlugPlayer and AirPlay.  To install
    • Download the Debian Linux distribution of the software, I would use wget url to download the .deb file, then install the .deb file.  For example
      • wget http://www.tvmobili.com/binaries/stable/tvmobili-all-i386.deb
      • dpkg -i tvmobili-all-universal.deb
    • TVMobili by default runs on port 30888, so it can be managed through http://plug_address:30888/
    • Through the web interface, I can add my hard drive contents to TVMobili

iPhone/iPad

  • Install PlugPlayer (AirPlayer or media:connect would do the job too)
  • In many cases, the software should be able to detect the server, in case it does not, it can be manually added with the Device URL http://plug_address:30888/__rootDevice

iPhone/iPad

  • VLC Player from VideoLan is an excellent free open-source player.

WDTV

  • WDTV Live supports uPnP Media Server, the server can accessed through Video -> Media Server
  • Video quality is better than I expected given the less-than-ideal 802.11n signal strength I have in my house

Sony Bravia TV

  • My Sony TV acquired from Costco could also support uPnP DLNA Media Server.  While this was not part of my plan to support, nonetheless it was a pleasant surprise.

Other Thoughts

TVMobili is not free.  It comes with a 10GB a month limit, beyond the limit, the company would charge $1 each month or a small fee for lifetime overage.  Although there are completely free solutions such as MediaTomb and uShare, they are either not actively maintained or don’t work right out of the box.  Other commercial solutions seem to only gear towards Windows, Mac or a particular storage.  After quite a few painful hours to trial and failure, I have arrived at TVMobili, which is inexpensive, reasonable and decent implementation.

As for client side, a list of DLNA/uPnP players can be found at Wikipedia.

Some NAS (Network Attached Storage) servers may offer uPnP, but most don’t come up on-the-fly FFMpeg transcode, which means videos that are not MP4 or M4V would not be playable in iPad/iPhone.  Though some of the NAS may provide means to install software, the processor in those machines are not known to be fast enough to perform the job.