Sunday, March 31, 2013
Focus on process, not outcome
Tuesday, March 5, 2013
HTML5 Shape Puzzle - HTML5 Version of the game the preschool kids love
HTML5 Shape Puzzle - HTML5 Version of the game the preschool kids love
Including music, sound, touch support, responsive design, and 20 stages
http://shapepuzzle.appspot.com
HTML5 Shape Puzzle Game |
Sunday, March 3, 2013
How to grab YouTube playback video files
How to grab YouTube playback video files
Step-by-step tutorial showing how to get all available video source files from a video on YouTube using only Javascript. No plugins and/or server side scripts are required.
First of all I want to list here a few benefits from being able to do that.
- You can download any video from YouTube without plugins or server-side scripts. You just need a browser.
- You can use YouTube as an encoder. Let's say you have to convert a FLV video to MP4 or
WebM. - You can set a cron job to run once a week to download all available video files from any channel.
- You can play any YouTube video out of the YouTube player (not recommend).
- You can play YouTube videos on HTML5 canvas and go crazy! Check this out at: http://videopuzzle.possum-cms.com
How to do it
Source code: https://github.com/edse/keepvideos
Step 1: Extract YouTube video ID from URL
var url = 'http://www.youtube.com/watch?v=yntfUjenls0';
var video_id = '';
var regExp = /.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/;
var match = url.match(regExp);
if(match){
video_id = match[1];
}
Step 2: Request YouTube playback files information
Easy as pie. Just make an Ajax request to: http://www.youtube.com/get_video_info sending the desired video ID...
$.ajax({
url: "http://www.youtube.com/get_video_info?video_id="+video_id,
dataType: "text"
}).done(function(data) {
...
});
Step 3: Parse the response data information from YouTube
The information that we are looking for is "url_encoded_fmt_stream_map". This variable contains all streams available for the requested movie.
Step 4: Trick. Parse again each one of the streams
YouTube encode the information twice, so you have to parse it again.
There is other trick here, You also have to add a signature value on each stream url, otherwise it won't work.
Step 5: Have fun!
By now you should have a variable "results" with all YouTube video files available for the requested movie.
You can do whatever you want with the files. For example: display a link, play the video, grab snap shots of the video... Have fun!
To display the a link for each video file available...
function(data) {
var info = {};
parse_str(data, info);
var streams = explode(',', info['url_encoded_fmt_stream_map']);
...
Step 4: Trick. Parse again each one of the streams
YouTube encode the information twice, so you have to parse it again.
There is other trick here, You also have to add a signature value on each stream url, otherwise it won't work.
var results = [];
for(var i=0; i<streams.length; i++){
var real_stream = {};
parse_str(streams[i], real_stream);
real_stream['url'] += '&signature=' + real_stream['sig'];
results.push(real_stream);
}
Step 5: Have fun!
By now you should have a variable "results" with all YouTube video files available for the requested movie.
You can do whatever you want with the files. For example: display a link, play the video, grab snap shots of the video... Have fun!
To display the a link for each video file available...
if(results.length > 0){
$.each(results, function(index, value) {
$('#results').append('<a href="'+value.url+'">'+value.quality+' - '+value.type</a>');
});
}
Subscribe to:
Posts (Atom)