我目前在我们的应用程序中使用iOS-youtube-player-helper
库。有一个 View Controller ,其YTPlayerView
的纵横比为16:9,这意味着它仅占用屏幕的一部分。视频以中等大小加载,无论如何,我都无法以720P或1080P播放。我敢肯定,这些质量是可以实现的,只是YTPlayerView
强制基于视频播放器高度的质量。因为这是一个库,而不是直接嵌入iframe,所以我不能使用“vq”参数(在playerVars中指定vq似乎不起作用),并且将质量设置为较小然后再更改它也不起作用(请参阅this issue on GitHub)
现在,考虑到由于UI设计问题而无法使YTPlayerView
填满整个屏幕的因素。那么,是否可以迫使YTPlayerView
至少以720P播放? (解决方法,更改库代码,...)
因为这是一个将在App Store上发布的应用程序(当然,我们也不想与Google发生任何法律纠纷),所以请不要建议使用与YouTube ToC违背的库,例如XCDYouTubeKit
非常感谢
最佳答案
我找到了一种解决方法,这对我来说很好。
首先,问题取决于webView
内部构造的YTPlayerView
大小。例如,如果您有一个320x200的playerView,请尝试将视频强行设置为720h,因为iFrame youtube播放器类会根据您的播放器大小重新切换为更好的分辨率(在这种情况下,质量较低,因为您拥有320x200)。
您可以看到此SO answer来解释此问题。
将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原始播放器的人有所帮助。
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:
正如Edward所评论的那样,iPad上存在一个小问题,这是因为这些设备似乎未应用
scalesPageToFit
。目的是检查设备是否为iPad,然后缩放(缩小)scrollView
以承载小的 View 范围。我已经在iPad air上进行了测试,并且可以正常工作。让我知道。