【问题标题】:Save Youtube video to iPhone in the app在应用程序中将 Youtube 视频保存到 iPhone
【发布时间】:2011-07-02 12:22:58
【问题描述】:

在应用中播放 Youtube 视频很简单,而且有据可查。

这样做有两个问题:

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

谁有代码:

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

【问题讨论】:

    标签: iphone objective-c youtube offline-mode


    【解决方案1】:

    从 YouTube 下载视频:

    1. 通过 YouTube API 或任何其他方法获取要下载的 URL。
    2. 创建一个在临时文件上打开的NSOutputStreamNSFileHandle(在NSTemporaryDirectory() 或Documents 目录中的临时命名文件中)。
    3. 设置您的进度条以及您需要做的任何其他事情。
    4. 分配并启动一个 NSURLConnection 以从 URL 中获取文件。当然不要使用sendSynchronousRequest:returningResponse:error:
    5. connection:didReceiveResponse:委托方法中,读出要下载的数据长度,以便正确更新进度条。
    6. connection:didReceiveData:委托方法中,将数据写入输出流/文件句柄,并根据需要更新进度条。
    7. 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/MyTube
      https://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 - 下载并显示进度。
      猜你喜欢
      • 1970-01-01
      • 2012-11-20
      • 2011-11-16
      • 2011-05-08
      • 2012-04-05
      • 2013-07-28
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多