在应用程序中将 Youtube 视频保存到 iPhone
Posted
技术标签:
【中文标题】在应用程序中将 Youtube 视频保存到 iPhone【英文标题】:Save Youtube video to iPhone in the app 【发布时间】:2011-07-02 12:22:58 【问题描述】:在应用中播放 Youtube 视频很简单,而且有据可查。
这样做有两个问题:
-
关闭 Youtube 播放器后,如果用户想再次播放,必须再次等待在线流媒体播放
无法离线播放(在家加载视频以在路上观看)
谁有代码:
-
将 Youtube 视频下载到文档文件夹并显示下载进度
通过从文档文件夹加载文件来播放下载的视频(这意味着即使没有连接到互联网)
【问题讨论】:
【参考方案1】:从 YouTube 下载视频:
-
通过 YouTube API 或任何其他方法获取要下载的 URL。
创建一个在临时文件上打开的NSOutputStream 或NSFileHandle(在
NSTemporaryDirectory()
或Documents 目录中的临时命名文件中)。
设置您的进度条以及您需要做的任何其他事情。
分配并启动一个 NSURLConnection 以从 URL 中获取文件。当然不要使用sendSynchronousRequest:returningResponse:error:
。
在connection:didReceiveResponse:
委托方法中,读出要下载的数据长度,以便正确更新进度条。
在connection:didReceiveData:
委托方法中,将数据写入输出流/文件句柄,并根据需要更新进度条。
在connectionDidFinishLoading:
或connection:didFailWithError:
中,关闭输出流/文件句柄并根据需要重命名或删除临时文件。
要播放它,只需使用 NSURL 的 fileURLWithPath:
在 Documents 目录中创建一个指向本地文件的 URL,然后像播放任何远程视频一样播放它。
【讨论】:
很好的答案 Anomie - 我会尽快尝试。 MiRAGe,被github.com/iosdeveloper/MyTube 的清理代码困住了——决定看看那里使用的机制是否健壮。之后我会检查 Anomie 解决方案。 如何从 Youtube API 获取下载 URL? @yourfriendzak PSYouTubeExtractor 可用于此。有很多开源应用程序(在下面的答案中提到)可以做到这一点。 @Biko #Anomie 您正在讨论的中国应用程序可能是“ystream” - 我不确定这种方法(直接访问 mp4 网址)是否违反条款和条件(YouTube)?此外,提取 url 的方法看起来相当原始。它健壮吗?可以依靠吗?【参考方案2】:我使用了这个项目中的类:https://github.com/larcus94/LBYouTubeView 这对我来说可以。 我可以下载 youtube 视频。
我使用了这个代码:
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);
];
您可以使用上述帖子中描述的技术显示下载进度。
【讨论】:
@Petr,现在这对我不起作用。你能告诉我它现在有效吗? @None 我们放弃了这个项目...... :(。现在我不能告诉你这个解决方案的当前状态(工作或不工作)(如果我理解你的话) @Petr,谢谢。还有一个问题,如果是我的,苹果是否允许 youtube 视频下载功能?【参考方案3】:这是我的例子:https://github.com/comonitos/youtube_video
我使用了 Peter Steinberger 的 PSYouTubeExtractor.h 类,它可以获取 youtube mp4 视频 url,下载和观看不是问题
NSURLConnection + NSNotificationCenter + PSYouTube提取器 + NSMutableData
【讨论】:
【参考方案4】:检查这些项目 -
https://github.com/iosdeveloper/MyTubehttps://github.com/pvinis/mytube
这些肯定会帮助你!
【讨论】:
该应用不下载视频。如果我错过了要在代码中添加的任何内容,请告诉我。【参考方案5】:我个人不知道如何下载 youtube 视频(代码太大,无法在此处填写答案)。
但是,这里有一个完整的 youtube 下载示例 here。 这是一个名为 LoadTube 的开源 youtube 下载器:here's the a link to the source code。
【讨论】:
感谢您的链接 - 这会有所帮助!【参考方案6】:我会播放视频并找出临时文件的存储位置。如果您可以访问它,请将其复制到某个文件夹以供离线查看。
【讨论】:
肖恩,这是一些建议。但是我在一些中文应用程序中看到的实现显示自定义进度下载,并允许下载后随时播放,无需先播放。一个人可以同时进行许多下载。 在我的沙箱中 (github.com/comonitos/youtube_video)。我在文档文件夹中从 youtube 下载视频。为了显示进度,您可以使用 NSURLConnection 委托或 ASIHTTPRequest (allseeing-i.com/ASIHTTPRequest):1- 应用获取 youtube url。 2 ASIHTTP请求 || NSURLConnection - 下载并显示进度。以上是关于在应用程序中将 Youtube 视频保存到 iPhone的主要内容,如果未能解决你的问题,请参考以下文章