iOS YTPlayerView force视频质量
我目前正在应用程序中使用iOS youtube player helper库。有一个视图控制器,具有纵横比为16:9的iOS YTPlayerView force视频质量,ios,youtube,youtube-iframe-api,ytplayerview,Ios,Youtube,Youtube Iframe Api,Ytplayerview,我目前正在应用程序中使用iOS youtube player helper库。有一个视图控制器,具有纵横比为16:9的YTPlayerView,这意味着它只占据屏幕的一部分。这段视频是以中等速度加载的,无论怎样,我都无法让它以720P或1080P播放。我确信这些质量是可用的,只是YTPlayerView强制基于视频播放器高度的质量。因为这是一个库,而不是直接的iframe嵌入,所以我不能使用“vq”参数(在playerVars中指定vq似乎不起作用),并且将质量设置为较小然后稍后更改也不起作用(
YTPlayerView
,这意味着它只占据屏幕的一部分。这段视频是以中等速度加载的,无论怎样,我都无法让它以720P或1080P播放。我确信这些质量是可用的,只是YTPlayerView
强制基于视频播放器高度的质量。因为这是一个库,而不是直接的iframe嵌入,所以我不能使用“vq”参数(在playerVars中指定vq似乎不起作用),并且将质量设置为较小然后稍后更改也不起作用(请参阅)
现在,由于UI设计问题,我无法让YTPlayerView
填满整个屏幕。那么,是否可以强制Y播放视图以至少720P播放?(解决方法,更改库代码,…)
因为这是一个将出现在app Store上的应用程序(当然我们也不希望与谷歌发生任何法律纠纷),所以请不要建议使用与Youtube ToC相抵触的库,例如XCDYouTubeKit
非常感谢我找到了一个解决方法,这对我来说非常有效 首先,问题取决于
YTPlayerView
内部构建的webView
大小。例如,如果您有一个320x200的playerView,请尝试强制您的视频为720hd,因为iFrame youtube player类会根据您的播放器大小重新切换到更好的分辨率(在本例中,由于您有320x200,所以质量较低)
你可以看到这一点来解释这个问题
将YTPlayerView
类导入项目后,您有两个文件:YTPlayerView.h
和YTPlayerView.m
YTPlayerView.m(更新以在iPad上也能工作)
我更改了webview初始化为自定义大小(4k分辨率)的函数,并在最后一部分添加了缩放内容和恢复原始帧的可能性,如下所示:
- (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.:我所有的尝试都是通过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上进行了测试,它可以正常工作。让我知道。谢谢。我明天会试试。这个解决方案似乎只适用于iPhone,还有什么方法可以让它也适用于iPad吗?@Edward你有绝对的理由:谢谢你的报告,我已经更正了这个功能,可以在iPad上使用。谢谢,这个新代码在iPad上也可以使用。但是,我遇到了一个问题,YTPlayerView的webView超出了YTPlayerView的范围。在我的例子中,当我检查界面时,我可以看到YTPlayerView的高度是768,宽度是432,而底层的webView是2160和4096。如果我设置了YTPlayerView的clipToBounds,那么webview将被剪切,否则,我的整个屏幕将被填充。有没有什么我可能遗漏的,比如约束之类的?顺便说一句,我正在ios 9.0和9.3Seems
scalesPageToFit
上测试这一点。如果iPad设备不能正确缩放内容,让我花点时间考虑一个合理的解决方法,手动应用此缩放。。