我找到了一种解决方法,这对我来说效果很好。
首先,问题取决于webView
内部构造的大小YTPlayerView
。例如,如果您有一个 320x200 的 playerView,尝试将您的视频强制为 720hd 不起作用,因为 iFrame youtube 播放器类会根据您的播放器大小重新切换到更好的分辨率(在这种情况下质量很小,因为您有 320x200)。
你可以看到这个解释这个问题的答案。
将YTPlayerView
类导入项目后,您有两个文件:YTPlayerView.h
和YTPlayerView.m
YTPlayerView.m(更新后也可以在 iPad 上使用)
我已经更改了使用自定义大小(4k 分辨率)初始化 webview 的功能,并在最后一部分添加了缩放内容和恢复原始帧的可能性,如下所示:
- (UIWebView *)createNewWebView {
CGRect frame = CGRectMake(0.0, 0.0, 4096.0, 2160.0); //4k resolution
UIWebView *webView = [[UIWebView alloc] initWithFrame:frame];
//UIWebView *webView = [[UIWebView alloc] initWithFrame:self.bounds];
webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
webView.scrollView.scrollEnabled = NO;
webView.scrollView.bounces = NO;
if ([self.delegate respondsToSelector:@selector(playerViewPreferredWebViewBackgroundColor:)]) {
webView.backgroundColor = [self.delegate playerViewPreferredWebViewBackgroundColor:self];
if (webView.backgroundColor == [UIColor clearColor]) {
webView.opaque = NO;
}
}
webView.scalesPageToFit = YES;
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
CGSize contentSize = webView.scrollView.contentSize;
CGSize viewSize = self.bounds.size;
float scale = viewSize.width / contentSize.width;
webView.scrollView.minimumZoomScale = scale;
webView.scrollView.maximumZoomScale = scale;
webView.scrollView.zoomScale = scale;
// center webView after scaling..
[webView setFrame:CGRectMake(0.0, self.frame.origin.y/3, 4096.0, 2160.0)];
} else {
webView.frame = self.bounds;
}
[webView reload];
return webView;
}
希望这对尝试在他的项目中使用 Youtube 原始播放器的人有所帮助。
PS:我所有的尝试都是用一个 swift 项目和以下变量完成的:
var playerVars:Dictionary =
["playsinline":"1",
"autoplay":"1",
"modestbranding":"1",
"rel":"0",
"controls":"0",
"fs":"0",
"origin":"https://www.example.com",
"enablejsapi":"1",
"iv_load_policy":"3",
"showinfo":"0"]
使用功能:
self.playerView.load(withVideoId: "Rk6_hdRtJOE", playerVars: self.playerVars)
以及以下强制解决方法:
self.playerView.loadVideo(byId: "Rk6_hdRtJOE", startSeconds: 0.0, suggestedQuality: YTPlaybackQuality.HD720)
关于 iPad:
正如 Edward 在评论中所报告的那样,iPad 上存在一个小问题,那是因为这些设备似乎不适用scalesPageToFit
。目标是检查设备是否是 iPad,然后缩放(缩小)scrollView
以托管小视图边界。我已经在我的 iPad air 上进行了测试,它可以工作。让我知道。