【问题标题】:Play YouTube videos with MPMoviePlayerController instead of UIWebView使用 MPMoviePlayerController 而不是 UIWebView 播放 YouTube 视频
【发布时间】:2010-12-19 06:25:14
【问题描述】:

我正在尝试使用 MPMoviePlayerController 流式传输一些 YouTube 视频,但我遇到了一些问题。我使用的代码非常简单,我可以通过将 URL 传递给 initWithContentURL 来播放 .m4v 视频。当我启动电影播放器​​时,播放器会出现,但大约 20 秒后就会消失。当我在模拟器中尝试它时,我得到一个警告视图,指出服务器配置不正确。是否需要通过 URL 传递参数才能从 google 获取特定类型的视频供稿?

NSURL *videoURL = [NSURL URLWithString:@"http://www.youtube.com/v/HGd9qAfpZio&hl=en_US&fs=1&"];
MPMoviePlayerController *moviePlayer;
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];

[moviePlayer play];

我也尝试过以下网址 http://www.youtube.com/watch?v=HGd9qAfpZio

我还看到了参数 &format=1 并尝试将其添加到两个字符串的末尾,但没有运气。

【问题讨论】:

  • 我找到了更多信息,但它仍然不起作用。有人建议将其用作 URL:youtube.com/get_video?video_id=ID&t=SIGNATURE&fmt=18 我输入了我的视频 ID,但我不知道签名是什么?视频播放器的行为仍然相同。它会打开播放器,然后在 10 到 20 秒后关闭。

标签: ios video streaming youtube mpmovieplayercontroller


【解决方案1】:

在您自己的应用程序中播放 youtube 视频的唯一方法是创建一个 UIWebView,其中包含来自 Youtube 的嵌入标签,用于您要播放的电影作为 UIWebView's 内容。 UIWebView 将检测到嵌入的对象是一个 Youtube 链接,并且 web 视图的内容将是视频的 youtube 预览。当您的用户单击预览时,视频将显示在 MPMoviePlayerController 中。这是 Muxecoid 提供的链接 (how to play youtube videos within an application) 中描述的技术,这是(据我所知)在应用程序中播放 youtube 视频的唯一方法。您仍然可以通过将 youtube URL 传递给 -[UIApplication openURL:] 来启动 Youtube 应用程序,但这当然会关闭您自己的应用程序,这通常是不可取的。

很遗憾,无法使用MPMoviePlayerController 直接播放 youtube 视频,因为 youtube 不会公开指向视频文件的直接链接。

【讨论】:

  • 是的,这是在您的应用中播放 YouTube 视频的唯一方法。花了 2 时间寻找替代品。质量也有点差。
  • 2年多之后还有没有别的办法?
  • 在播放嵌入的 youtube 视频时是否有可能获得 PlaybackFinishReason 和 PlaybackState 通知?
  • 这不是唯一的方法。您可以从 Youtube 获取 mp4 文件。我在我的AirPlayer Python Project 中执行此操作,这使您可以在 AppleTV 上播放 youtube 视频。我将移植它并在我当前的 iOS 项目中使用它,并在它准备好时将代码发布在这里。
  • 很遗憾,禁止使用直接链接。第 II/10 节。在developers.google.com/youtube/terms:“您的 API 客户端不会 [...] 通过使用 YouTube 播放器或 YouTube 明确授权的其他视频播放器以外的任何方式访问任何 YouTube 视听内容的任何部分;”
【解决方案2】:

如果您正在使用 代码:

- (void)embedYouTube:(NSString*)url frame:(CGRect)frame {  
     NSString* embedHTML = @"\ 
        <html><head>\ 
     <style type=\"text/css\">\ 
     body {\ 
     background-color: transparent;\ 
     color: white;\ 
    }\ 
   </style>\ 
    </head><body style=\"margin:0\">\ 
       <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
    width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
       </body></html>";  
   NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];  
   if(videoView == nil) {  
      videoView = [[UIWebView alloc] initWithFrame:frame];  
     [self.view addSubview:videoView];  
    }  
    [videoView loadHTMLString:html baseURL:nil];  
  }

来源:

Just refer this link

确保在设备上而不是在模拟器上对其进行测试。由于模拟器总是会显示带有蓝色框的问号(它没有快速播放器)。

【讨论】:

    【解决方案3】:

    正如我在上面的评论中所写的,我必须在我正在从事的项目中这样做。我已经解决了这个问题并在github上提交了代码。

    你可以查看源码并fork它here

    它基本上需要一个 youtube 网址并获取所有与 iOS 兼容的视频网址。

    希望对您有所帮助!
    干杯

    【讨论】:

    • 谢谢!顺便说一句,更新解决了最近 YouTube 更改的问题。
    • YouTube 的 ToS 不允许这样做。使用它需要您自担风险,因为如果 YouTube 发现您没有遵守 ToS 或 YouTube 更改了它生成的嵌入代码,您的应用可能随时停止运行。
    【解决方案4】:

    我刚刚偶然发现有人能够将YouTube 视频放入MPMoviePlayerController 中。现在看来确实有可能。

    LBYouTubeView

    【讨论】:

    • @Thanx 工作正常但是当我使用 [mpplayer stop];停止这个视频然后视频正在运行。但我想停止视频
    • github链接是否也在后台播放音频?
    【解决方案5】:

    要播放您的视频,您需要先提取网址,然后再将网址传递给MPMoviePlayer。不能直接播放。

    我的 github 仓库有一个演示实现。

    见:

    https://github.com/DpzAtMicRO/IOSYoutubePlayer

    试试吧,这可以像任何其他视频一样直接在 MPMoviePlayer 中加载和播放 youtube 视频,这也是一个不错的方法。

    编辑:在您的项目中使用它之前,请确保您仔细阅读 Readme.md

    【讨论】:

    • 反对 YouTube 的服务条款,很遗憾。如果您这样做,您只能期望您的应用在 YouTube 不知道您在做什么的情况下运行。
    • 我不久前还给 YouTube API 人员发了一封电子邮件,询问我是否可以自己解析视频 URL;这是我收到的回复中的引述:“唯一支持的机制是 iframe 嵌入。我们的 ToS 不支持原始流访问,除了我们为功能手机提供的低分辨率 RTSP 流”
    • 你已经说服了我反对意见;我同意它应该是一个标记不正确的工具,并且赞成足以表明我认为哪些答案与试图解决 YouTube 嵌入问题的人最相关。该死,显然 StackOverflow 锁定了我的反对票,除非您的答案被编辑,否则我无法再删除它。
    • 太棒了!我可以进行编辑并要求您删除您的反对票! ...但是...不需要..让它在那里!
    • @Mathew 很多合法的 iOS 应用程序都在做这种事情(绕过 YouTube 的 API),虽然它违反了你一直指出的服务条款,但谷歌似乎并不介意很多案例,因为它可以让他们的产品吸引更多的观众。
    【解决方案6】:

    只要将 iframe 的 src 元素用于新的嵌入代码并调用就可以了

    [self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];
    

    【讨论】:

      【解决方案7】:

      检查以下链接。我想它会对你有所帮助。

      https://mobiletechfeast.blogspot.in/2014/08/youtube-player-for-ios.html

      【讨论】:

        【解决方案8】:

        Google 提供了一种在 iOS 应用程序中嵌入 YouTube 视频的官方方法。

        通过 cocoapods 安装库:pod "youtube-ios-player-helper"

        导入:#import “YTPlayerView.h” 使用UIView 并将类设置为YTPlayerView 或以编程方式创建YTPlayerView 的对象。

        加载视频:[self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

        还有playVideostopVideo 方法可用。欲了解更多信息,请访问this Link

        【讨论】:

          猜你喜欢
          • 2014-02-07
          • 2012-05-11
          • 2011-05-05
          • 2016-07-26
          • 2015-04-25
          • 1970-01-01
          • 2011-10-18
          • 1970-01-01
          • 2012-11-29
          相关资源
          最近更新 更多