AVPlayerLayer 不显示 AVPlayer 视频?

2024-01-12

让 AVPlayer 视频内容显示在自己的视图中的技巧是什么?

我们正在使用以下 AVPlayer 代码,但屏幕上没有出现任何内容。我们知道视频在那里,因为我们能够使用 MPMoviePlayerController 来显示它。

这是我们正在使用的代码:

AVAsset *asset = [AVAsset assetWithURL:videoTempURL];
AVPlayerItem *item = [[AVPlayerItem alloc] initWithAsset:asset];
AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:item];
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:player];
// layer.frame = self.view.frame;
[self.view.layer addSublayer:layer];
layer.backgroundColor = [UIColor clearColor].CGColor;
//layer.backgroundColor = [UIColor greenColor].CGColor;
[layer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[player play];

我们是否为当前视图设置了不正确的图层?


您需要设置图层的框架属性。例如。:

 self.playerLayer.frame = CGRectMake(0, 0, 100, 100)

如果您尝试了此操作,但它在视图控制器的视图中不起作用,则可能是您尝试设置图层的frame视图控制器的属性frame or bounds财产是{0, 0, 0, 0}当时的AVPlayerLayer被创建。您需要在布局过程中设置播放器的框架,此时视图控制器的frame将被设置为除{0, 0, 0, 0}。要正确执行此操作:

如果您在自定义 UIView(包括 IB)中使用自动布局:

override func layoutSubviews() {
    super.layoutSubviews()

    //Match size of view
    CATransaction.begin()
    CATransaction.setDisableActions(true)
    self.playerLayer.frame = self.bounds
    CATransaction.commit()
}

如果您在自定义 UIViewController 中使用自动布局:

override fun viewDidLayoutSubviews() {
  //Match size of view-controller
  CATransaction.begin()
  CATransaction.setDisableActions(true)
  self.playerLayer.frame = self.view.bounds
  CATransaction.commit()
}

The CATransaction线用于禁用图层帧更改上的隐式动画。如果您想知道为什么通常不需要这样做,那是因为默认情况下支持 UIView 的图层不会隐式设置动画。在这种情况下,我们使用非视图支持层(AVPlayerLayer)

最好的方法是通过界面构建​​向视图控制器添加新视图,并在新添加的视图上设置自定义类。然后创建自定义视图类并实现layoutSubviews code.

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

AVPlayerLayer 不显示 AVPlayer 视频? 的相关文章

  • Xcode 中的 iOS 9 警告 - 此文件设置为针对早于项目部署的版本进行构建。功能可能有限

    我刚刚将我的 Mac 更新到最新的操作系统 并将 Xcode 更新到最新版本 现在我收到此警告 但我不知道该由谁来删除它 也不知道它的真正含义是什么 有人可以向我解释一下吗 Thanks Select Main storyboard in
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • Google 地图 API -> OpenGLES 崩溃

    日志是从 Crashlytics 粘贴的 对于许多用户来说 崩溃经常发生 据我所知 它与设备 iOS 版本无关 我在我的代码中找不到任何错误 这似乎是纯粹的库问题 是 Google 地图 API 错误吗 我可以做些什么来修复它 或者我应该在
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • 为什么使用 iPhone 或 iOS 设备在“iframe”中查看“position:fixed”时不起作用?

    我研究过 stackoverflow 似乎position fixed在 iOS 移动设备的 iframe 中 https stackoverflow com questions 15874910 position fixed and if
  • ui 测试 xcode,如何使用 cellquery 点击表视图单元格按钮

    我目前正在为我的应用程序进行 ui 测试 并一直点击我的应用程序的登录按钮 我无法找到我提供了标识符注册按钮的元素 该元素是索引中的第三个 这不是问题 let cellQuery self app tables cells element
  • iOS 13 beta 外部屏幕上的 OverscanCompensation

    我正在测试一个应用程序的测试版 但遇到了外部屏幕的问题 我们看到应用程序周围有黑色边框 我们之前可以通过设置来纠正它overscanCompensation to none但在 iOS 13 中 该设置根本没有任何效果 我们曾经看到一个错误
  • 在运行时获取 iPhone 应用程序的产品名称?

    如何才能实现这一目标 我想获取名称 以便可以在应用程序中显示它 当然 每次更改名称时不必在代码中更改它 Try this NSBundle bundle NSBundle mainBundle NSDictionary info bundl
  • 在 swrevealcontroller 之前实现登录屏幕

    我刚刚开始学习 IOS 开发 我已经按照给定的在线教程成功实现了 SWRevealViewController 一切都按预期工作 然后 我决定添加一个登录屏幕 这将是应用程序运行时用户看到的第一个页面 我采取的步骤如下 将 UIViewCo
  • 如果我的消耗性 IAP 被退款,我会收到任何通知吗?

    我有 Apple iOS 应用程序 其中有很多消耗性 IAP 我非常担心用户购买IAP并使用一段时间后向Apple客服投诉并获得退款 如果我的消耗品 IAP 退款 我会收到任何通知吗 我如何注意到这一点并阻止用户使用 IAP None
  • 使用 Simulator 时 Xcode 10 中的屏幕截图尺寸错误

    我正在尝试使用 Xcode 10 模拟器为 iTunes 制作屏幕截图 但图像大小错误 我读过Debug gt Optimize Rendering for Window Scale会有帮助 但在 Xcode 中没有这样的选项 有人有这个问
  • 径向渐变绘制性能 - OpenGL-ES 可以改进吗?

    我正在开发一个图像处理应用程序 它将径向渐变叠加在从照片库加载的图像上 在屏幕上 我有一个滑块可以动态地增大 减小径向渐变的半径 我发现模拟器上的性能很好 但在 iPhone 3G 或 3GS 上就很糟糕了much移动滑块时重绘速度较慢 我
  • 如何在 cv2.VideoWriter 中使用 FPS 参数?

    好的 所以我正在制作视频 我想确切地知道如何使用 FPS 参数 它是一个浮点数 所以我假设这是我想要的每帧之间的间隔 你能给个例子吗 我只想知道视频会如何随着 FPS 参数值的变化而变化 因为我制作的视频现在太快了 谢谢 确实只是这样 fr
  • 如何使用MKMapView完成加载委托,可能的“完成显示”委托?

    当用户在选择注释后点击 保存 时 我尝试保存地图视图的缩略图 当用户尚未放大该注释时会出现问题 因此尚未加载关闭缩放级别 这就是用户点击保存后我正在做的事情 将布尔值 saving 设置为 true 居中并放大注释 无动画 当调用mapVi
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 使用 NSURLSessionDataTask 显示文件下载进度

    我想显示特定文件的文件下载进度 收到了多少字节 它与 NSURLSessionDownloadTask 配合得很好 我的问题是我想用 NSURLSessionDataTask 实现同样的效果 以下是将文件接收到 NSData 并写入文档文件
  • iOS Storyboards 我应该使用它们吗? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 尚未创建应用程序 但我向我的朋友寻求建议 他在市场上拥有非常高评价的应用程序 他说不要使用故事板 尽管我很想听取他的建议 但它们似乎确实很有帮助 这是否会在将来给我的应用程序带来问题 我有
  • 将带有地理位置数据的照片保存到照片库 Swift 3

    如何使用地理位置元数据将照片保存到照片库 我已请求 并允许 应用程序访问用户位置 private func allowAccessToUserLocation locationManager CLLocationManager locati
  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画

随机推荐

  • dplyr 过滤器无法与 lubridate 一起使用

    我很难理解为什么下面的代码会这样 基本上 过滤器似乎已应用 但在后续调用中无法工作 gt library dplyr gt library lubridate gt gt md1 lt data frame no 1 4 time c 12
  • 是否可以使用 getUserMedia 检测相机何时打开/准备就绪?

    我成功地将 webcam js 与 Angular 应用程序一起使用 以允许用户捕获自己的照片 但是 我遇到了一些用户上传空白 全白或全黑照片的问题 我怀疑某些相机的启动速度比其他相机慢 这使得用户可以在相机真正工作之前拍摄自己的空白照片
  • 如何使用c++在Windows中锁定文件?

    如何将 Windows 中的文件锁定为仅当前线程 同一进程中的其他线程和其他进程 可以访问 读 写 该文件 如果可能 请告诉我一些类似 fcntl 的解决方案 锁定具有其描述符的文件的解决方案 但无论如何 其他解决方案也是受欢迎的 在Win
  • Django 2.0 allauth Facebook 2018

    我使用 Django all auth 登录 Twitter 和 Google 现在 Facebook 出现问题 尝试了 localhost 127 0 0 1 etc 之间的每一个组合 也通过将我的主机更改为 local domain c
  • 将记录添加到 Firebase 数据库时发送电子邮件

    我想向签名用户发送一封电子邮件 其中包含用户添加到 Firebase 数据库的数据 我正在使用 AngularJS 用户界面 是否有 Firebase 模块会触发电子邮件 并将数据添加到签名用户中 谢谢 拉杰什 你应该调查一下Firebas
  • 为什么 Python 代码在函数中运行得更快?

    def main for i in xrange 10 8 pass main 这段代码在Python中运行 注 计时是用Linux中BASH中的time函数完成的 real 0m1 841s user 0m1 828s sys 0m0 0
  • CORS 策略已阻止从 '' from origin '' 获取数据:请求的资源上不存在 'Access-Control-Allow-Origin' 标头

    I have this api method get that is connected to a lambda function that does a simple select from a database if i test th
  • Android:从正在运行的服务获取变量

    我的活动启动了一个服务 当我关闭我的应用程序时 该服务将继续运行 好吧 没错 但是 当我在活动中再次打开应用程序时 我需要知道在我之前启动的正在运行的服务 类 上定义的公共变量的值 我怎样才能做到这一点 Thanks 如果您将 Activi
  • iOS 5 Segue 实现

    在两个视图控制器之间实现 segue 时 如何使用 segue 对象更改目标视图控制器的属性 文档说这可以在prepareForSegue sender 方法中完成 我尝试过但没有成功 我不知道你是否还需要这个答案 但这是一个如此孤独的帖子
  • Rails3 rspec 问题

    我正在尝试rails3 我在用铁路教程 http railstutorial org 探索有关 Rails3 的更多信息的网站 该教程非常适合入门 我对rails2 的经验很少 我的 rspec 存在问题 目前阻碍了我的进度 我看到教程推荐
  • 获取 chrome 下载文件夹

    Windows 7 中的默认下载文件夹是c 用户 用户名 下载对于 Chrome 但可以通过设置将默认下载文件夹设置为其他文件夹 我需要找出哪个文件夹是下载文件夹 所以如果我将下载文件夹设置为c dd 那么我需要找出具体的文件夹 有没有办法
  • 如何在 chrome 中检查系统时间格式 - 在 JavaScript 中是 12 小时还是 24 小时?

    date toLocaleTimeString不适用于 Chrome 并且始终以 12 小时格式返回时间 我需要根据系统的时间格式显示时间 简短的回答是No您无法在浏览器中获取默认时间格式 因为它依赖于系统和浏览器设置 而 JavaScri
  • 如何将 CoreML 模型转换为 TensorFlow 模型?

    我了解到可以将 TensorFlow 模型 pb 文件转换为 CoreML mlmodel 以在 iOS 平台上运行 但我有一些想要在张量流上运行的 mlmodel 文件 所以我想知道是否有任何方法可以将它们转换为 pb 文件或任何其他方式
  • LINQ to Entities 用于减去 2 个日期

    我正在尝试使用 LINQ 和实体框架确定两个日期之间的天数 它告诉我它无法识别 System TimeSpan 类上的 Subtract 这是 LINQ 查询的 where 部分 where DateTime Now Subtract vi
  • 比 windows.h 的 Beep() 更快的替代方案

    我正在做一个个人项目 我想用旧的业余无线电无线电传输一些数据 我的第一份申请草案是这样的 我用 4 个 信号 构造一个字节 5000hz表示 00 6khz 表示 01 7khz的意思是 10 8khz的意思是 11 9khz 意思和上一个
  • 如何禁用 NetBeans 8.1 中烦人的警告/提示

    我正在 NetBeans 中使用 Java 和 Jersey 我的所有端点都标有以下提示 将方法转换为异步 这个提示确实污染了我通常寻找代码更改 错误的右侧排水沟 首选项 gt 编辑器 gt 提示中没有任何内容似乎会影响此提示 Cheers
  • Git 与 --squash 合并,同时保留每次提交的日志

    初始场景 A master B C D development 合并后我想要什么 squash A E master development B C D 在树枝上master git log将会 commit E Squashed comm
  • php:编写 .ics (iCal) 文件?日期格式?

    我不是一个 php 专家 在格式化 ics 文件的日期时遇到了麻烦 所以我有一个循环为每个生成一个日历条目 post 在我的例子中 post 是一个事件 foreach posts as post setup postdata post i
  • 从 Windows 的 git bash 激活 pyenv

    我在 Windows 7 64 位 上使用 gitbash 我尝试使用 python 3 4 的内置 venv 模块创建一个 venv 方法是调用python m venv venv 并且创建成功 但是生成的 venv 不包含 bash a
  • AVPlayerLayer 不显示 AVPlayer 视频?

    让 AVPlayer 视频内容显示在自己的视图中的技巧是什么 我们正在使用以下 AVPlayer 代码 但屏幕上没有出现任何内容 我们知道视频在那里 因为我们能够使用 MPMoviePlayerController 来显示它 这是我们正在使