27

在应用程序中播放 Youtube 视频很容易并且有据可查。

这样做有两个问题:

  1. 关闭 Youtube 播放器后,如果用户想再次播放它必须再次等待在线流
  2. 无法离线播放(在家加载视频以在路上观看)

有没有人有代码:

  1. 将 Youtube 视频下载到文档文件夹并显示下载进度
  2. 通过从文档文件夹加载文件来播放下载的视频(即使没有连接到互联网)
4

6 回答 6

42

要从 YouTube 下载视频:

  1. 通过 YouTube API 或任何其他方法获取要下载的 URL。
  2. 创建一个在临时文件上打开的NSOutputStreamNSFileHandleNSTemporaryDirectory() (在Documents 目录中或临时命名的文件中)。
  3. 设置你的进度条和你需要做的任何其他事情。
  4. 分配并启动一个 NSURLConnection 以从 URL 中获取文件。当然,不要使用sendSynchronousRequest:returningResponse:error:
  5. connection:didReceiveResponse:委托方法中,读出要下载的数据长度,以便正确更新进度条。
  6. connection:didReceiveData:委托方法中,将数据写入输出流/文件句柄并根据需要更新进度条。
  7. connectionDidFinishLoading:connection:didFailWithError:中,关闭输出流/文件句柄并根据需要重命名或删除临时文件。

要播放它,只需使用 NSURLfileURLWithPath:在 Documents 目录中创建一个指向本地文件的 URL,然后像播放任何远程视频一样播放它。

于 2011-05-23T14:53:33.240 回答
7

我使用了这个项目中的类: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);
    }
}];

您可以使用上述帖子中描述的技术显示下载进度。

于 2013-01-16T07:07:11.140 回答
6

这是我的示例:https ://github.com/comonitos/youtube_video

我使用了 Peter Steinberger 的 PSYouTubeExtractor.h 类 它可以获取 youtube mp4 视频 url 并且下载和查看不是问题

NSURLConnection + NSNotificationCenter + PSYouTubeExtractor + NSMutableData

于 2012-02-27T09:40:23.037 回答
5

检查这些项目 -

https://github.com/iosdeveloper/MyTube
https://github.com/pvinis/mytube

这些肯定会帮助你!

于 2011-05-28T06:47:39.053 回答
5

我个人不知道如何下载 youtube 视频(而且代码太大,无法在此处给出答案)。

但是,这里有一个完整的 youtube 下载示例。这是一个名为 LoadTube 的开源 youtube 下载器:这是源代码的链接

于 2011-05-23T12:22:46.190 回答
1

我会播放视频并找出临时文件的存储位置。如果您可以访问它,请将其复制到某个文档文件夹中以供离线查看。

于 2011-02-23T05:16:57.617 回答