首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS YTPlayerView强制视频质量

iOS YTPlayerView强制视频质量
EN

Stack Overflow用户
提问于 2017-01-05 06:40:34
回答 1查看 2.4K关注 0票数 2

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

现在,考虑到我不能让YTPlayerView填充整个屏幕的因素,因为UI设计问题。那么,是否有可能强迫YTPlayerView在至少720 p内播放?(变通办法,更改库代码,.)

因为这是一个应用程序,将在应用商店(当然,我们也不想与谷歌有任何法律纠纷),请不要建议使用库是反对Youtube ToC,如XCDYouTubeKit

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 10:13:01

我找到了一个解决办法,这对我来说很好。

首先,问题取决于在webView中构造的YTPlayerView大小。例如,如果您有一个320x200 playerView,尝试强迫您的视频到720 to不能工作,因为iFrame youtube播放器类根据您的播放器大小重新切换到一个更好的分辨率(在本例中是小质量,因为您有320x200)。

您可以看到解释这个问题的所以回答

YTPlayerView类导入项目时,有两个文件:YTPlayerView.hYTPlayerView.m

YTPlayerView.m (Update to work on iPads)

我已经更改了用自定义大小(4k分辨率)初始化webview的函数,在最后一部分中,我增加了缩放内容和恢复原始框架的可能性,如下所示:

代码语言:javascript
复制
- (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.:我所有的尝试都是通过一个快速的项目和下面的vars完成的:

代码语言:javascript
复制
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"] 

利用这些职能:

代码语言:javascript
复制
self.playerView.load(withVideoId: "Rk6_hdRtJOE", playerVars: self.playerVars)

以及强制执行决议的下列方法:

代码语言:javascript
复制
self.playerView.loadVideo(byId: "Rk6_hdRtJOE", startSeconds: 0.0, suggestedQuality: YTPlaybackQuality.HD720)

关于iPads:

正如爱德华在评论中所报道的,iPads上有一个小问题,那是因为这些设备似乎没有应用scalesPageToFit。目标是检查设备是否是iPad,然后缩放(放大) scrollView以承载小的视图边界。我已经测试了我的iPad空气,它的工作。让我知道。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41478710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档