如何在iOS上嵌入YouTube视频并在UIWebView上直接播放,而不是全屏播放?

15

我正在使用这段代码在iOS上播放YouTube视频

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

它工作得很好,但我想要不同的行为。现在,视频的缩略图会出现在Web视图上(不错!),但当我点击播放图标时,它会在全屏中打开。我需要播放在同一窗口中完成,因为我需要显示更多内容。

有什么办法可以做到这一点吗?提前感谢。

2个回答

28
如果仍然面临这个问题,下面是我看到迄今为止最好的解决方案。效果非常好。
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

这个问题由于Google将其OAuth2服务升级到JSON Web令牌(JWT)而引起。您需要更新使用了此API的应用程序,以便它们能够处理JWT。

1
有没有什么办法可以绕过授权音乐视频无法播放的限制? - user3781236
你能用 Swift 添加一个答案吗? - huddie96
能否直接使用另一个视图中的NSString,如从plist中获取,而不是直接使用@"embed video"? - Markus
1
能否从 Web 视图的顶部移除视频链接? - Alok
@Kesava 很棒的回答。我该如何使用我的UIButtons处理Player Controls上的轻击? - Sushil Sharma

0
在 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!)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接