Save Youtube video to iPhone in the app
Solution 1:
To download the video from YouTube:
- Get the URL to download from, via the YouTube API or whatever other method.
- Create an NSOutputStream or NSFileHandle opened on a temporary file (in
NSTemporaryDirectory()
or a temp-named file in your Documents directory). - Set up your progress bar and whatever else you need to do.
- Allocate and start an NSURLConnection to fetch the file from the URL. Do not use
sendSynchronousRequest:returningResponse:error:
, of course. - In the
connection:didReceiveResponse:
delegate method, read out the length of data to be downloaded for proper updating of the progress bar. - In the
connection:didReceiveData:
delegate method, write the data to the output stream/file handle and update the progress bar as necessary. - In
connectionDidFinishLoading:
orconnection:didFailWithError:
, close the output stream/file handle and rename or delete the temporary file as appropriate.
To play it back, just use NSURL's fileURLWithPath:
to create a URL pointing to the local file in the Documents directory and play it as you would any remote video.
Solution 2:
Ive used classes from this project: https://github.com/larcus94/LBYouTubeView It works fine for me. I can download youtube videos.
I used this code:
LBYouTubeExtractor *extractor = [[[LBYouTubeExtractor alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:(@"http://www.youtube.com/watch?v=%@"), self.videoID ]] quality:LBYouTubeVideoQualityLarge] autorelease];
[extractor extractVideoURLWithCompletionBlock:^(NSURL *videoURL, NSError *error) {
if(!error) {
NSLog(@"Did extract video URL using completion block: %@", videoURL);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = [NSData dataWithContentsOfURL: videoURL];
NSString *pathToDocs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filename = [NSString stringWithFormat:(@"video_%@.mp4"), self.videoID ];
[data writeToFile:[pathTODocs stringByAppendingPathComponent:filename] atomically:YES];
NSLog(@"File %@ successfully saved", filename);
});
} else {
NSLog(@"Failed extracting video URL using block due to error:%@", error);
}
}];
You can show progress of downloading using technique described in the posts above.
Solution 3:
Here is my example: https://github.com/comonitos/youtube_video
I used PSYouTubeExtractor.h class by Peter Steinberger It can get youtube mp4 video url and than downloading and viewing is not a problem
NSURLConnection + NSNotificationCenter + PSYouTubeExtractor + NSMutableData
Solution 4:
check these projects -
https://github.com/iosdeveloper/MyTube
https://github.com/pvinis/mytube
these will definitely help you!!