iOS YTPlayerView 强制视频质量

2024-03-04

我目前正在使用iOS-youtube-player-helper我们的应用程序中的库。有一个视图控制器,带有YTPlayerView它的宽高比为 16:9,这意味着它只占据屏幕的一部分。视频以中等格式加载,无论如何,我都无法使其以 720P 或 1080P 播放。我确信这些品质都是可用的,只是YTPlayerView根据视频播放器的高度强制质量。因为这是一个库而不是直接 iframe 嵌入,所以我无法使用“vq”参数(在playerVars中指定vq似乎不起作用),并且将质量设置为小然后稍后更改它也不起作用(请参阅这个问题在 GitHub 上 https://github.com/youtube/youtube-ios-player-helper/issues/66)

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

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

非常感谢


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

首先,问题取决于webView内部构造的尺寸YTPlayerView。例如,如果您有 320x200 的播放器视图,尝试将视频强制为 720hd 是行不通的,因为 iFrame youtube 播放器类会根据您的播放器尺寸重新切换到更好的分辨率(在本例中质量较小,因为您有 320x200)。

你可以看到这个所以答案 https://stackoverflow.com/a/38461111/1894067就解释了这个问题。

当您导入了YTPlayerView类到您的项目您有两个文件:YTPlayerView.h and 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.:我所有的尝试都是通过一个快速项目和以下变量完成的:

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:

正如爱德华在评论中所报道的,iPad 上有一个小问题,那是因为这些设备似乎不适用scalesPageToFit。目标是检查设备是否是 iPad,然后缩放(缩小)scrollView托管小视图边界。 我已经在 iPad Air 上进行了测试,效果很好。让我知道。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS YTPlayerView 强制视频质量 的相关文章

  • 在完成块中保留循环

    在我的课堂上 我创建了这个方法 void refreshDatasourceWithSuccess CreateDataSourceSuccessBlock successBlock failure CreateDataSourceFail
  • iOS 自定义滑块删除两端的最小和最大空间

    我正在尝试使用自定义滑块 class MySlider UISlider override func trackRect forBounds bounds CGRect gt CGRect let customBounds CGRect o
  • TestFlight 提供反馈按钮

    我正在使用 iOS 8 的最新 testflight 版本 我将自己添加为内部测试人员 现在当我使用 testflight 打开应用程序时 我找不到反馈按钮 如果有人有任何线索 请告诉我 您在 Testflight 应用程序中提供反馈 打开
  • 从xcode上触摸屏的坐标获取ImageView的像素数据?

    单击视图并从视图内的图像获取正确的像素数据似乎存在问题 func handleTap gestureRecognizer UIGestureRecognizer print You tapped at gestureRecognizer l
  • 如何在 Swift 中使用indexesOfObjectsPassingTest:

    IndexOfObjectsPassingTest 的声明在 Swift 中看起来像这样 func indexesOfObjectsPassingTest predicate AnyObject Int CMutablePointer
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • UITableView:显示 tableFooterView 时运行代码?

    我正在使用 UIView表页脚视图 http developer apple com library ios documentation uikit reference UITableView Class Reference Referen
  • AFNetworking XML 请求问题

    我在用着AFNetworking 2使用 JSON 响应 它工作正常 现在我必须将其转换为 XML 而不是使用 JSON 因为服务器响应是 XML 格式的 在我搜索之后 我找到了这段代码 但它不起作用 与 Charles 我发现请求是错误的
  • 为什么performSegueWithIdentifier在viewDidLoad中不起作用?

    我试图在视图控制器上调用 viewDidLoad 后立即触发故事板转场 Segue 附加了一个标识符 当从链接到按钮或其他控件的方法内部调用时 它可以正常工作 但它在 viewDidLoad 内部不起作用 它只是默默地失败了 viewDid
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • dyld:无法加载插入的库

    当我尝试运行 UI 和单元测试时 出现异常 dyld 无法加载插入的库 private var containers Bundle Application AutoTestingApp app Frameworks IDEBundleInj
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • 使用未解析的标识符“FlurryAdInterstitial”

    我正在尝试整合Flurry Interstitial Ads使用cocoapods in Swift and Xcode 7 1 1 我正在关注开发人员雅虎网站上的此文档 https developer yahoo com flurry d
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • Objective-C 中发送给对象的消息可以被监听或者打印出来吗? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中拦截方法调用 https stackoverflow com questions 1618474 intercept method call in objective c 如
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten

随机推荐

  • 在 WooCommerce 中最后显示缺货产品 - 不包括延期交货

    请注意我的要求与其他类似问题的区别 此代码片段可将缺货商品保留在底部 在 Woocommerce 中最后显示缺货产品 https stackoverflow com questions 25113581 show out of stock
  • 当我将其设置为详细信息时,如何将图像添加到ListView?

    当我将其设置为详细信息时 如何将图像添加到 ListView 例如 ImageList imgList new ImageList imgList Images AddStrip bitmap this listView1 StateIma
  • 使用 OpenCv 检测 PC 上网络摄像头/摄像头的数量

    我正在制作一个运行多个网络摄像头 摄像机的应用程序 我无法检测到 OpenCV 拥有的网络摄像头数量 无法安排一个包含多个子网络摄像头的大显示窗口 有人可以帮我这个吗 我搜索过 openCV willowgarage 但失败了 thanks
  • Python线程传递参数

    我正在尝试将一些参数传递给服务器 但我不知道如何 这是我的代码 HOST PORT socket gethostbyname socket gethostname 31000 self server SocketServer Threadi
  • 通过html链接删除Django中的对象

    我有一个带有 Post 模型的项目 这是基本的帖子 我想在每个帖子页面上创建一个链接 以便能够删除该帖子 具有适当的安全性 关于堆栈溢出有一些问题 但我似乎找不到一个完整的 可行的答案 我使用的是 Django 1 7 当我实现它时不会抛出
  • 使用参数化类型重载方法

    只是想知道是否有一种方法可以使用参数化类型调用重载方法 例如定义以下对象 object Wrap def f x X println x called def f y Y println y called def f a Any print
  • 列出所有 PaperTrail 版本(包括关联)的最有效方法是什么?

    这个问题是关于宝石的纸迹 https github com airblade paper trail对于轨道 当仅关联发生变化时 不会为主模型创建版本记录 因此 列出某个记录 包括其关联 的所有版本的最有效方法是什么 查询应该类似于以下内容
  • 是否有 ruby​​ 一行“return if x”?

    有很多地方需要补充 if this flag return end 可以用 ruby 一行完成吗 有没有红宝石单线 return if x Yes return value if condition 我爱鲁比
  • 无法包含用于客户端幻灯片验证的 js 文件

    我安装了gem client side validations 运行bundle并运行rails g client side validations install 安装没有创建任何 js 文件 因此我创建了它们并将 HitHub 中的代码
  • 为什么 Android FireMonkey 应用程序中的控件不能跨越多列或多行?

    我有一个带有 GridPanelLayout 的 FireMonkey 应用程序 与客户端对齐 它有 6 列和 16 行 控件包括字形 编辑和按钮 TEdit 跨越多列 TButton 跨越多列和行 目前 控件全部与客户端对齐 当我在 Wi
  • 如何使用MAIL_FROM_ADDRESS?

    目前 我正在开发一项功能 要求应用程序向客户 用户发送电子邮件 发送电子邮件已经可以正常工作 但是 我希望隐藏 替换发件人的电子邮件 我以为MAIL FROM ADDRESS in env文件是我所需要的 但它没有给我我所期望的 这是我的
  • Uploadify 插件不调用 Java Servlet

    我刚刚开始使用 Uploadify flash 插件而不是标准 HTML UI 并遇到了下一个问题 当我单击 上传文件 链接时 会显示进度并出现 已完成 状态 但实际上 它没有发生任何事情 Java Servlet 不是从后端调用的 有上传
  • 将 UIButton 的背景颜色从白色动画变为红色

    我正在尝试制作一种颜色脉冲效果来动画背景颜色UIButton使其连续从一种颜色 白色 变为另一种颜色 红色 我正在尝试使用CABasicAnimation用于更改不透明度 但我也无法使其与颜色一起使用 CABasicAnimation th
  • 安全发送 PHP 从 iOS 获取信息

    情况是这样的 我有一个 iOS 应用程序 其中有一部分用户将信息输入到特定标签中 然后我根据用户给定的信息创建一个 URL 请求 并将其发送到我的 PHP 后端 URL 遵循以下结构 http www somewebsite com sen
  • Bazel 和 Gradle 有什么区别?

    谷歌刚刚开源的 https github com bazelbuild bazel它的构建工具Bazel https bazel build 这个工具和之前有什么区别Gradle https gradle org 它能做什么 Gradle
  • Open Shift Angular 8 应用程序内存不足问题

    我正在为 openshift Angular 8 应用程序使用 Modern Web App 映像 但应用程序因 npm build 内存不足问题而失败 错误日志 usr libexec s2i assemble 第 62 行 296 被杀
  • Subversion 分支重新整合

    当分支重新集成到主干时 该分支实际上已经死亡了吗 您可以在重新集成后对分支进行修改并稍后将其合并回主干吗 你可以从技术上做到这一点 你的分支没有死亡也没有禁用 但不建议在重新集成后从分支合并到主干 您可以在这里找到有关其原因的完整讨论 Su
  • 选择不同的列并按列的子集进行分组

    我正在使用 SQL Server 2008 我陷入了这个恶性循环DISTINCT and GROUP BY 我有以下虚拟表myTable ID Street City PostalCode ProjectID Date NameId 1 B
  • OpenCV C++ 中跟踪物体的背景扣除和光流

    我正在开发一个项目 使用背景扣除来检测感兴趣的对象 并使用 OpenCV C 中的光流来跟踪它们 我能够使用背景扣除来检测感兴趣的物体 我能够在单独的程序上实现 OpenCV Lucas Kanade 光流 但是 我陷入了如何将这两个程序合
  • iOS YTPlayerView 强制视频质量

    我目前正在使用iOS youtube player helper我们的应用程序中的库 有一个视图控制器 带有YTPlayerView它的宽高比为 16 9 这意味着它只占据屏幕的一部分 视频以中等格式加载 无论如何 我都无法使其以 720P