ios - 如何在 iOS 中播放 youtube 视频?

标签 ios objective-c uiwebview youtube video-player

我想在我的 iOS 应用程序中播放 youtube 视频,我看到有很多选项,如嵌入视频和所有在 UIWebview 中。但我希望它像播放器一样。当我点击按钮时它会打开新页面,视频应该会播放。

我什至在谷歌搜索然后我听说了这个控件

“XCDYouTubeVideoPlayerViewController-master” 当我将其集成到我的项目中时

喜欢

在我的 youtube.m 文件中

viewdidAppear() 中我添加了这段代码

XCDYouTubeVideoPlayerViewController *videoPlayerViewController = [[XCDYouTubeVideoPlayerViewController alloc] initWithVideoIdentifier:@"9bZkp7q19f0"];
[self presentMoviePlayerViewControllerAnimated:videoPlayerViewController];

然后它打开一个视频播放器,几秒钟后视频播放器关闭。它没有播放任何东西。

当我尝试嵌入视频时

 webView.frame=CGRectMake(0,0,self.view.frame.size.width, self.view.frame.size.height);
    NSLog(@"%@",sharedManager.trailerLink);
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:sharedManager.trailerLink]]];

我得到一个类似 youtube 移动网站的窗口,请检查图像。我只想在我的屏幕上显示一个视频。 enter image description here 请帮助我

最佳答案

无法使用与 MPMoviePlayer 对象相同的控件加载 youtube 视频,但您可以使用 YouTubes iFrame-API 跳过加载相关内容。

要在 UIWebview 中加载视频,请使用此助手:

- (NSString*)youTubeHTMLFromURL:(NSURL*)url
{
  NSError *error = NULL;
  NSRegularExpression *regex =
  [NSRegularExpression regularExpressionWithPattern:@"(?<=v(=|/))([-a-zA-Z0-9_]+)|(?<=youtu.be/)([-a-zA-Z0-9_]+)"
                                            options:NSRegularExpressionCaseInsensitive
                                              error:&error];

  NSTextCheckingResult *match = [regex firstMatchInString:url
                                                  options:0
                                                    range:NSMakeRange(0, [url length])];
  if (match) {
    NSRange videoIDRange = [match rangeAtIndex:0];
    NSString *videoId = [url substringWithRange:videoIDRange];
    NSString *html = [NSString stringWithFormat:@"<!DOCTYPE html>\
                      <html>\
                      <head>\
                      <style type='text/css' media='screen'>\
                      body, p{\
                      margin: 0px;\
                      }\
                      #player {\
                      width: 100%%;\
                      }\
                      </style>\
                      </head>\
                      <body><div id='player'></div>\
                      <script type='text/javascript'>\
                      var tag = document.createElement('script');\
                      tag.src = 'https://www.youtube.com/iframe_api';\
                      var firstScriptTag = document.getElementsByTagName('script')[0];\
                      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\
                      \
                      var player;\
                      function onYouTubeIframeAPIReady() {\
                      player = new YT.Player('player', {\
                      height: '390',\
                      width: '640',\
                      videoId: '%@',\
                      events: {\
                      'onReady': onPlayerReady,\
                      }\
                      });\
                      }\
                      \
                      function onPlayerReady(event) {\
                      event.target.playVideo();\
                      }\
                      \
                      </script>\
                      </body>\
                      </html>", videoId];
    return html;
  }


  return nil;
}

关于ios - 如何在 iOS 中播放 youtube 视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21276728/

相关文章:

objective-c - NSPopUpButton、绑定(bind)和缩短的生命周期

iOS:在 UIWebView 中显示 WebP 图片

ios - NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)

ios - NSFetch请求 : Return dictionary with nested arrays of dictionaries

ios - 旧版 ObjC/Swift 代码库使 `swift_checkMetadataState` : how to disentangle app/test targets? 中的测试崩溃

ios - 我在为 ios 构建 expo 应用程序时遇到错误

ios - iTunnesConnect 中的应用名称

ios - 找出您来自哪个 View Controller

objective-c - 从核心数据和多线程中获取数据时的效率

iPhone UIWebView : loadData does not work with certain types (Excel, MSWord、PPT、RTF)