UPDATE (10/10/2012): at DPReview, I've written a quick tutorial on how you can directly review and delete photos off your storage cards using this hack via BUZZ Player 4. See THIS.
Original article:
Ever envied Android / Symbian / BlackBerry / Windows Mobile (and even the forthcoming Windows Phone 8) users because of the freedom they have because of the storage cards? Now, you'll get an answer!
I've continuously been asked (see for example THIS and THIS) about how you can play back videos residing solely on an external, Camera Connection Kit (CCK)-compliant (that is, an SD card or a micro/mini one with an adapter) storage card - or a compatible USB memory key. Up until now, I've always referred my readers to articles / videos like THIS and THIS (see the bullet starting with "Ripped movies: if you have any ripped movies or personal videos, you can use the CCK to add extra storage to the iPad"). Unfortunately, tutorials targeted at jailbroken users (for example, THIS one) haven't used symbolic links (the “magic” we'll make use of) either, meaning they relied on the built-in video / image viewer of iFile. The multimedia support of the latter isn't anything to write home about – it can only play back native iOS formats and has absolutely no advanced features.
Today, while answering the same question over at DPReview (thread), I re-tested the best player for jailbroken devices, XBMC, only to find out it can't access the external memory card either, as opposed to what I had thought. (For geeks: it's, under Videos > Files > Add Videos... > Browse > Home folder, by default, only allowed to access /var/mobile, while the storage card is auto-mapped to /var/mnt/mount1.) This means only the not-so-great RushPlayer+ (review) is able to natively access the card (as it can go up the directory hierarchy even to the root) and nothing else. This is unacceptable, thought I, and immediately started playing with so-called “symbolic links” to the card folder (something under /var/mnt/mount1), created in the Document folders of official AppStore apps (the one third-party video players access their videos).
I was right – everything works as expected, you don't need to pre-transfer the videos for playback (unlike with the previous approaches) and you can use any(!!!) third-party player, even feature-packed ones like “It's Playing” (my favourite player because of the DSP's – review and answer to the why's). What is more,
1, you don't need any special app to create these links, let alone typing command-line commands in the Terminal
2, symbolic links are hidden when you remove the card but restored when you reinsert it. This means you only need to create a link once and don't end up having to do the same when you reinsert the card.
3, you can access the same directory from any number of applications. (Technically, you can create a symbolic link any number of times, from anywhere.)
Of course, the solution isn't as elegant as a card not protruding out from the iPad but, after all, still much-much better than nothing at all – and, of course, the method used so far, explained in the above linked tutorials: 1, making sure all your video files are iDevice-native (no MKV's, no AVI's etc.) 2, naming your video files to have a 8-character name only 3, (sometimes lengthy) importing them before the playback.
OK, enough of the talk, let's see how this all needs to be done! As you'll see, it's really easy – basically, if you're able to jailbreak your iPad, you'll also be able to follow and learn the workflow I present below.
NOTE:
1, while I show you the link creation in a media player's Documents folder (and also show the results in two other players, It's Playing and XBMC), you can do the same with any kind of an AppStore (or Cydia) app, as long as it imports / stores its documents from / in its Documents folder. Image viewers / editor (yes, you can directly access your RAW shots directly, while on the card! This is great news for all photographers equiped with iPads!), music apps, anything. It's because storing (large) video files on external cards that is mostly asked for that I use two multimedia players in this tutorial. Again, any other kind of official AppStore app would be able to directly access files on the storage card after creating a symlink to it (or a directory on it).
2, as with the best apps and tweaks, this all only works on jailbroken devices. Sorry guys – it seems, “thanks” to Apple's overly strict restrictions, one does need to jailbreak his or her iDevices to make their usage as seamless, quick and effective as possible.
Creating links
First and foremost, you'll need the excellent file hander tool iFile, available from Cydia:
(as with all (except the bottom-most iPhone one) the screenshots in this article, click the thumbnail image for a much cleaner and larger version. I must use bad-quality, small thumbnails not to mess up the layout of the article when rendered and not to tax one's data plan too much)
I think even the free version of iFile is capable of creating symlinks – I couldn't test this because I, as you can also see in the screenshot above, purchased iFile and couldn't test the free version in this regard.
Before starting to create symlinks, you'll also need to insert the card with your videos (or at least a directory where your'll later put your videos), via the CCK, in your iPad. If the card has a DCIM subdirectory with images / videos in it (it doesn't have to be present), the default image importer will be executed; just exit it.
Start up iFile and tap “Flash Drive” in the top left corner, also annotated in the following screenshot. The right pane will change to the folder “/var/mnt/mount1” (see the top banner).
The directory list in this shot shows a directory “myownvideos” (the one I'll link to and containing all my videos) and two other files, created by OS X, we can just ignore.
Now, tap the “Edit” button in the top right corner (also annotated above). Round checkboxes will appear in front of every row (annotated below):
Tap the one in front of the directory you'd like to link to (in our case, “myownvideos”):
Tap the clipboard icon in the bottom right corner (annotated below). A context menu will be displayed; tap “Copy/Link” in it (also annotated below):
Tap “Applications” in the left center (annotated below) and scroll down to the app you'd like to create the symlink in. In my example, it's “GoodPlayer” (also annotated). Tap it:
Inside, tap the “Documents” folder (annotated below) so that you can step into it:
Inside the “Documents” folder, tap the “Edit” button (upper right corner) as you've done in the first iFile screenshot and, after that, tap the clipboard button (lower right corner; annotated below). Select “Create Link” from the context menu (annotated below). After that, tap Done (upper right corner; also annotated):
The new directory listing will contain the name of the target (linked) directory; in our case, “myownvideos” (annotated below):
Now, you can start the app where you've created the link at; in our case, GoodPlayer. It'll list the just-created link as a standard, tappable folder:
Tap it: its contents will be listed, ready for tapping (=playback):
Let's do the same to It's Playing. The linked directory result:
let's enter the directory and play back a video:
Finally, a shot of XBMC entering the Documents directory of GoodPlayer. From there, it has no problems with playing back symlinked content either:
What about the iPhone?
Unfortunately, the only CCK-specific hack for the iPhone / iPod touch, CameraConnector, only allows for using external USB keyboards (and probably some other input devices) with these devices.
(The Cydia main page of CameraConnector, also showing I've purchased it)
Not even the current, 0.0.2-1 version allows for mapping in external mass storage – don't even try.
(Also see my posts HERE if interested in the tweak.)
UPDATE (Apr/20/2013):
1, while the tutorial above explains doing this to map external directories / files to AppStore apps, symlinking can also be VERY useful between the Documents directory (or other file storage folders) AppStore apps. An example: you transfer a huge (multi-Gigabyte) video to, say, It's Playing (because of its excellent volume / brightness / color boosting capabilities), but would like to play back the same video in, say, nPlayer. (Because the latter supports, among other things, displaying multiple subtitle tracks at the same time.) Then, instead of duplicating the file or cutting / pasting (moving) it from the source player's Documents directory to that of the target player, you just create a small symlink in the Documents directory of the latter, pointing to the one and only video file. This makes it possible to access the same file from any number of players.
I wish Apple implemented something like this with manual, user-initiated, mutual (!) negotiation between the two apps. (Of course I know they won't.)
2, The latest version (0.0.2d3-3) of CameraConnector (see the latest part of my original post) might support external FAT32 storage devices - with some manual setup each time(?) you connect the storage:
Will definitely test the new version and report back.
UPDATE (Apr/21/2013): As I've promised in my yesterday's update, I've played quite a bit with the current, 0.0.2d3-3 version of CameraConnector to find out whether it indeed can be used to access storage cards.
It turned out to contain the compiled "winocm / ios-usb-framework" libraries (no source available) HERE.
The answer so far is nope - at least not that I know of. I couldn't make either my iPads or my iPhones display the Vendor / Product ID's of my card in my CCK - which was perfectly visible to the importer utility of even non-jailbroken iPads.
Note: you'll need "IOKit Tools" (available in Cydia) to issue the recommended "ioreg-p IOUSB-fl" command.
Note 2: I've only found one discussion of this subject, on a(n in)famous Russian PDA site. (I don't link to it as it has cracked software.) One of the participants, "Мастер Йогурт", stated he was able to obtain the pid / vid's of his card but not even they worked when providing "usb_cp" with these values.
Another guy, "sashapont", stated he talked to the developer on the matter but haven't received any meaningful / useful answer.
Note 3: even if you do make it work, you won't be able to create symlinks to these files. It seems you can only list (usb_ls) and copy (usb_cp) those files. In this regard, accessing the card is almost as restricted as without jailbreaking - you must transfer your files to the main storage before accessing them (from, say, a video player).