应用为 swift 中的所有视频 PHAsset 播放相同的视频
app plays same video for all video PHAsset in swift
我有一个简单的应用程序,可以显示 iPhone 照片库中的所有视频(使用 PHAsset)。
我能够显示所有视频的缩略图(在 collection 视图中)但是当我点击任何视频时它只播放相同的视频,我没有硬编码任何 url。
下面是代码,不知道哪里错了。
- 获取视频资源
var va: PHFetchResult<PHAsset>!
override func viewDidLoad() {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: false) ]
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.video.rawValue)
va = PHAsset.fetchAssets(with: fetchOptions)
}
- 在 collection 视图中点击视频缩略图时,创建新的 UIViewController 并传递资产数据
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath)
let vc=videoVC()
vc.vasset = self.va
vc.passedContentOffset = indexPath
self.navigationController?.pushViewController(vc, animated: true)
}
- 终于播放视频了
let Newasset = allAssets1[indexPath.row]
PHCachingImageManager().requestAVAsset(forVideo: Newasset, options: nil) { (Newasset, audioMix, args) in
let asset1 = asset as! AVURLAsset
DispatchQueue.main.async {
let player = AVPlayer(url: asset1.url)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player!.play()
}
}
}
我真的不确定代码哪里出了问题。
您可能需要检查您传递的 indexPath,这应该有效。
改变
let Newasset = allAssets1[indexPath.row]
至
let Newasset = allAssets1[indexPath.item]
我有一个简单的应用程序,可以显示 iPhone 照片库中的所有视频(使用 PHAsset)。 我能够显示所有视频的缩略图(在 collection 视图中)但是当我点击任何视频时它只播放相同的视频,我没有硬编码任何 url。 下面是代码,不知道哪里错了。
- 获取视频资源
var va: PHFetchResult<PHAsset>!
override func viewDidLoad() {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: false) ]
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.video.rawValue)
va = PHAsset.fetchAssets(with: fetchOptions)
}
- 在 collection 视图中点击视频缩略图时,创建新的 UIViewController 并传递资产数据
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath)
let vc=videoVC()
vc.vasset = self.va
vc.passedContentOffset = indexPath
self.navigationController?.pushViewController(vc, animated: true)
}
- 终于播放视频了
let Newasset = allAssets1[indexPath.row]
PHCachingImageManager().requestAVAsset(forVideo: Newasset, options: nil) { (Newasset, audioMix, args) in
let asset1 = asset as! AVURLAsset
DispatchQueue.main.async {
let player = AVPlayer(url: asset1.url)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player!.play()
}
}
}
我真的不确定代码哪里出了问题。
您可能需要检查您传递的 indexPath,这应该有效。
改变
let Newasset = allAssets1[indexPath.row]
至
let Newasset = allAssets1[indexPath.item]