2011-02-28 58 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