通过UIActivityViewController提取视频URL以进行共享

时间:2017-02-07 05:12:36

标签: ios uiactivityviewcontroller

我正在使用UIActivityViewController处理分享视频,并对从PHAsset对象中提取网址有一些疑问。

我在“PHImageManager”中使用“requestAVAsset”并将AVAsset对象强制转换为AVURLAsset以访问其url属性。我尝试了以下类型的活动:

  • 复制到云端硬盘 - 这会打开Goog​​le云端硬盘应用(成功
  • Google云端硬盘 - 显示确认对话框(失败)(对话框中未附带视频)
  • Gmail - (失败)(可以发送邮件,但不附带视频)
  • 添加到Notes - 这会将视频添加到内置的Notes应用程序中,应显示一个对话框以进行确认(失败)(应用程序在UIActivityViewController消失且没有对话框显示后冻结)
  • Facebook / LINE - (失败)(进度条永不移动)

我的问题:

  1. 此方法提取的网址是否可以访问视频的真实资源文件?
  2. 如果是的话,我错过了什么吗?我的代码中是否有错误(见下文)?
  3. 共享内容的代码(在UIViewController中):

    PHImageManager.default().requestAVAsset(forVideo: videoAsset, options: nil, resultHandler: {
        (asset: AVAsset?, audioMix: AVAudioMix?, info: [AnyHashable: Any]?) in
    
        if let urlAsset = asset as? AVURLAsset {
            print("Share url=\(urlAsset.url.absoluteURL)")
            let shareVC: UIActivityViewController = UIActivityViewController(activityItems: [urlAsset.url.absoluteURL], applicationActivities: nil)
            shareVC.completionWithItemsHandler = {
                (type: UIActivityType?, completed: Bool, returnedItems: [Any]?, err: Error?) in
                print("Share result: completed=\(completed), \(type)")
                if err != nil {
                    print("\(err.debugDescription)")
                }
            }
            DispatchQueue.main.async {
                self.present(shareVC, animated: true, completion: nil)
            }
        }
    })
    

    环境:iPhone 7 plus,iOS 10.1.1

    不过,我还尝试了另外两种方法进行分享。

    1. 使用“PHAssetResourceManager”中的“writeData”将视频输出到临时目录,然后按文件路径构建URL。
    2. 在“PHImageManager”中使用“requestExportSession”将视频输出到临时目录,然后按文件路径构建URL。
    3. 这些方法运行正常。在我看来,这是因为视频文件可以通过提取的URL直接访问。但是它们不适合我,因为我不仅要分享单个文件,还要在一个动作中共享多个文件。 (他们需要时间来处理数据)

0 个答案:

没有答案