如何在Objective C中的非全屏幕上从浏览器应用程序播放Youtube视频

时间:2016-03-25 22:05:58

标签: ios objective-c youtube-iframe-api ytplayerview

我正在使用浏览器应用程序,我想当用户在youtube.com上搜索任何视频时,视频正在全屏播放,但我希望视频在固定大小的小框架上打开,Say Half of phone screen size。

我有视频网址和视频ID。我已经集成了YOUTube API,但只要我在youtube播放器上点按播放按钮就会全屏播放。

请找到集成的代码库

self.playerView = [[YTPlayerView alloc]init];
self.playerView.frame = webView.frame;
[self.playerView loadWithVideoId:str];

[webView.superview addSubview:self.playerView];

请找截图 When youtube player is addedAfter tap on play button

非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

您的项目是否具有名为MainViewController的控制器,该控制器应该与YTPlayerView有问题,请在您的视图控制器中检查此视图。
在大多数情况下,它不会在您在代码中直接使用的类中定义

在您的代码中搜索问题我找到了一个UIWebview属性,它可以帮助您在线播放视频setAllowsInlineMediaPlayback

借助此功能,您可以直接在网页浏览中播放YouTube视频, 以下是可用于播放YouTube视频的代码示例

 NSString *strVideoId = @"M7lc1UVf-VE";
 NSString *videoURL = [NSString stringWithFormat:@"https://www.youtube.com/embed/%@?feature=player_detailpage&playsinline=1",strVideoId];

 NSString* embedHTML = [NSString stringWithFormat:@"\
                           <html><head>\
                           <style type=\"text/css\">\
                           iframe {position:absolute; top:50%%; margin-top:-130px;}\
                           body {\
                           background-color: transparent;\
                           color: white;\
                           }\
                           </style>\
                           </head><body style=\"margin:0\">\
                           <iframe width=\"100%%\" height=\"240px\" src=\"%@\" frameborder=\"0\"></iframe>\
                           </body></html>",videoURL];

[self.mainwebview setAllowsInlineMediaPlayback:true];
[self.view addSubview:self.mainwebview];
[self.mainwebview loadHTMLString:embedHTML baseURL:nil];

在此代码中,您可以传递您在YTPlayerView的loadWithVideoId中传递的任何视频ID 要更改宽度/高度,您可以在iframe的width=\"100%%\" height=\"240px\"部分进行更改

它也适用于iPhone,看起来像这样: iframe youtube play in iPhone 另一个参考setAllowsInlineMediaPlayback在iPhone中工作:https://stackoverflow.com/a/15189889/4557505

屏幕截图中显示的图像看起来像是特定的视频问题 注意此代码不需要YTPlayerView,因此,如果此代码适用于您,则可以从项目中移除YTPlayerView(如果在其他任何地方未使用此代码)

更新某些视频未播放: 我认为这个问题与具体实现没有任何关系,因为我没有在浏览器中工作(我们在iFrame中设置的嵌入式Url)或者YTPlayerview也是如此 但是直到我检查并且可能在实施中找到一些问题并且正如您所提到的那样:

  

是的,所有视频都在YTPlayerView上运行。这些视频正常工作   全屏模式但不包含嵌入式播放器

如果您想在YTPlayerview中进行实施,可以查看以下代码:

NSString *strVideoId = @"3bMYgo_S0Kc";
self.playerView = [[YTPlayerView alloc]init];
self.playerView.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height/2);
[self.playerView loadWithVideoId:strVideoId playerVars:@{@"playsinline":@1}];
[_mainwebview addSubview:self.playerView];
[self.mainwebview setAllowsInlineMediaPlayback:true];
[self.view addSubview:self.mainwebview];

loadWithVideoId我们可以提供内联参数,可以解决全屏问题,这也可能适用于iPhone上的

注意此视频无法在我的YTPlayer或浏览器(嵌入式网址)中使用,但根据您的评论,您可以尝试使用

答案 1 :(得分:1)

@Pyro

setAllowsInlineMediaPlayback仅适用于ipad,我已启用它。现在确实有效,不允许播放视频。

Image after implementation