Я нашел много решений для получения видео или изображений с помощью
phfetchOptions.predicate = NSPredicate(format : "mediaType = %d" , PHAssetMediaType.video.rawvalue)
Также есть PHAssetMediaSubtype, который сильно отличается от того, что я ищу.
Как точно узнать количество файлов .Mov из всех других форматов внутри PHAsset
Я подошел к решению, но думаю, это неправильный способ подсчета. Количество видео, создающих количество фоновых вызовов, вместо этого процесс должен выполняться внутри одного асинхронного вызова. Какие-либо предложения ?
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
}





Это решение дает счетчик .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
}