创建一个用于图像和视频处理的应用程序,其中应用程序要求根据从图库中选择的视频内容方向设置设备方向。因此,我使用了一些代码行来获取所选媒体的当前方向,请检查下面的代码以了解从所选内容获取的方向。
var video_orientation: UIInterfaceOrientation {
guard let transform = tracks(withMediaType: AVMediaType.video).first?.preferredTransform else {
return .portrait
}
switch (transform.tx, transform.ty) {
case (0, 0):
return .landscapeLeft
case (videoFirstFrameSize.width, videoFirstFrameSize.height):
return .landscapeRight
case (0, videoFirstFrameSize.width):
return .portraitUpsideDown
default:
return .portrait
}
}
现在的问题是,当用户从图库中选择视频(慢动作、正常)时,它工作正常。 但是当用户从图库中选择延时视频方向要改变时,我做了太多与获取方向相关的研究,也做了很多实验,最后我得到了一些解决方案,解决方案是如果我们选择了我们需要的延时视频在视频类型中传递
AVMediaType.timecode
但现在的问题是,我应该如何在选定的资产上设置它。
任何帮助都非常值得赞赏,并将挽救我的生命:P,但它有点令人沮丧。
注意:-
var video_orientation
是 AVAssets
的扩展属性
这是如何轻松检测媒体类型的代码。
enum AssetType {
case photo
case video
case livePhoto
case sloMo
case timeLapse
case burst
case gif
}
func getMediaType(asset : PHAsset)-> AssetType? {
if asset.mediaType == .image {
if asset.representsBurst {
return .burst
} else if asset.playbackStyle == .imageAnimated {
return .gif
} else if (asset.mediaType == PHAssetMediaType.image && ((asset.mediaSubtypes.rawValue & PHAssetMediaSubtype.photoLive.rawValue) != 0)) {
return .livePhoto
} else {
return .photo
}
} else if asset.mediaType == .video {
if (asset.mediaType == PHAssetMediaType.video && ((asset.mediaSubtypes.rawValue & PHAssetMediaSubtype.videoTimelapse.rawValue) != 0)) {
return .timeLapse
} else if (asset.mediaType == PHAssetMediaType.video && ((asset.mediaSubtypes.rawValue & PHAssetMediaSubtype.videoHighFrameRate.rawValue) != 0)) {
return .sloMo
} else {
return .video
}
} else {
return nil
}
}