iOS YTPlayerView force视频质量

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似乎不起作用),并且将质量设置为较小然后稍后更改也不起作用(

我目前正在应用程序中使用iOS youtube player helper库。有一个视图控制器,具有纵横比为16:9的
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设备不能正确缩放内容,让我花点时间考虑一个合理的解决方法,手动应用此缩放。。