Before I get to the how and why of you using Plex, I want to give you a little run down on my experience with streaming media over a WAN.
It should be noted that I have a 35/35 FIOS internet connection so your mileage may vary with any of the methods below dealing with XBMC.
I am fairly adapt at networking over both LAN (local area network) and WAN (wide area network), so solving this puzzle was not as much about technical hurdles as it was about finding the best mix of software and protocols to do the job. I have been streaming my media in one form or another for over 4 years now. I have tried all sorts of methods and all sorts of software. Most of the early software such as ORB gave me access to not much more than a list or folder view of the media. This was fine for music, but was sloppy and unorganized for movies and TV shows. I tried gave VLC a shot, but needing multiple versions of application running as a service to allow more than one user to connect was a nightmare. I wanted something that behaved much more like a media center, with an index library of all my media. This brought me back to an old friend that I had used since my college days, XBMC. XBMC seemed like a logical choice, because it was available for several platforms including the cheap first gen AppleTv and even cheaper OG Xbox.
After deciding that XBMC was going to be the core media center that I worked through, I started looking into methods for moving my library off of my LAN and into WAN access. My first route was through a combination of Hamachi (a great VPN software, of which I will still stand behind), UPNP (aka DLNA). This method worked great and streamed the files flawlessly over WAN access, there were some downsides however. First I was still not able to view my library in anything other than a list view, on top of that Hamachi was at the time pretty much Windows only. That means no OSX or Linux access and on top of that, if it was going to a friend or family members house, they would need a home theater PC connected to their TV to make it worthwhile. I then gave XBMS (XBMC Media Stream Protocol) a try, this worked pretty well, as it was platform independent. If XBMC could be installed on the device I could use XBMS. The problem was that XBMS was no longer officially supported, the protocol was dead and to make matter worse the server for it had not been updated in years. The server also had a bad habit of randomly crashing, so the hunt continued.
While doing some research on the issue I came across someone on the XBMC forums that suggested I try FTP. This was a surprise to me as I had read elsewhere that FTP would not allow a decent enough throughput for streaming. I decided to give it a go anyway and just like so many other things that I have read on the internet the original negative assumption was dead wrong. FTP was to be my protocol of choice. The best part about FTP was that it allowed me to set up a source in XBMC that behaved exactly like a local source would, ie I could build an indexed library around it. This gave me access to all the great cover art, fan art, movie synopsis and IMDB ratings that XBMC libraries afford its users. My server is in Florida and I have tested streaming 720p content as far away as Chicago with no buffer or lag. Click on the movie in the library and it start playing in about 5 seconds. The best part about this setup, and unlike services like ORB, was the files streamed direct with no transcoding needed. This means that I could get away with hosting my server on a 25watt at idle ATOM powered system if I wanted to. FTP hits the CPU at around 2-5% even on an ATOM system.
I was very happy with this setup, I tried to explain to many friends and colleagues that I had found a way to roll my own Netflix like service. I quickly found that I was speaking Greek to most of these people when I was describing what would need to be done in order for them to join my library or to start a server of their own. What ever, I was happy with it, but I am a geek for this type of thing. Even though I had finally found what I thought was the perfect method, there were still problems. As stated this method is not really attainable for your average user. Most of the users I have set up, I needed to remote into their PC to help them set this up. Additionally, since XBMC builds the library on the client side, any changes I make to files on the server can end up with the users having dead directories or a ton of dead links in the library. The dead link problem was compounded by the fact that a dead link looked and acted no different from if the system was having connection problems with my server, something that does happen from time to time. Also since there are many movies that I have which XBMC would constantly mis-scan, giving it the wrong library information, another trick needed to be employed. I ended up creating a custom advanced.xml file for the client XBMC. This XML basically told the client to pull the .NFO, cover art, and fan art files from my server instead of using the XBMC scanner. It worked well, but created un-needed overhead for the FTP and required me to constantly add this info to new files added to the library. What started out as a fun project was turning into a part-time job.
So if you are still with me and managed to make it though all that without falling asleep you may be asking why I bothered to tell you all this in an article about Plex. I wanted to give you an overview of a process that although I am very adept at handling, was still a pain in the ass to set up and to manage. I wanted to give you an overview on a process that Plex with the addition of myPlex has single-handedly just murdered.
Below is a list from start to finish for setting up your library and streaming it over a WAN for both XBMC and Plex
[one_half]XBMC - Direct Stream ONLY
1. Setup an FTP server with access to my media
2. Setup user credentials with read or write access on the FTP for XBMC end clients
3. Forward the FTP port through my router.
4. Setup DDNS account. Like most people I have dynamic IP address, so I needed a way to allow the XBMC clients to always make it back to the correct IP address.
5. Manually populate my large library of movie and Tv files with .nfo files and Cover art through Ember Media Manager. This prevents XBMC from incorrectly identifying some movies with similar names or the same names on the client side.
6. Create a custom XML file that tells XBMC to use the .nfo files on my FTP, to identify the movies, instead of allows XBMC to do so on its own. I did this to try to keep the libraries on the client side exactly the way I would see the library locally. This adds to the overall load on the FTP during the first run of a client setup.
7. Run a local scan of the FTP server in XBMC to make sure everything is working as expected.
8. Install XBMC client on end-user side.
9. Added main FTP source to XBMC.
10. Setup separated sources for library creation. IE setup a source for movies that points to FTP>Movies and FTP>HDMovies.
11. Set several parameters in XBMC to tell it these directories contain movies and to build a library based on the contents.
12. Allow 2-3 hours for the system to build the Movie library.
13. Repeat steps 10-12 for TV shows.
14. Tweak a few last things in XBMC to make sure it scanned the FTP on startup of XBMC to keep the users library up to date. The time needed for this scan was dependent on the amount of files added in between now and the last time the library was scanned.
15. Perform steps 8-14 for every client I want to set up [/one_half]
[one_half_last]Plex - Direct stream and realtime transcoding
1. Setup Plex server.
2. Allow Plex server to scan the directories assigned to it.
3. Verify that the media was tagged correctly and fix any errors in identification of files.
4. Setup myPlex account.
5. Link Plex server to myPlex account (this takes care of port forwarding AND DDNS on one shot)
6. Have end-user install Plex client.
7. Have end-user setup a myPlex account.
8. Share my Plex server with the myPlex account of the end-user.
9. Have end-user sign into myPlex in the Plex client.
10. Perform steps 6-9 for every new user or steps 6&9 for every access point of my own[/one_half_last]
Looking at the list its obvious that Plex has fewer steps, but look beyond that, look at the steps themselves. XBMC is a quagmire of steps and processes that your average user would give up on within a few minutes. Plex on the other hand, I’m pretty sure I could get my Mom up and running with maybe a little guidance over a phone call. Your average lay-geek would have no problem setting up the who thing, in my opinion. Now this process is not just easier to set up, it’s also easier to manage. That’s because the library itself is located server-side, unlike being client side with XBMC. This means that any changes you make to file and folder locations on the server, have no negative impact on the client. I can’t tell you how much hassle this one little feature addresses
The recent update to Plex bring with it a MASSIVE change in the form of the myPlex feature. Any of you that setup Plex on your Android may have run into a few problems with the single credential shared server that was in place before this update. The need for users with a dynamic IP addresses to set up a DDNS and port-forwarding were just the technical pitfalls that needed to be crossed. Beyond that you may have run into problems with sharing your server with other users. There were not big problems, more like annoyances. Clicking on a movie that you have not yet watched only to see “Start at Beginning” or “Resume from 33 minutes” because one of your friends was watching it. Maybe you even happened to be watching the same movie on the way home at the same time, then attempting to start it up on your TV only to find out that the “Resume” time is way off, because it’s using your friends pause time frame(that only happened to me once). Worse yet you may have run into some security problems with your password getting shared out.
MyPlex solves ALL of this in one shot and it does it well. Now the myPlex part of Plex Server acts as your DDNS and the server attempts to forward the nessisary ports automaticly. I should note that this auto port forward MIGHT fail if you have already setup the default 32400 port-forward in the older version of Plex Server. Just set it to “Manually Specify Port” leave the default number in place and it will work just fine. Additionally the myPlex resolves the single credential login issues by allowing you to share any and all of your servers to other myPlex accounts. All you will need is the other users email account that is tied to myPlex to send an invite. An email asking for acceptance and a notice in the users myPlex interface alert them of the share and once accepted, your media library is available to them. This means the media viewed by them is tied to their myPlex account, preventing the mix-ups in pause/resume listed above. Above all the best part about leaving the single credential login method is obviously security. Lets say you gave your password out to that one guy at the office, you know which one I’m talking about. You told him not to hand out the login info to other people, but then a week later your server is getting slammed by a ton of traffic. With the single credential method you would need to change your password and then contact all those that you still want to share with, to inform them of the change. With myPlex this issue is easily solved, as you can choose that dickhead out of the list of shared myPlex users and cancel his access to your server.
One aspect of Plex that may have kept you from taking the plunge is the media player portion being OSX only. This update brings with it the long-awaited Windows Plex Media Center. Although it is listed as Beta, if feels pretty solid to me. Official Plex clients are now available for Windows, OSX, iOS, Android and LG Media Link products. Additionally there are unofficial Plex apps available for the AppleTV2, Samsung TV / BD-Player (C-Serie / D-Serie), and Roku. Oh yea the Plex Media Server is also available for Linux, including Ready-NAS, no player client for Linux yet though.
SIDE NOTE – For any of the HARDCORE XBMC fans out there, yes I know you can accomplish some of this by setting up an SQL database, connecting it to your library and then connecting other libraries to it as well. Honestly though, which option looks better to you?
There is a lot more to this update, but this article is already way too long, check out all the details in the link below.