2013-04-08 24 views
15

używam tego kodu, aby odtwarzać filmy z YouTube na iOSJak umieścić film z YouTube na iOS i odtwarzać je bezpośrednio na UIWebView bez pełnego ekranu

- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame 
{ 
NSString *htmlString = [NSString stringWithFormat:@"<html><head><meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = yes, width = 320\"/></head><body style=\"background:#00;margin-top:0px;margin-left:0px\"><div><object width=\"320\" height=\"180\"><param name=\"movie\" value=\"http://www.youtube.com/v/%@&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/v/%@&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"320\" height=\"180\"></embed></object></div></body></html>", urlString, urlString]; 

UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame]; 
[videoView loadHTMLString:htmlString baseURL:nil]; 
[self.view addSubview:videoView]; 
[videoView release]; 

} 

To działa jak uroku, ale chcę innego zachowania. Teraz miniaturka wideo pojawia się w widoku internetowym (fajnie!), Ale po dotknięciu ikony odtwarzania otwiera się na pełnym ekranie. Potrzebuję tego odtwarzania w tym samym oknie, ponieważ muszę pokazać więcej rzeczy.

Dowolna wskazówka, jak to zrobić? Thansk z wyprzedzeniem

Odpowiedz

27

Jeśli ktoś nadal stoi w obliczu tego problemu, poniżej jest zdecydowanie najlepszym rozwiązaniem, jakie widziałem. Działa jak marzenie.

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]]; 

Źródło: https://code.google.com/p/gdata-issues/issues/detail?id=5204

+1

jakikolwiek sposób ominąć faktu, że licencjonowany teledyski nie są w stanie być odtwarzane? – user3781236

+0

możesz dodać odpowiedź w szybkim tempie? – huddie96

+0

Czy można użyć NSString zamiast @ "wideo osadzonego" bezpośrednio? Mam na myśli NSString z innego widoku, na przykład z plist? – Markus

0

w Swift:

let webView = UIWebView(frame:CGRectMake(10, 10,300, 200)) 
    webView.allowsInlineMediaPlayback = true 
    webView.mediaPlaybackRequiresUserAction = false 
    self.view.addSubview(self.webView) 

    let embedHTML = "<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='300' height='200' src='http://www.youtube.com/embed/JW5meKfy323?enablejsapi=1&rel=0&playsinline=1&autoplay=1' frameborder='0'>" 
    "  </body>" 
    "</html>" 
    webView.loadHTMLString(embedHTML, baseURL:NSBundle.mainBundle().resourceURL!) 
Powiązane problemy