【问题标题】:app plays same video for all video PHAsset in swift应用程序在 swift 中为所有视频 PHAsset 播放相同的视频
【发布时间】:2019-08-06 14:53:17
【问题描述】:

我有一个简单的应用程序,它显示 iPhone 照片库中的所有视频(使用 PHAsset)。 我能够显示所有视频的缩略图(在收藏视图中),但是当我点击任何视频时它只播放相同的视频,我没有硬编码任何网址。 下面是代码,不知道哪里错了。

  1. 获取视频资产
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)
}
  1. 点击集合视图中的视频缩略图时,创建新的 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)
}
  1. 终于播放视频了
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()
        }
    }
}

我真的不确定代码哪里出错了。

【问题讨论】:

    标签: ios swift video avplayer phasset


    【解决方案1】:

    您可能需要检查您传递的 indexPath,这应该可以工作。

    改变

    let Newasset = allAssets1[indexPath.row]
    

    let Newasset = allAssets1[indexPath.item]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多