如何使用 Photos Foundation 在 iOS 系统图库中获取视频 URL?

Posted

技术标签:

【中文标题】如何使用 Photos Foundation 在 iOS 系统图库中获取视频 URL?【英文标题】:How can I get a video'url in iOS system gallery using Photos Foundation? 【发布时间】:2016-09-29 09:46:12 【问题描述】:

我想将本地资源(视频、照片)分享到 Facebook,但 Facebook 的 API 要求我必须在本地系统图库中提供一个 url,我该如何获取?谢谢。

【问题讨论】:

你用什么方法来挑选照片或视频? UIImagePickerController ? 没有。我使用 Photos Foundation 获取画廊所有资产,并且我可以获取每个资产本地标识符。 我如何通过提供资产来获取资产的网址? - (PHFetchResult *)getAssetsInCustomeAssetCollection 这个方法可以获取所有资产 显示你的代码,你是如何做到这一点的! 【参考方案1】:

像这样的第一个 Didload() 代码

self.options.predicate = NSPredicate(format: "mediaSubtype == %ld", PHAssetMediaSubtype.videoHighFrameRate.rawValue)
            self.images = PHAsset.fetchAssets(with: PHAssetMediaType.video, options: nil)
            self.options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

            self.collectionView.reloadData()
            self.collectionView.dataSource = self
            self.collectionView.delegate = self

在 didselect() 代码中如下所示

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
        let cell = collectionView.cellForItem(at: indexPath as IndexPath) as! custCollectionViewCell


        var videoURL: NSURL!

        var resourceArray: [AnyObject] = PHAssetResource.assetResources(for: self.images[indexPath.row] )
        var paths: [AnyObject] = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as [AnyObject]

        self.assetResource = resourceArray[0] as! PHAssetResource


        let filePath = paths[0].appending("/image.mov")
        videoURL = NSURL.init(fileURLWithPath: filePath )

        do
        
            try    FileManager.default.removeItem(atPath: filePath )

        
        catch
        


        
        PHAssetResourceManager.default().writeData(for: self.assetResource, toFile: videoURL as URL, options: nil, completionHandler: _ in







        )
        let assets = AVAsset(url: NSURL(fileURLWithPath: filePath) as URL)
        let length = Float(assets.duration.value) / Float(assets.duration.timescale)
        if length != 0.0  




            self.selectedImage = cell.photoImageView.image
            performSegue(withIdentifier: "show", sender: self)

        

    

还有什么需要的可以私信我

【讨论】:

以上是关于如何使用 Photos Foundation 在 iOS 系统图库中获取视频 URL?的主要内容,如果未能解决你的问题,请参考以下文章

PHAsset,如何在应用重启后检索特定的 PHAsset 对象(ios8 Photos)

如何使用 UIPageViewController 实现像 iOS Photos 应用一样的照片滑动?

如何从 Photos 框架中的assetURL 获取 PHAsset?

如何使用 Photos API 在 iOS 8.0 中检索照片扩展名 (jpg/png)?

您如何指定 Contact.photos 的 URL?

Apple Photos collectionview 捏缩放如何工作?