微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何仅从库中获取所有视频?

如何解决如何仅从库中获取所有视频?

用户尝试上传视频时,我正在尝试在用户手机上获取相机胶卷中的所有视频,但我不知道如何操作。

我这样做是为了获取所有图片,并注意到如果我将 .image 更改为 .video 它会获取所有视频,但它们仍然显示为图像并且您无法播放视频:

func fetchImagesFromDeviceLibary() {
    
    let allPhotos = PHAsset.fetchAssets(with: .image,options: getAssetFetchOptions())
    dispatchQueue.global(qos: .background).async {
        //Enumerate objects
        allPhotos.enumerateObjects({ (asset,count,stop) in
            let imageManager = PHImageManager.default()
            let targetSize = CGSize(width: 600,height: 600)
            let options = PHImageRequestOptions()
            options.isSynchronous = true
            
            imageManager.requestimage(for: asset,targetSize: targetSize,contentMode: .aspectFit,options: options,resultHandler: {
                (image,info) in
                if let image = image {
                    self.videos.append(image)
                    self.assets.append(asset)
                    if self.selectedVideo == nil {
                        self.selectedVideo = image
                    }
                    if count == allPhotos.count - 1 {
                        dispatchQueue.main.async {
                            self.collectionView.reloadData()
                        }
                    }
                }
            })
        })
    }
}

func getAssetFetchOptions() -> PHFetchOptions {
    let options = PHFetchOptions()
    options.fetchLimit = 50
    let sortDescriptor = NSSortDescriptor(key: "creationDate",ascending: false)
    options.sortDescriptors = [sortDescriptor]
    return options
}

我如何获取所有视频并将它们显示在屏幕上,以便您可以与它们进行交互?

解决方法

将带有 .image 的 fetchAssets 更改为 .video 后,在 getAssetsFetchOption() 中进行所需的更改。

func getAssetFetchOptions() -> PHFetchOptions {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate",ascending: false)]


// For Images Only
// fetchOptions.predicate = NSPredicate(format: mediaType == %d",PHAssetMediaType.image.rawValue)

// For Videos Only
// fetchOptions.predicate = NSPredicate(format: "mediaType == %d,PHAssetMediaType.video.rawValue)

// For Images and Videos
// fetchOptions.predicate = NSPredicate(format: "mediaType == %d || mediaType == %d",PHAssetMediaType.image.rawValue,PHAssetMediaType.video.rawValue) 

// For Videos with some duration,here I’m taking it as 10 second
fetchOptions.predicate = NSPredicate(format: "mediaType = %d AND duration < 10",PHAssetMediaType.video.rawValue)

fetchOptions.fetchLimit = 50

let imagesAndVideos = PHAsset.fetchAssets(with: fetchOptions)
print(“LIST: \(imagesAndVideos)”)

  return options
}

希望这对你也有用。

创建 AVPlayer 实例:

let videoURL = "your video url"

    // Create an AVPlayer,passing it the local video url path
    let player = AVPlayer(url: videoURL as URL)
    let controller = AVPlayerViewController()
    controller.player = player
    present(controller,animated: true) {
        player.play()
    }

不要忘记导入 AVKit 和 AVFoundation。 也尝试在全球范围内制作 AvPlayer 实例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。