在应用程序中保存Youtubevideo到iPhone
在应用程序中播放Youtubevideo很容易,周围有很多文件。
有两个问题:
- 在closuresYoutube播放器之后,如果用户想再次播放它,则必须等待在线stream传输
- 不能离线播放(在家中加载video观看路上)
有没有人有代码来:
- 下载Youtubevideo到文档文件夹,并显示下载进度
- 通过从文件夹中加载文件播放下载的video(即使没有连接到互联网)
从YouTube下载video:
- 通过YouTube API或任何其他方法获取要下载的URL。
- 创build一个NSOutputStream或NSFileHandle打开临时文件(在
NSTemporaryDirectory()
或您的文档目录中的临时名称的文件)。 - 设置你的进度条,以及你需要做的任何事情。
- 分配并启动NSURLConnection以从URL中获取文件。 当然,不要使用
sendSynchronousRequest:returningResponse:error:
- 在
connection:didReceiveResponse:
delegate方法中,读出要下载的数据的长度以正确更新进度条。 - 在
connection:didReceiveData:
delegate方法中,将数据写入输出stream/文件句柄并根据需要更新进度栏。 - 在
connectionDidFinishLoading:
或connection:didFailWithError:
,closures输出stream/文件句柄,并根据需要重命名或删除临时文件。
要播放它,只需使用NSURL的fileURLWithPath:
在Documents目录中创build指向本地文件的URL,并像播放任何远程video一样播放该URL。
我使用这个项目的类: https : //github.com/larcus94/LBYouTubeView它适用于我。 我可以下载YouTubevideo。
我用这个代码:
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); } }];
您可以使用上面的post中描述的技术来显示下载的进度。
这是我的例子: https : //github.com/comonitos/youtube_video
我使用PSYouTubeExtractor.h类彼得Steinberger它可以得到youtube的MP4videourl,比下载和查看不是一个问题
NSURLConnection + NSNotificationCenter + PSYouTubeExtractor + NSMutableData
我个人不知道如何下载YouTubevideo(代码太大,无法在这里回答)。
不过,这里有一个完整的YouTube下载示例。 这是一个开源的YouTube下载器,称为LoadTube: 这是一个链接到源代码 。
我会播放video,并找出临时文件的存储位置。 如果您可以访问它,请将其复制到某个文档文件夹以供离线查看。