gpt4 book ai didi

iOS YTPlayerView 强制视频质量

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:34:38 29 4
gpt4 key购买 nike

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

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

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

非常感谢

最佳答案

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

首先,问题取决于在 YTPlayerView 中构建的 webView 大小。例如,如果您有一个 320x200 的播放器 View ,尝试将您的视频强制设置为 720hd 是行不通的,因为 iFrame youtube 播放器类会根据您的播放器尺寸重新切换到更好的分辨率(在这种情况下质量较低,因为您有 320x200)。

可以看到这个SO answer解释了这个问题。

当您将 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 原始播放器的人有所帮助。

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 以承载小 View 边界。我已经在我的 iPad air 上测试过,它可以工作。让我知道。

关于iOS YTPlayerView 强制视频质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41478710/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com