我找到了一个解决方法,这对我来说很有效。
首先,问题取决于webView
内部构造的尺寸YTPlayerView
。例如,如果您有 320x200 的播放器视图,尝试将视频强制为 720hd 是行不通的,因为 iFrame youtube 播放器类会根据您的播放器尺寸重新切换到更好的分辨率(在本例中质量较小,因为您有 320x200)。
你可以看到这个所以答案 https://stackoverflow.com/a/38461111/1894067就解释了这个问题。
当您导入了YTPlayerView
类到您的项目您有两个文件:YTPlayerView.h
and 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 原始播放器的人有所帮助。
P.S.:我所有的尝试都是通过一个快速项目和以下变量完成的:
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:
正如爱德华在评论中所报道的,iPad 上有一个小问题,那是因为这些设备似乎不适用scalesPageToFit
。目标是检查设备是否是 iPad,然后缩放(缩小)scrollView
托管小视图边界。
我已经在 iPad Air 上进行了测试,效果很好。让我知道。