【问题标题】:iOS YTPlayerView force video qualityiOS YTPlayerView 强制视频质量
【发布时间】:2017-05-19 14:57:09
【问题描述】:

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

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

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

非常感谢

【问题讨论】:

    标签: ios youtube youtube-iframe-api ytplayerview


    【解决方案1】:

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

    首先,问题取决于YTPlayerView 内部构造的webView 大小。例如,如果您有一个 320x200 的 playerView,尝试将您的视频强制为 720hd 不起作用,因为 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.:我所有的尝试都是使用 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 在 cmets 中报告的那样,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.3 上测试这个
    • 似乎 scalesPageToFit 无法使用 iPad 设备正确缩放内容,让我有时间考虑一个合理的解决方法来手动应用此缩放。..
    猜你喜欢
    • 2015-08-13
    • 2015-07-09
    • 2011-05-22
    • 2021-09-08
    • 1970-01-01
    • 2011-11-03
    • 2015-05-28
    • 2018-04-14
    • 1970-01-01
    相关资源
    最近更新 更多