iOS 8中的YouTube视频嵌入

10

我正在面临一些似乎无法理解的问题。

我有这段代码,在 Xcode 5 和 iOS 7 中可以完美地运行:

- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view, typically from a nib.
  CGFloat width = self.view.frame.size.width;
  CGFloat height = self.view.frame.size.height;
  UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
  NSString* embedHTML = @"\
  <html><head><meta name=\"viewport\" content=\"width=device-width; initial-scale=1.0; user-scalable=0;\"/>\
  <style type=\"text/css\">\
    body {\
    background-color: transparent;\
   color: black;\
  }\
  </style>\
  </head><body style=\"margin:0;\">\
  <embed id=\"yt\" src=\"https://www.youtube.com/v/M7lc1UVf-VE?hd=1\" type=\"application/x-shockwave-flash\" \
  width=\"%0.0f\" height=\"%0.0f\"></embed>\
  </body></html>";
  NSString *html = [NSString stringWithFormat:embedHTML, width, height];
  [webview loadHTMLString:html baseURL:nil];
  [self.view addSubview:webview];
}

当我在Xcode 6中为iOS 8构建相同的代码时,视频显示在webview中,但太小了。

有人可以解释一下这里发生了什么,以及我如何克服这个问题吗?


为什么不使用https://github.com/0xced/XCDYouTubeKit? - thijsai
一个可能的原因是,因为这应该是一个官方应用程序,而你链接到的页面上写着:“警告:XCDYouTubeKit 违反了 YouTube 的服务条款。”但无论如何还是谢谢。 - berliner
@berliner,你有没有找到解决这个问题的方法,除了使用第三方库? - ViruMax
@ViruMax 对不起,我没能找到这种行为的解释。最终我使用了一个 iframe 来代替嵌入代码。 - berliner
@berliner 看起来那个链接现在已经失效了,你是如何解决这个问题的?你是如何使用 iFrame 而不是嵌入代码的? - Ethan Parker
显示剩余3条评论
2个回答

5
我遇到了同样的问题,我使用了以下解决方案:

https://developers.google.com/youtube/v3/guides/ios_youtube_helper

此外,在YTPlayerView.m(约在第610行)尝试进行以下更改:
[playerParams setValue:[NSString stringWithFormat: @"%0.00f", self.frame.size.height] forKey:@"height"];
// [playerParams setValue:@"100%" forKey:@"height"];
[playerParams setValue:[NSString stringWithFormat: @"%0.00f", self.frame.size.width] forKey:@"width"];
// [playerParams setValue:@"100%" forKey:@"width"];

希望这可以帮到您。

谢谢你的建议,但我更想知道是什么改变导致我的代码现在失败了。我可以自己构建一个iframe,但我更愿意了解为什么嵌入技术不再起作用,或更准确地说,为什么我不能在iOS 8中控制视频的大小。或者我该如何控制它。 - berliner
该播放器无法播放私人视频,但可以播放未列出的视频。由于此库包装了现有的 iframe 播放器,因此播放器的行为应与移动浏览器中嵌入在网页中的播放器几乎相同。 - Kirit Vaghela

3
我花了一些时间研究并找到了一个非常适合我的目的的解决方案。在我的情况下,发生的情况是iFrame使用了一些需要丢弃的填充。
另外需要注意的是,如果将youtube.com作为基本URL包含在内,它将加载得更快。
在你的storyboard中创建一个UIWebView,并将@property连接到它,然后参考下面的内容。
    CGFloat height = self.webView.frame.size.height;
    CGFloat width = self.webView.frame.size.width;
    NSString *youTubeVideoCode = @"dQw4w9WgXcQ";
    NSString *embedHTML = @"<iframe width=\"%f\" height=\"%f\" src=\"http://www.youtube.com/embed/%@\" frameborder=\"0\" style=\"margin:-8px;padding:0;\" allowfullscreen></iframe>";
    NSString *html = [NSString stringWithFormat:embedHTML, width, height, youTubeVideoCode];
    self.webView.scrollView.bounces = NO;
    [self.webView loadHTMLString:html baseURL:[NSURL URLWithString:@"http://www.youtube.com"]];

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