ios - Swift - AVFoundation - 检查视频尺寸/纵横比
问题描述
我有一个 iOS 应用程序,目前它只是使用用户库中的 AVFoundation 播放视频。我想做的是根据视频的纵横比设置设备的方向。如果是纵向视频,我想将方向设置为纵向,如果标准 16:9 或 4:3,那么当然是横向,这样屏幕就不会在黑条中浪费很多空间视频的任一侧。
我想我可以通过获取视频的尺寸来确定纵横比,从而确定方向:
if width > height:
landscape
else:
portrait
然而,事实证明这比我想象的要困难得多。我有一个AVPlayer
对象,最初查看了它的元数据属性,但这显然不是我所追求的那种元数据。然后我发现 AVPlayer.presentationSize 可以有我正在寻找的信息,但是当我打印出来时 - 就在打电话之前play()
- 看看它,我得到了以下信息:Optional((0.0, 0.0))
没有研究如何自己解析视频文件头以尝试访问此信息,API 中是否有任何地方暴露给我?谷歌搜索提供了很多关于如何在捕获视频时指定视频大小的信息,但对于这个特定问题,没有太多信息。
解决方案
您可以询问标的资产的大小:
let asset = player.playerItem.asset
let videoTrack = asset.tracks(withMediaType: .video).first!
let naturalSize = videoTrack.naturalSize
let transform = videoTrack.preferredTransform
let size = naturalSize.applying(transform)
推荐阅读
- android - Android 房间查询返回 null
- python - 根据某些列上的条件将 Na 放在几列上
- ms-access - MS Access:IIF 查询,如“text*”
- python - Pyqt5中的Qthreading
- uno-platform - Uno主布局
- docker - 从 kubernetes pod 提交 pyspark 应用程序
- amazon-web-services - 从 s3 存储桶下载文件时如何触发 lambda 函数?
- reactjs - Highstocks 带有单个导航器的多个图表 + 导航器外部的标签 + 自定义导航器句柄符号
- javascript - Socket.io 404 错误 - 客户端未连接
- javascript - 使用 Netlify 在 Gatsby 网站上进行 prerenderReady