如何检测所选媒体是延时、慢动作还是.mp4

问题描述 投票:0回答:1

创建一个用于图像和视频处理的应用程序,其中应用程序要求根据从图库中选择的视频内容方向设置设备方向。因此,我使用了一些代码行来获取所选媒体的当前方向,请检查下面的代码以了解从所选内容获取的方向。

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

的扩展属性
ios swift4 video-processing gpuimage avasset
1个回答
1
投票

这是如何轻松检测媒体类型的代码。

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
        }
    }

© www.soinside.com 2019 - 2024. All rights reserved.