Hardware-Accelerated MKV Playback Over SMB Roundup

This article targets advanced users who would like to play back MKV video files off SMB networking shares; that is, without copying them on their iDevices first.

Over at MacRumors (original question & answer), I've been asked to elaborate on the current state of SMB + MKV support on iOS.

As you may recall, in my SMB Bible, exactly half a year ago, I couldn't recommend any non-jailbroken player for this task. None of them supported hardware-assisted playback over SMB. The only player capable of all this, XBMC, was jailbreak only at the time of writing. Sure, there were several players capable of software-only playback but, again, not using hardware decoding may result in a much-much lower battery life, higher operational temperature and, particularly with non-A6(X)-based players, the inability to play back 720p (let alone 1080p) videos without stuttering.

Therefore, I've quickly re-run my extended suite of MKV streaming tests to find out how the new versions of the most important / recommended players fare.

I'm delighted to say that the situation is far better now than it was back in early December: two of the AppStore players do play back those videos in hardware: EC Player and my personal favorite, nPlayer. Another, otherwise, recommended player, It's Playing has also received significantly better SMB support; it also plays back these videos, particularly on slower (pre-A6) hardware, much faster than anything software-decoding-based, but it  still consumes significantly more power than the strictly hardware-only players (EC Player / nPlayer).

Of the two players, nPlayer is definitely the better choice. It has far better format support, stability etc. However, if you absolutely don't want to pay for it and already have EC Player, you can safely go on using the latter player, assuming your MKV's don't have AC3 audio tracks. (nPlayer officially supports AC3. Note that it doesn't support DTS any more.)

Note: neither player supports automatic SMB discovery, unlike players that have far better networking support; for example, GoodPlayer or PowerPlayer. (Unfortunately, these two players still don't have hardware MKV decoding support over network (PowerPlayer) or at all (GoodPlayer)).

1.1 Testing Methology

For the tests, I've slightly modified the standardized 1080p H.264 + DTS MKV test video (a short clip from Monsters, Inc.; available HERE, linked from THIS video test sample directory page).
- I've removed the subtitle track from the MKV file and included it along with the (new) MKV file with exactly the same name (and with the standard .srt extension)
- I've reencoded the DTS audio track to both an 5-channel AC3 and a two-channel AAC one; that is, I've included two audio tracks in the target MKV file.

(For all this, I've used the excellent MKVTools app.)

Note that I've made a dumbed down version of the video online so that you can test it too. It's HERE. To save bandwidth, it's much more compressed than the original (1 Mbps as opposed to the original 10 Mbps), which means it has way worse image quality. This also mean that software-only players may play it much faster than the original, 10 Mbps one you can also see in the benchmark videos below. Nevertheless, it's still much better than nothing: after all, you can test your players on this test video yourself without having to convert the audio tracks and delete the subtitle track from the original test video.

I've shared this video in a subfolder on my 10.8 Mountain Lion MBP, using the SMB sharing support of the operating system. Some players (e.g., the above-mentioned Good/PowerPlayer) were able to automatically discover this share; other players didn't (in addition to the already-mentioned EC Player and nPlayer, XBMC doesn't support SMB discovery either). With them, I manually had to enter the local IP address of my desktop.

As the original poster asked about previous-generation devices (and not iPad 4's), all tests have been done on my iPad 3 running on the latest iOS version (6.1.3). This (6.1.3 can't be jailbroken) also means it isn't jailbroken; that is, there could be absolutely nothing to throttle video playback. The only exception was, naturally, the jailbreak-only XBMC, which I tested on my other iPad 3, running over iOS 6.1.2.

With all but two players, I used the absolutely excellent Elgato Game Capture HD to directly capture the output over the HDMI adapter. This has resulted in a much better audio / video quality than using an external camera. I only needed to use the latter in two cases: with EC Player and XBMC. EC Player takes over the control of the external screen but doesn't seem to output anything there (it remains black all the time) and my other iPad3, on which XBMC runs, for some reason, doesn't output video over any kind of video adapter / cable. (Dunno why – a jailbreak tweak maybe? I'll try to fix this issue some time. Tested with all four cables and adapters: VGA, HDMI, composite, component.)

To stay with a mirrored screen, I've explicitly disabled TV out in GoodPlayer, which has native TV out support. With nPlayer, as soon as it switched to native TV output mode, I've forced it back to mirrored output mode at once, as soon as it started playback. (This can easily be done with the phone icon displayed in the center of the screen while outputting video to the external screen.) On It's Playing, it's not possible to avoid switching to outputting video to the TV at all. PlayerXTreme doesn't support TV out.

Note that all videos are auto-cropped by Handbrake, except for the Oplayer HD one. It was too late when I realized I didn't disable auto-cropping while using the excellent HandBrakeBatch for batch compression before uploading to YouTube. Neverheless, you don't lose much:
- if a recording is made strictly in mirrored mode (that is, the player never switches to native output), there wouldn't be any point in NOT cropping the black areas on all the four edges.
- with players switching to native TV output (nPlayer, It's Playing and some other), I'll later, in another article, elaborate on whether they support completely disabling the, by default, enabled overscanning mode – the one that makes the output letterboxed of most AppStore apps with native TV output capabilities.

Note that, as opposed to mirroring 3D (OpenGL) graphics on the external screen (more on that latter, in another article), screen mirroring doesn't have any adverse effect on external rendering speed of simple video playback. That is, the non-camera-based captures I'm presenting you exactly show the exact speed (framerate etc.) of playback.

1.2 The Results

1.2.2 The Two Players that Decode MKV Videos in Hardware Over SMB nPlayer ($2.99, Universal)

As I've already hinted, this is the player I recommend most. It's absolutely great as a generic player – and also shines as an SMB one. You definitely shouldn't miss it.

Test benchmark video: http://youtu.be/E_10-LDJ9VQ

A screenshot showing nPlayer's support for networking streaming / sharing protocols. Click for larger image. EC Player

This is the (only) other player with hardware MKV playback over SMB. Not as recommeded as nPlayer. For example, as the demo video also shows below, with a dual-audiotrack (AC3 + AAC) MKV file, it still wasn't able to play back the AAC track and there was no way of configuring it to play the second (AAC) track. Therefore, playback remained silent. (It wouldn't have been silent with AAC-only MKV input files, of course.)

There was no such problem with nPlayer, which, incidentally, officially supports AC3, unlike EC Player.

Master your iPhone in one minute a day:

Sign up to iPhone Life's Tip of the Day Newsletter and we'll send you a tip each day to save time and get the most out of your iPhone or iPad.

Demo video: http://youtu.be/9qVtYQLKshc

1.2.3 Other SMB-Capable Players not Decoding MKV's in Hardware GoodPlayer and PowerPlayer

These two players have exceptionally good generic networking support; for example, unlike (the above, most recommended) nPlayer, they also support SMB auto-discovery of SMB servers running on OS X.

Unfortunately, their SMB MKV playback capabilities are really- really bad. The biggest problem with both GoodPlayer and PowerPlayer has always been the sub-par, slow H.264 decoder. This, unfortunately, shows in these benchmark videos: playback is just unbearably choppy and is more like a slideshow. Completely useless at 1080p on even A6-based iDevices (iPad 4/ iPhone 5), let alone even slower models.

Demo video:  GoodPlayer: http://youtu.be/MvWeT86T92A

Demo video:  PowerPlayer: http://youtu.be/WrmedC1HD_Y PlayerXTreme

This player, which, almost a year ago, I didn't recommend at all, has been constantly improving. Recent versions have become pretty good. Unfortunately, not even the latest version supports hardware playback over SMB. Nevertheless, the decoding speed is way better than that of GoodPlayer or PowerPlayer.

Demo video: http://youtu.be/mc_S8qqTekY Oplayer HD

This player doesn't support hardware playback either.

Demo video: http://youtu.be/KaW13iPtZFw eXPlayer HD

eXPlayer HD, which is, otherwise, definitely recommended for playback of iOS-native video formats (mp4 / mov / m4v), still hasn't received MKV decoding support. Not recommended for MKV playback over SMB.

Demo video: http://youtu.be/-gW-8XlZkMw BUZZ Player

(Note that this refers to the now-current, 4. version, not the discontinued one (story on the switching).)

This, otherwise, excellent generic player has turned out not to support hardware MKV playback either. Not recommended for that.

Demo video: http://youtu.be/e6Qx-DqrLq4 It's Playing

I don't recommend this player for streamed MKV playback. While, being based on some kind of hardware acceleration, it has far more fluid video playback as any of the software-only players, it still doesn't deliver as fluid playback as nPlayer (and its power usage is considerably higher too). In addition, it doesn't (currently) support AC3. With MKV files with both AC3 and AAC tracks, if AC3 is the first (as is the case with my benchmark video MKV file), it won't play back AAC tracks either and you can't switch audio channels when playing streaming videos either.

Demo video:  http://youtu.be/81TduWHJlzA. Note that, during the native TV output play, the long pauses show I've paused playback to find out whether it's possible to switch the audio track. As, during playback, there wasn't mirroring, this isn't shown in this video.

1.2.4 More Known Titles Without SMB Support at all

I've tested the latest version of the following players to check whether they already support SMB streaming to find out they don't:

AVPlayer(HD) - probably the second-most recommended generic player, nPlayer being the first. Unfortunately, it only supports FTP.

ArkMC (this UPnP-only player (review) has recently received a much better engine, offering, according to the developers, way better MKV playback performance. Will test it some time when I review UPnP playback advancements.)


HD Player Pro

MoliPlayer Pro



2. What about XBMC?

I still don't recommend it for SMB playback. It, as of the just-released 12.2 version, still has major buffering issues. The playback will very often be paused for buffering, while, under exactly the same circumstances, the - in this regard, much-much better -  EC Player and nPlayer won't pause at all.

Demo (camera) video: http://youtu.be/5IrYKk7Vexg

Master your iPhone in one minute a day: Sign up here to get our FREE Tip of the Day delivered right to your inbox.

<p>Werner Ruotsalainen is an iOS and Java programming lecturer who is well-versed in programming, hacking, operating systems, and programming languages. Werner tries to generate unique articles on subjects not widely discussed. Some of his articles are highly technical and are intended for other programmers and coders.</p>
<p>Werner also is interested in photography and videography. He is a frequent contributor to not only mobile and computing publications, but also photo and video forums. He loves swimming, skiing, going to the gym, and using his iPads. English is one of several languages he speaks.</p>