首页 > 解决方案 > Swift - AVFoundation - 检查视频尺寸/纵横比

问题描述

我有一个 iOS 应用程序,目前它只是使用用户库中的 AVFoundation 播放视频。我想做的是根据视频的纵横比设置设备的方向。如果是纵向视频,我想将方向设置为纵向,如果标准 16:9 或 4:3,那么当然是横向,这样屏幕就不会在黑条中浪费很多空间视频的任一侧。

我想我可以通过获取视频的尺寸来确定纵横比,从而确定方向:

if width > height:
    landscape
else:
    portrait

然而,事实证明这比我想象的要困难得多。我有一个AVPlayer对象,最初查看了它的元数据属性,但这显然不是我所追求的那种元数据。然后我发现 AVPlayer.presentationSize 可以有我正在寻找的信息,但是当我打印出来时 - 就在打电话之前play()- 看看它,我得到了以下信息:Optional((0.0, 0.0))

没有研究如何自己解析视频文件头以尝试访问此信息,API 中是否有任何地方暴露给我?谷歌搜索提供了很多关于如何在捕获视频时指定视频大小的信息,但对于这个特定问题,没有太多信息。

标签: iosswiftavfoundation

解决方案


您可以询问标的资产的大小:

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)

推荐阅读