使用MPMoviePlayerController而不是UIWebView播放YouTube视频


89

我正在尝试使用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秒后关闭。
jmurphy,2009年

Answers:


78

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

不幸的是,MPMoviePlayerController由于youtube不会公开指向视频文件的直接链接,因此无法直接播放youtube视频。


1
是的,那是在您的应用中播放YouTube视频的唯一方法。花了2个钱寻找替代品。质量也很差。
samvermette,2009年

超过2年后,还有其他方法吗?
布(fabb)2012年

如果播放嵌入的youtube视频,是否有可能获得PlaybackFinishReason和PlaybackState通知?
罗西特(Roshit)2012年

7
这不是唯一的方法。您可以从Youtube获取mp4文件。我是在AirPlayer Python项目中执行此操作的,该项目使您可以在AppleTV上播放youtube视频。我将移植它并在我当前的iOS项目中使用它,并在代码准备就绪时在此处发布代码。
hellozimi 2012年

7
不幸的是,禁止使用直接链接。第II / 10节。在developers.google.com/youtube/terms中:“您的API客户端将不会通过使用YouTube播放器或YouTube明确授权的其他视频播放器以外的任何其他方式访问任何YouTube视听内容的任何部分;”
勒夫斯蒂

26

如果使用代码:

- (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];  
  }

资源:

只需参考此链接

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


23

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

您可以在此处检查源并将其分叉。

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

希望对您有所帮助!
干杯


1
谢谢!顺便说一句,这些更新解决了YouTube最近的更改问题。
彼得·德威斯

1
YouTube的服务条款不允许这样做。使用它需要您自担风险,因为如果YouTube通知您未遵循ToS或YouTube更改了它生成的嵌入代码,则您的应用可能随时会停止运行。
Mathew

13

我偶然发现了一个能够将YouTube视频放到电脑里的人MPMoviePlayerController。现在看来确实可行。

LBYouTubeView


@感谢其工作正常,但当我使用[mpplayer stop]时;停止播放此视频,然后视频正在运行。但是我想停止播放视频
Jaspreet Singh's

github链接还在后台播放音频吗?
Khalid Usman 2013年

2

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

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

看到:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

尝试一下,这样就可以MPMoviePlayer像其他任何视频一样直接加载和播放youtube视频,这也是一种很好的方法。

编辑:确保在项目中使用此文件之前先通读Readme.md


2
不幸的是,针对YouTube的服务条款。如果这样做,您只能期望您的应用在不知道您正在做什么的情况下才能正常工作。
Mathew

不久前,我还通过电子邮件向YouTube API专家发送了电子邮件,问我是否可以自己解析视频URL?这是我得到的答复的引文:“支持的唯一机制是内嵌iframe。除了为功能手机提供的低分辨率RTSP流以外,我们的ToS不支持原始流访问”
Mathew

1
您已经说服了我;我同意它应该是一种标记错误的工具,并且赞成就足以表明我认为这些答案中的哪些与尝试解决YouTube嵌入问题的人们最相关。该死,显然,StackOverflow锁定了我的票证,除非您的答案得到编辑,否则我将无法删除它。
Mathew

大!我可以进行编辑,然后要求您删除您的弃权票!...但是...不需要...让它在那里!
DD_

@Mathew许多合法的iOS应用程序都在做这种事情(绕过YouTube的API),尽管您已经指出它违反了ToS,但在很多情况下Google并不介意,因为它允许其产品到达更多的观众。
rmp251

1

就像将iframe的src元素用于新的嵌入代码并调用一样简单

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


0

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

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

import by:以编程方式#import “YTPlayerView.h” 使用UIView类并设置类YTPlayerView或创建对象YTPlayerView

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

还有playVideostopVideo方法可用。欲了解更多信息,请访问 此链接

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.