2

我目前iOS-youtube-player-helper在我们的应用程序中使用库。有一个视图控制器,YTPlayerView其纵横比为 16:9,这意味着它只占用屏幕的一部分。视频以媒体加载,无论如何,我无法让它以 720P 或 1080P 播放。我确信这些品质是可用的,这只是YTPlayerView基于视频播放器高度的强制品质。因为这是一个库而不是直接嵌入 iframe,所以我不能使用“vq”参数(在 playerVars 中指定 vq 似乎不起作用),并且将质量设置为小然后再更改它也不起作用(参考这个问题在 GitHub 上

现在,考虑到YTPlayerView由于 UI 设计问题,我无法填满整个屏幕。那么,是否可以强制YTPlayerView至少以 720P 播放?(解决方法,更改库代码,...)

因为这是一个将在 App Store 上架的应用程序(当然我们也不希望与 google 发生任何法律纠纷),请不要建议使用违反 Youtube ToC 的库,例如XCDYouTubeKit

非常感谢

4

1 回答 1

2

我找到了一种解决方法,这对我来说效果很好。

首先,问题取决于webView内部构造的大小YTPlayerView。例如,如果您有一个 320x200 的 playerView,尝试将您的视频强制为 720hd 不起作用,因为 iFrame youtube 播放器类会根据您的播放器大小重新切换到更好的分辨率(在这种情况下质量很小,因为您有 320x200)。

你可以看到这个解释这个问题的答案。

YTPlayerView类导入项目后,您有两个文件:YTPlayerView.hYTPlayerView.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 上进行了测试,它可以工作。让我知道。

于 2017-07-29T10:13:01.567 回答