【问题标题】:Vimeo not running in UIWebView on iOS 9Vimeo 未在 iOS 9 上的 UIWebView 中运行
【发布时间】:2015-12-04 17:55:08
【问题描述】:

我在显示 Vimeo 视频的 UIScrollView 中嵌入了一个 UIWebView:

vimeoView = [[UIWebView alloc] init];    
NSMutableString *html = [[NSMutableString alloc] initWithCapacity:1] ;
                        [html appendString:@"<html><head>"];
                        [html appendString:@"<style type=\"text/css\">"];
                        [html appendString:@"body {"];
                        [html appendString:@"background-color: transparent;"];
                        [html appendString:@"color: white;"];
                        [html appendString:@"}"];
                        [html appendString:@"</style>"];
                        [html appendString:@"</head><body style=\"margin:0\">"];
                        [html appendString:@"<iframe src=\"https://player.vimeo.com/video/%@?title=0&byline=0&portrait=0&badge=0&loop=1\" width=\"%0.0f\" height=\"%0.0f\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>"];
                        [html appendString:@"</body></html>"];

                        NSString *htmlString = [NSString stringWithFormat:html, videoID, vimeoView.frame.size.width, vimeoView.frame.size.height];

                        [vimeoView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"https://vimeo.com"]];

此代码使用 Xcode 7 编译并通过 App Store 分发(当然是在 beta 模式下)。该应用在 iOS 8 上运行良好,但在 iOS 9 上,它在启动全屏后在 0 秒处挂起。

有人在 iOS 9 上运行它吗?我想避免使用 HTTPS 开关的异常(或者至少对指定的服务器使用一个狭窄的异常)。 FWIW, NSAllowsArbitraryLoads = YES 无论如何都不能解决这个问题。

【问题讨论】:

  • 我也遇到过类似的问题,NSAllowsArbitraryLoads也不好用,不过我通过给baseURL传nil暂时解决了,你可以试试吗?
  • 我在尝试在 iOS9 上播放 Vimeo 视频时遇到了同样的问题 - Vimeo 显示消息“Blast!此视频无法以您当前的设置播放。”视频在 iOS7 和 iOS8 上一直播放没有问题。仅供参考,我已经将 'nil' 传递给 baseURL: 参数,它正在生成这个结果。
  • @DerekLee 看起来你遇到了我遇到的问题。这似乎是 Vimeo 的旧 CDN 的问题。在您的应用中尝试此视频:vimeo.com/139107494。那个视频对我有用。然后,您可以询问 Vimeo 他们是否会将您的视频移动到他们的新 CDN。他们从未回复我关于何时移动所有视频。
  • 谢谢@Richard!我尝试了您建议的新 CDN 上的视频,它的行为与我拥有的其他视频一样:按下播放按钮显示进度指示器动画,好像视频正在加载,但它从不播放。但是如果我按下暂停,然后再次播放,它确实开始播放。我的视频似乎在做同样的事情——它们第一次不播放,但在按下按钮 2-3 次后它们确实开始播放。总比完全不工作要好,但仍然不是预期的用户体验。

标签: uiwebview vimeo ios9


【解决方案1】:

这是我从 Vimeo 支持部门收到的回复:

我们正在 CDN 之间迁移,所以我很好奇这是否与您所看到的有关。

例如,您可以试试这个视频:https://vimeo.com/76979871,它位于我们较旧的 CDN 上;

还有这个视频:https://vimeo.com/139107494,位于我们较新的 CDN 上。

对我来说,这是因为新 CDN 上的视频在我的应用程序中运行良好,而旧 CDN 上的视频却不行。但是,我还没有收到关于是否/何时将旧 CDN 视频迁移到新 CDN 的消息。

----- 从 Vimeo 支持更新 9/22:

iOS 9 中的 Webview 不会通过安全连接 (HTTPS) 加载不安全的内容 (HTTP)。在播放托管在我们较旧的 CDN 上的较旧视频时,某些内容仍通过 HTTP 提供。最近上传的视频的所有资产都通过 HTTPS 提供,并且可以在 iOS 9 网络视图中正常播放。

您的应用是否仅显示来自您的 Vimeo 帐户的视频,还是也显示来自其他人的视频?如果您只在应用中使用自己的视频,我建议您再次上传这些视频;它们应该会自动转到我们较新的 CDN,所有资产都通过 HTTPS 提供。

我们正在将视频从旧的 CDN 转移到新的 CDN 上,但没有公开的时间框架说明这需要多长时间。

【讨论】:

  • 我几天前在 Vimeo 论坛上打开了一个关于此的主题 (vimeo.com/forums/help/topic:277009#comment_13777904),刚刚收到一位工作人员的回复:“这是因为没有提供实际的视频片段安全。不幸的是,iOS 9 不会在安全上加载任何不安全的东西。这是我们目前仍在测试的问题,希望在不久的将来解决它。”
【解决方案2】:

你可以试试这样的:

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    NSURLRequest* request = [webView request];
    NSString *host = [request.URL host];

    if ([host isEqualToString:@"player.vimeo.com"]){
        NSString *js = @"document.querySelector('.play').click();";
        [self.webView stringByEvaluatingJavaScriptFromString:js];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多