2011-02-28 64 views
6

我试图将youtube视频嵌入到我的iphone应用中。我正在使用UIWebView并将来自youtube的嵌入代码加载为html字符串。所以我有一个基本的HTML标记布局,我把这个代码放在那里。将youtube.com的视频嵌入iphone应用

<embed id="yt" src="http://www.youtube.com/watch?v=L9szn1QQfas&fs=0" type="application/x-shockwave-flash" width="%width%" height="%height%"></embed> 

问题是视频总是以全屏模式打开。我已将我的webview属性allowInlineMediaPlayback更改为YES _webview.allowsInlineMediaPlayback = YES;,但它不起作用。有没有一种方法可以播放YouTube上没有全屏的视频?

我也试图嵌入这样

<iframe title="YouTube video player" id="videoframe" width="%width%" height="%height%" src="http://www.youtube.com/embed/L9szn1QQfas?rel=0" frameborder="0"></iframe> 

<object type="application/x-shockwave-flash" data="http://www.youtube.com/v/L9szn1QQfas" width="%width%" height="%height%"> 
<param name="movie" value="http://www.youtube.com/v/L9szn1QQfas" /> 
<param name="quality" value="high" /> 
<param name="allowFullScreen" value="false" /> 
<embed id="yt" src="http://www.youtube.com/v/L9szn1QQfas" type="application/x-shockwave-flash" width="%width%" height="%height%"></embed> 
</object> 

感谢。

回答

10

据我所知,内联媒体播放只支持iPad,而不支持iPhone。这是由于屏幕尺寸的限制。

编辑:

我建立一个测试项目,具有UIWebView和代码:

[webView setAllowsInlineMediaPlayback:YES]; 
[webView loadHTMLString:@"<embed id=\"yt\" src=\"http://www.youtube.com/watch?v=L9szn1QQfas&fs=0\" type=\"application/x-shockwave-flash\" width=\"300\" height=\"300\"></embed>" 
        baseURL:nil]; 

我跑既是一个iPhone和iPad的完全相同的代码,都运行的iOS 4.2.1 。

结果是,iPhone只能以全屏模式播放视频,无论将内联媒体播放设置为YES,并且iPad以串联方式播放视频。这里有一个画面:

enter image description here

+0

感谢您的回答。我已经考虑过了,但在官方文档中找不到这些信息。关于参数allowInlineMediaPlayback只有一个注释,它在iPhone中默认设置为NO。 – 2011-02-28 16:35:08

+2

是的,你是对的 - 这就是为什么我可能是错的。不过,我确实记得,当iPad启动时,只有iPad支持内嵌播放......这可能随着iPhone 4,视网膜显示器和iOS 4的发布而改变。我会掀起一个测试项目来看看。 – Jasarien 2011-02-28 16:41:28

+0

那会很棒。谢谢。我已经在iphone 4上测试了我的应用程序,但没有成功。视频在点按后以全屏模式播放。 – 2011-02-28 16:46:10

4

播放YouTube视频嵌入在iPhone上为好。 你需要在一个UIWebView

webView.allowsInlineMediaPlayaback=YES; 

设置属性而你需要& playsinline添加= 1到YouTube的iframe嵌入代码。

<iframe webkit-playsinline width=\"200\" height=\"200\" src=\"https://www.youtube.com/embed/GOiIxqcbzyM?feature=player_detailpage&playsinline=1\" frameborder=\"0\"></iframe> 

在运行iOS 6.1.2的iPhone 4S上测试的效果就像一个魅力。

+0

你能发布完整的代码吗?不知何故,这不适用于我在iOS7 – Cutetare 2014-08-01 09:03:49

10

现在有一个无证参数“playsinline”。我已经在iPhone 4S(iOS 6.1.2)上测试过它。

player = new YT.Player('player', { 
    height: '390', 
    width: '640', 
    videoId: 'u1zgFlCw8Aw', 
    playerVars: { 
     'playsinline': 1 
    } 
}); 

而且你应该设置webview。

[webView setAllowsInlineMediaPlayback:YES]; 
+0

似乎是由谷歌从我看到的正式记录。这个答案将解决原来的问题。 – 2013-03-21 23:36:20

+0

@MarcCharbonneau由gdata的一个项目成员仅“记录”[这里](https://code.google.com/p/gdata-issues/issues/detail?id=3007#c2)。 – iForests 2013-03-22 03:53:55

5

如果有人仍然面临这个问题,下面是迄今为止我所见过的最好的解决方案。工程就像一个魅力

 self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10,300, 200)]; 
     [self.webView setAllowsInlineMediaPlayback:YES]; 
     [self.webView setMediaPlaybackRequiresUserAction:NO]; 

     [self.view addSubview:self.webView]; 

     NSString* embedHTML = [NSString stringWithFormat:@"\ 
           <html>\ 
            <body style='margin:0px;padding:0px;'>\ 
             <script type='text/javascript' src='http://www.youtube.com/iframe_api'></script>\ 
             <script type='text/javascript'>\ 
              function onYouTubeIframeAPIReady()\ 
              {\ 
               ytplayer=new YT.Player('playerId',{events:{onReady:onPlayerReady}})\ 
              }\ 
              function onPlayerReady(a)\ 
              { \ 
               a.target.playVideo(); \ 
              }\ 
             </script>\ 
             <iframe id='playerId' type='text/html' width='%d' height='%d' src='http://www.youtube.com/embed/%@?enablejsapi=1&rel=0&playsinline=1&autoplay=1' frameborder='0'>\ 
            </body>\ 
           </html>", 300, 200, @"JW5meKfy3fY"]; 
     [self.webView loadHTMLString:embedHTML baseURL:[[NSBundle mainBundle] resourceURL]]; 

来源:https://code.google.com/p/gdata-issues/issues/detail?id=5204

+0

这应该被标记为接受的回应。测试IOS7。我建议的唯一方法是在故事板中创建webview,并在属性检查器中设置属性setAllowsInlineMediaPlayback = YES和setMediaPlaybackRequiresUserAction = NO。 – 2014-06-01 01:37:17

+0

我认为enablejsapi = 0而不是enablejsapi = 1 .... – 2014-09-15 13:32:51

+0

你能指导我,如果我从数组中添加网址,我该如何实现这一目标? – Shivaay 2015-02-05 19:32:54