【问题标题】:Swift - How to fetch a .Mov format?Swift - 如何获取 .Mov 格式?
【发布时间】:2019-01-09 16:33:09
【问题描述】:

我找到了很多关于使用

获取视频或图像的解决方案
phfetchOptions.predicate = NSPredicate(format : "mediaType = %d" , PHAssetMediaType.video.rawvalue)

还有一个PHAssetMediaSubtype,这与我正在寻找的非常不同。

如何准确地从PHAsset 中的所有其他格式获取 .Mov 文件的数量

我已经接近解决方案,但我想这不是获得计数的正确方法。创建多个后台调用的视频数量,而不是该过程应该在一个异步调用中完成。有什么建议吗?

 private func getMovVideosCount() {

    let fetchOptions = PHFetchOptions()

    fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.video.rawValue)
    var count : Int = 0
    let imagesAndVideos = PHAsset.fetchAssets(with: fetchOptions)
    for i in 0..<imagesAndVideos.count {
        let videoRequestOptions = PHVideoRequestOptions()
        PHImageManager.default().requestPlayerItem(forVideo: imagesAndVideos[i], options: videoRequestOptions) { (playerItem, result) in
            let currentVideoUrlAsset = playerItem?.asset as?  AVURLAsset
            if let currentVideoFilePAth = currentVideoUrlAsset?.url{
                let lastObject = currentVideoFilePAth.pathExtension
                if lastObject == "MOV" {
                    count += 1
                }
            }
            print(Thread.isMainThread) // false 
        }
    }
    print(Thread.isMainThread) // true
}

【问题讨论】:

    标签: ios swift nspredicate phasset


    【解决方案1】:

    这个解决方案给出了.MOV的计数并解决了调度组的并发问题。

    private func getMovVideosCount() {
    
    let fetchOptions = PHFetchOptions()
    let dispatchgroup = DispatchGroup()
    fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.video.rawValue)
    var count : Int = 0
    let imagesAndVideos = PHAsset.fetchAssets(with: fetchOptions)
    for i in 0..<imagesAndVideos.count {
        dispatchgroup.start()
        let videoRequestOptions = PHVideoRequestOptions()
        PHImageManager.default().requestPlayerItem(forVideo: imagesAndVideos[i], options: videoRequestOptions) { (playerItem, result) in
            let currentVideoUrlAsset = playerItem?.asset as?  AVURLAsset
            if let currentVideoFilePAth = currentVideoUrlAsset?.url{
                let lastObject = currentVideoFilePAth.pathExtension
                if lastObject == "MOV" {
                    count += 1
                }
            }
            print(Thread.isMainThread) // false 
          dispatchgroup.leave()
        }
    }
    dispatchgroup.notify({})
    print(Thread.isMainThread) // true
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      相关资源
      最近更新 更多