【问题标题】:UIWebView YouTube Embed video not loadingUIWebView YouTube 嵌入视频未加载
【发布时间】:2014-04-02 12:20:38
【问题描述】:

我在获取通过 UIWebView 嵌入到我正在制作的 iOS 应用程序中的视频时遇到了一些问题。 iframe 播放器加载完全正常,但是当我点击播放按钮时,白色微调器出现一秒钟然后消失,只留下一个黑框如果我触摸黑框,我会得到标题和“i”按钮,但是视频永远不会开始。

我发现播放视频的唯一方法是点击右上角的“i”按钮查看信息,然后再次按下它会触发全屏播放器。我只是想不通为什么它不会在第一次按下时播放。

这是我用来创建 HTML 和嵌入 YouTube 视频的完整代码

- (void)setupHTMLString
{
    //NSData *data = [[NSData alloc] init];
    NSString *imageString = [NSData htmlForJPEGImage:[UIImage imageWithData:self.post.thumbnail]];
    NSString *htmlString = @"<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"></head><body>";
    htmlString = [htmlString stringByAppendingString:@"<div id=\"content\" style=\"width:304px\">"];
    NSString *titleString = [NSString stringWithFormat:@"<h1>%@</h1> ", self.post.title];
    NSString *authorString = [NSString stringWithFormat:@"<h3>By %@</h3>", [self returnAuthorName]];
    NSString *contentString = [NSString stringWithFormat:@"<p>%@</p>", [self createStringWithURLsFromString:self.post.content]];
    NSString *postString = [NSString stringWithFormat:@"%@ %@ %@ %@", imageString, titleString, authorString, contentString];
    htmlString = [htmlString stringByAppendingString:postString];
    htmlString = [htmlString stringByAppendingString:@"</div?></body></html>"];


NSLog(@"%@", htmlString);

// UIWebView uses baseURL to find style sheets, images, etc that you include in your HTML.
NSURL *bundleUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[self.webView loadHTMLString:htmlString baseURL:bundleUrl];

self.webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, INSETHEIGHT, 0);
self.webView.scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, INSETHEIGHT, 0);
}

- (NSString *)createStringWithURLsFromString:(NSString *)string
{
    NSString *regexToReplaceRawLinks = @"(?:https?:)?//(?:[^.]*\\.)?youtu(?:\\.be|be\\.com)(?:/|/embed/|/v/|/watch/?\?(?:.+&)?v=)([\\w-]{11})";



    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexToReplaceRawLinks
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];


    NSString *modifiedString = [regex stringByReplacingMatchesInString:string
                                                               options:0
                                                                 range:NSMakeRange(0, [string length])
                                                          withTemplate:@"<iframe class=\"youtube-player\" type=\"text/html\" width=\"320\" height=\"180\" src=\"http://www.youtube.com/embed/$1\" frameborder=\"0\"></iframe>"];


    //NSLog(@"%@", modifiedString);

    return modifiedString;
}

【问题讨论】:

标签: ios objective-c uiwebview youtube


【解决方案1】:
- (void)viewDidLoad {

[super viewDidLoad];

NSString *embedCode = @"<iframe width=\"265\" height=\"140\" src=\"http://www.youtube.com/embed/NUMBERSANDLETTERS\" frameborder=\"0\" allowfullscreen></iframe>";
[[self webview] loadHTMLString:embedCode baseURL:nil];
}

【讨论】:

    【解决方案2】:

    你不需要做任何事情。这是谷歌最近引入的一个错误。谷歌修复了这个错误,它刚刚被部署。如果您重新尝试您的代码,它应该可以工作。

    如果您有兴趣,这里是该缺陷的链接: https://code.google.com/p/gdata-issues/issues/detail?id=6061

    【讨论】:

      【解决方案3】:

      在“urlStr”中传递 YouTube 视频的 URL。

      //In .h file
      UIWebView *videoView;
      
      // In .m file
      
      videoView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 385)];
      
      [self embedYouTube :urlStr  frame:CGRectMake(0, 0, 320, 385)];
      
      [self.view addSubview:videoView];
      
      // methos to embed URL in HTML & load it to UIWebView
      
      - (void)embedYouTube:(NSString*)url frame:(CGRect)frame
      
      {
      
      NSString* embedHTML = @”\
      
      <html><head>\
      
      <style type=\”text/css\”>\
      
      body {\
      
      background-color: transparent;\
      
      color: white;\
      
      }\
      
      </style>\
      
      </head><body style=\”margin:0\”>\
      
      <embed id=\”yt\” src=\”%@\” type=\”application/x-shockwave-flash\” \
      
      width=\”%0.0f\” height=\”%0.0f\”></embed>\
      
      </body></html>”;
      
      
      
      NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];
      
      if(videoView == nil) {
      
      videoView = [[UIWebView alloc] initWithFrame:frame];
      
      [self.view addSubview:videoView];
      
      }
      
      [videoView loadHTMLString:html baseURL:nil];
      
      }
      

      注意:YouTube 视频的 UIWebView 在模拟器上运行时不会加载,可以在设备上完美运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-22
        • 2011-09-11
        • 2013-06-14
        • 2013-01-19
        • 1970-01-01
        • 2012-12-09
        • 2014-04-29
        • 2014-01-16
        相关资源
        最近更新 更多