Choosing Google Drive
About three weeks ago I started a project in my house to move all of our personal pictures, home movies, music, and other shared files out to a cloud base storage provider. I did some research and based on cost I decided to go with Google Drive for my purposes. They had a native Mac sync client and also I tend to use Google Chrome and many other Google Cloud tools for my personal use so it made sense. It has taken quite some time with our 3meg DSL connection but thanks to some background VMware View Desktops I have been slowly migrating data to the Google Drive cloud.
Sharing Files on Google Drive
This seems pretty easy enough with Google Drive, when you are talking about basic image files, or other documents. It’s as simple as sharing the file to “anyone with the link” and publishing the link as I have for this example.
For example you can click here and see that it is easy to share an image out to anyone with a Google Drive URL. What I am finding is so far even as a new service it is very flexible in the respect of file sharing. So I wanted to start doing Podcasts for another blog site, and I figured let’s use this fancy new space to store them! Here started my problem. If you share out an audio file in the same way it is not directly accessible and is converted to the docs.google.com URL as you can see here and the file is not really usable in any way except to “Download” it. That will not work for podcast streaming of course.
Overlaying Google Drive’s API
Here is where things get interesting! I was doing some research previously on a company called Storage Made Easy. I signed up for their free service to try the UI out. Basically, the idea is that Storage Made Easy overlays the Google Drive API along with about 30 other Cloud Storage providers. I may get into that later, but for the purposes here I was only concerned with Google Drive even though you will see below I have it connected to some others.
Once you have connected Storage Made Easy to your various cloud storage providers you can then generate URL’s using the Storage Made Easy user interface. You can see below the same file is enumerated in the interface to select and generate a shared link.
Using PowerPress With Google Drive
Once we have generated this new Storage Made Easy URL, you can see here that the file is now made available not only with a download link, but it is actually just downloaded like any hosted file. What this means for me is that in the PowePress plugin for WordPress is the URL I provide the plugin is this new one and is 100% verified. Below is the two screen shots and you can see with the original URL and the new Storage Made Easy generated URL the file is now available to the plugin. Once the blog post is published the file will play and stream directly from Google Drive.
The real upside to this is I can have other people record and upload PodCasts to this folder provided I give them access to it. All I need to do is generate the Storage Made Easy URL’s, create the blog posts with the proper URL’s and the PodCasts are good to go! Why I find hosting these on Google Drive easier really is the user sharing capability of the folder for others to upload files. Amazon S3 for one is not that user-friendly, at least to me, and DropBox was more expensive. I now have a way to leverage the storage I am paying for on Google Drive with Storage Made Easy. The best part is you can move the file from Google Drive to another provider using the Storage Made Easy Interface and the URL you generated is maintained I will get into more about the usability of Storage Made Easy another time.
I will mention I have since upgraded to the Personal Lifetime Cloud for Business level with Storage Made Easy as it provides unlimited bandwidth. The free version worked great for my testing and validation before I decided the service would work. If you want to know more about Storage Made Easy please drop me a line and I will try to help you get started.
Updated 12/3/2012 – Google Drive iTunes Issue
After the work to set this up and it DOES work for PowerPress based blog post streaming, I tried to add the feed to iTunes and got an error about the host not allowing “Byte Range Requests”. This is a new requirement from iTunes for mobile devices and is supported natively on Apache out of the box and on Amazon Web Services. However Google Drive does not support this and the solution above to host the files will not work with iTunes. Below is an example output of what you should see when you run a curl test on the file. The first two are from S3 and my local web server the third is using the Storage Made Easy API. You can see the needed item for Byte Range Requests is missing.
$ curl -I -r 200-300 http://s3.amazonaws.com/vfitpodcasts/VFit_PodCast_Episode_1.mp3 HTTP/1.1 206 Partial Content x-amz-id-2: 7WOWvDo6+QJbmu4wyeYtxDFE67lh3WmTTtwkf2/qKjsWvf3Gz2ftoLXMrgE7tkhP x-amz-request-id: 1E0F19F44F33ABFB Date: Mon, 03 Dec 2012 14:02:45 GMT Last-Modified: Mon, 03 Dec 2012 13:49:20 GMT ETag: "bc33487e1c973945f497ff51cd6f98d5" Accept-Ranges: bytes Content-Range: bytes 200-300/10129785 Content-Type: audio/mpeg Content-Length: 101 Server: AmazonS3 $ curl -I -r 200-300 http://www.v-fit.us/podcasts/VFit_PodCast_Episode_1.mp3 HTTP/1.1 206 Partial Content Date: Mon, 03 Dec 2012 14:03:01 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Mon, 03 Dec 2012 14:01:06 GMT ETag: "9a9179-4cff32e38ca12" Accept-Ranges: bytes Content-Length: 101 Cache-Control: public Expires: Tue, 03 Dec 2013 14:03:01 GMT Vary: User-Agent Pragma: public X-Powered-By: W3 Total Cache/0.9.2.4 Content-Range: bytes 200-300/10129785 Connection: close Content-Type: audio/mpeg $ curl -I -r 200-300 http://storagemadeeasy.com/wp-content/uploads/55df0a51439cd03c96ff3db20b8394fa.mp3 HTTP/1.1 200 OK Date: Mon, 03 Dec 2012 14:03:33 GMT Server: Apache X-Powered-By: PHP/5.2.17 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Transfer-Encoding: binary Content-Disposition: attachment; filename="VFit PodCast Episode 1.mp3" Set-Cookie: PHPSESSID=185fc2023b60d61780b0755cf6c65198; path=/ Content-Range: bytes 0-10129784/10129785 Content-Length: 10129785 Content-Type: audio/mpeg
I have contacted Storage Made Easy to see if this is something their service can be enabled for and at this time the answer is no. I will have to revert back to putting these podcasts on S3 for now until I can get another workaround for using Google Drive. At least these podcasts are not large so it should take a while to fill up my 5GB of free space on S3.
The moral of the story here is this does work as long as you don’t want to create an iTunes feed for your podcasts. If that is the case you cannot use this method today, but it could still work for a few people that don’t yet want to deal with iTunes.
Hie Chris! thx for this post…it answered my prayer…have been awhile trying to stream audio & video from google drive.
bravo!
Did you see the update though about itunes?
Ever come up with a work around for iTunes vs. Google Drive?
Not with GDrive, not there is no way I have seen for it to work. The requirement from iTunes to stream has not changed. Also the hook from Storage Made Easy has not been updated. I am still using S3 and Cloudfront for geo distribution which is still from what I have found the best option. I do use SME do copy the podcast files for backup to my GDrive space though 🙂
Thanks for the reply. I set up Amazon S3 but now hear how it can get most costly than the monthly fee sites. Kinda torn on which way to go. Wish you the best in your endeavors!!
John Hames
It’s not been costing me very much at all even with Podcasts and CDN for images.
Awesome, thanks for the Google drive tip, it worked!
Cool. I wish GDrive would natively support the download protocol for iTunes though like S3.
Just so you know serving from Google Drive is an extremely bad idea in fact you can expect your numbers to collapse. They do not support
Byte Serving and Byte Range Request – Required by iTunes and many other portable devices and smartphones
Agreed hence the 12/3/2012 update I added 🙂
You might want to revisit this and update your blog – I don’t know when it changed, but I’ve been using drive for audio file hosting with no problem for some months, and it supports partial content and byte range requests (see log below).
Note that I am using the google drive hosted option, which gives me 15Gb free and almost unlimited bandwidth. I say “unlimited” – Google’s official answer is that they don’t provide figures, but you’re “unlikely” to hit it unless your sites is serving “millions” of large files per day. Here’s an example of the headers I receive for mp3, mp4 and ogg files.
It certainly seems to work fine with jPlayer, which is a front end to the html5 audio elements which also use byte range requests.
curl -H Range:bytes=16-256 -I http://googledrive.com/host/xxxxxxx/audio/01_Introduction_and_track_list.mp3
HTTP/1.1 206 Partial Content
Content-Type: audio/mpeg
Date: Sun, 06 Apr 2014 10:49:42 GMT
Content-Length: 241
Content-MD5: IFcgv48/EWr63xxxxxx==
Last-Modified: Sat, 05 Apr 2014 19:12:43 GMT
Cache-Control: private, max-age=60
Expires: Sun, 06 Apr 2014 10:50:42 GMT
Content-Range: bytes 16-256/465352
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: false
Access-Control-Allow-Headers: Accept, Accept-Language, Authorization, Cache-Control, Content-Disposition, Content-Encoding, Content-Language, Content-Length, Content-MD5, Content-Range, Content-Type, Date, GData-Version, Host, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, Origin, OriginToken, Pragma, Range, Slug, Transfer-Encoding, X-ClientDetails, X-GData-Client, X-GData-Key, X-Goog-AuthUser, X-Goog-PageId, X-Goog-Encode-Response-If-Executable, X-Goog-Correlation-Id, X-Goog-Request-Info, X-Goog-Upload-Command, X-Goog-Upload-Content-Disposition, X-Goog-Upload-Content-Length, X-Goog-Upload-Content-Type, X-Goog-Upload-Offset, X-Goog-Upload-Protocol, X-Goog-Visitor-Id, X-HTTP-Method-Override, X-JavaScript-User-Agent, X-Origin, X-Referer, X-Upload-Content-Length, X-Upload-Content-Type, X-Use-HTTP-Status-Code-Override, X-YouTube-VVT, X-YouTube-Page-CL, X-YouTube-Page-Timestamp
Access-Control-Allow-Methods: GET,OPTIONS
Server: HTTP Upload Server Built on Apr 4 2014 13:03:17 (1396641797)
Alternate-Protocol: 443:quic
Interesting….I will have to play with it again using JWplayer on another site. Thanks.
Any idea if this is working with itunes now?
Thanks!
Does Amazon S3 automatically add all the metadata iTunes requires or does this have to be done manually? I only ask because when I go into my bucket and select the properties on an mp3 I have there, Accept-Ranges isn’t one of the options in the add more metadata menu. I tried to add “Accept-Ranges: bytes” manually and hit save but when I refreshed it wasn’t there. Where should I be looking?
That I am not sure, but I did not do anything other than upload the files and use a podcasting plugin to post them to iTunes. When I connected to iTunes the files worked fine. If nothing else the Accept-Ranges I know worked out of the box. http://itunes.apple.com/us/podcast/virtual-fitness-weekly-podcast/id584456835
Has the iTunes issue been fixed in regards to the Byte-Range requests, or has a work around been found?
It was never an iTunes issue and I am not sure if GDrive has fixed or added support for this, I gave up trying.
Well, for whatever it’s worth, I’ve tried this approach using a script to get the direct links to the files on Google Drive in Aug 2016 and iTunes is still rejecting the files because of an apparent byte-range requests inability from the server (Google Drive). So, looks like this would-be-awesome approach is still less-than-awesome. #bummer