问题描述
当用户尝试上传视频时,我正在尝试在用户手机上获取相机胶卷中的所有视频,但我不知道如何操作。
我这样做是为了获取所有图片,并注意到如果我将 .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 实例。