在应用程序中将 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中将视频上传到 YouTube?

如何在Android中将视频上传到youtube?

iOS:在我的应用中将视频分享到 youtube

如何使用 UISaveVideoAtPathToSavedPhotosAlbum 保存 youtube 视频?

在 Flutter 中将视频文件保存到设备

使用 Python 将 YouTube 视频下载到某个目录