I've had a bit of a struggle getting this post written, because I have been fluctuating between: "Wow, Look, that's really great!" and "Why the heck doesn't that work?"
But I think that I have enough of it figured out now to make it useful to others — so here we go.
A bit of explanation is needed first. The creators of the Raspberry Pi initially decided not to include MPEG-2 and VC-1 codecs with every unit.
The decision was based on a combination of the cost involved — the licences required would have raised the unit price significantly — and their belief that the Pi would be primarily an educational tool, so there wouldn't be a lot of demand for these codecs. It didn't take long before it was clear that both of those assumptions were wrong; the Pi was wildly popular not only for educational purposes, and especially with the various Media Centre packages the demand for codecs was substantial.
My first question when I heard about these codecs was, "what do I need or want these codecs for"?
As I have said many times, I am not a multimedia expert or even enthusiast, so the various formats and decoders often baffle me. Fortunately, there are a couple of good explanatory posts on the Raspberry Pi website — first, the announcement of the codecs, and then a what can you do with them, including a nice table that shows what plays and what doesn't with which decoder(s).
For my purposes, the important fact was that I needed an MPEG-2 codec to play commercial DVD movies. I know that there are various ways to rip/copy/convert such things so that they might play another way, but besides the fact that I will always choose the path of least resistance — especially when the cost involved is $2 — I simply don't do that kind of thing.
My next question was, "how do I use these codecs"? Obviously they have to be installed somehow/somewhere, but where and how? Figuring that out, and getting it done, turned out to be a bit more trouble than actually buying them. Read on for details.
If you want/need these codecs, all you have to do is go to the Raspberry Pi Store and spend a very small amount of money. You will need the serial number of your Raspberry Pi, because the licence is keyed to it; the order page explains how to read that from the system.
The MPEG-2 codec costs £2.40, and the VC-1 codec costs £1.20, including VAT. In fact, the codecs only cost me £2 and $1 — I suppose because I am outside the UK or EU and they removed the VAT from my order.
I got an email confirming the order, and another confirming the payment (via PayPal) almost immediately, along with a statement that the licences would be emailed within 72 hours.
It actually took a lot less than that; my first order was for MPEG-2 only, made on a Thursday night, and I got the licence key on Friday; the second order, for VC-1, was made on Monday morning, and I got the key that afternoon.
To the very kind order-processing people at the Pi Store, I apologise for not ordering both licences at the same time, I was being a bonehead. To others who are thinking of ordering one or the other licence, I strongly suggest that you splurge and spend the extra pound or two to get both licences. The cost is minimal and the trouble it might save you and the people at the store is non-trivial.
What you get from the Pi store is an email containing the licence key, which you need to enter into the config file on your Raspberry Pi. There are three general ways to do this:
- If you are running NOOBS, hold down the Shift key while the Pi boots. That will take you to the Install/Configure menu, with a list of available/installed operating systems. From there you can choose an operating system and then click "Edit Configuration File".
- If you have another computer with an SD card slot, you can shut down the Pi, remove the SD card and put it into that system and edit the config file from there.
- If you can get a Linux command line, either from the console or via ssh from another system, you can edit the config.txt file in place. The "trick" here is that the boot filesystem is normally mounted read-only, so you have to remount it read-write, edit the file, and then put it back to read-only.
None of these methods is particularly difficult, so pick the one which you like best, or which seems least intimidating to you. Remember that you have to reboot after adding the key to the config file. Also remember that if you are running NOOBS, and have multiple systems installed which may use MPEG-2, you have to add the key to the config file for each of them separately.
I will also inject a plug here for the PiHub USB hub. If you are planning to connect an external USB DVD drive, you need to think carefully about it and check the power requirements for the drive. A lot of those things need quite a bit of power — from 0.5 to 1.5 amps — and if you simply plug it directly into the Raspberry Pi, it might be too much for the power supply you are using. The normal PiHub power supply is rated at about twice the output of a typical Pi power supply, so plugging a DVD drive into it should be no problem.
Finally, the most important question of all — how does it work? This is where things get a bit dicey. I did all of the following testing and playing with openELEC, but it was actually XBMC that was running so the results should be the same for RaspBMC or others which would then be using XBMC. The critical difference would be with different versions of XBMC itself, as I learned later, and have noted below.
I got a bit of a false lead when the first DVD I tried played just fine, and I thought the world was a wonderful place, until I realised that it was a DVD full of MP4 files. I already knew the Pi could play MP4, without any additional codecs. Grrr.
The next try was a commercial DVD, which also played OK. Yay! Getting to the DVD and getting it started playing was relatively slow, as I have become accustomed to on the Raspberry Pi, but once it started playing the performance was perfect — HD video, no problems with either video or audio jumping or stuttering. Good stuff.
Unfortunately, I then started running into problems. First, I found that if I changed the disc in the DVD drive, the title shown in XBMC would change, but I couldn't play the new disc, and in fact I couldn't even see any files on it. I had to reboot each time to get it to completely accept the new DVD.
Next, I found that some commercial DVDs would play and some wouldn't. The ones which did, such as the first one I tried, would play perfectly every time, and the ones which wouldn't play didn't work at all, ever — I couldn't even go in and select individual files to play.
I either got "something didn't play", or I got useless, jumpy, blocky video and mostly no audio. So it wasn't any kind of intermittent or random problem.
Finally, I found that the DVD menus worked inconsistently or not at all even on the discs which played normally. Again, even on the ones which seemed to play OK, sometimes I couldn't select anything at all from the DVD menus, and pretty much all of the time the scene selection menu didn't work, for example. Not good.
I tried several different DVD drives, in hopes that it was something drive-specific, but no luck there. I even tried a Blu-ray drive, and got the same results when playing DVD discs (by the way, I had no luck at all playing Blu-ray discs, but I had expected that).
At this point I was going to try some different operating systems and media player software, but when I was looking around for possibilities I found some notes on the XBMC website describing exactly the problems I was having.
It seems that there are problems specifically with XBMC 12.3 (Frodo), which causes these kinds of symptoms and which did not exist with the previous version of XBMC.
It seems that a new release of XBMC will be coming along soon, so I assume that those who are more determined than I am to play DVDs right now would have two choices — either install the previous version of XBMC, which should work properly, or wait until the next version is available.
For my part, I will be waiting for the next version, and in the meantime I am going to look at the new NOOBS release, and perhaps try making a "native" installation of Raspbian and/or openELEC on a dedicated SD card.