如何在 Objective C 中以非全屏方式从浏览器应用程序播放 Youtube 视频

How to play Youtube Video from a browser app on non full screen in Objective C

我正在开发浏览器应用程序,我希望当用户在 youtube.com 上搜索任何视频时,视频正在全屏播放,但我希望视频在固定大小的小框架上打开,比如一半phone 屏幕尺寸。

我有视频 url 和视频 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 added and After tap on play button

非常感谢您的帮助。

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

中使用的 class 中定义

在您的代码中搜索问题后,我找到了一个 属性 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
要更改 width/height,您可以在 iframe

width=\"100%%\" height=\"240px\" 部分进行更改

它在 iPhone 中也为我工作,看起来像这样: iframe youtube play in iPhone 另一个参考 setAllowsInlineMediaPlayback 在 iPhone 工作:

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


更新 部分视频无法播放: 我认为这个问题与具体实现无关,因为对我来说它在浏览器中不起作用(我们在 iFrame 中设置的嵌入 Url)或 YTPlayerview 也
但直到我检查并可能发现实施中的一些问题,正如你所提到的:

Yes all videos worked on YTPlayerView. These videos work on normal full screen mode but not with embedded player

如果你想在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 或浏览器(嵌入 url)中播放此视频,但根据您的评论,您可以试试这个

@Pyro

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

Image after implementation