繁体   English   中英

如何播放从图库中选择的视频?

[英]How do I play a video which was selected from Gallery?

我有两个视图控制器:GetStartedViewController(根视图控制器)和 TrimVideoViewController。 我使用 PHPicker 从根视频中选择了一个视频,我需要在第二个 viewController 中播放该视频。 问题是,当我向 AVFoundation 提供 url 时,什么也没有发生。 我很茫然。

我已经搜索了 inte.net,但找不到这个问题的答案。

我看到一个单一的解决方案说我需要复制并保存到另一个目录并将该目录与 AVFoundation 一起使用。 它仍然没有用。

我还搜索了一个可以播放图库中的视频的框架,但大多数只能使用 HTTP 链接播放。

谁能帮我这个?

这是 GetStartedViewController

这是 TrimVideoViewController

请注意,您已获取 URL 但未设置self.url = urlvc..videoURL = url = url 更改为以下内容应该有所不同

vc!.videoURL = url

好的,在咨询了更有经验的 iOS 开发人员后,我们发现 PHPicker 传递的 url 不适合 AVFoundation。 相反,我们编写了这个 function 来重新定位视频并使其适合 AVFoundation。

private func getVideo(from itemProvider: NSItemProvider, typeIdentifier: String) {
    itemProvider.loadFileRepresentation(forTypeIdentifier: typeIdentifier) { url, error in
        if let error = error {
            print(error.localizedDescription)
        }
        
        guard let url = url else { return }
        
        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
        guard let targetURL = documentsDirectory?.appendingPathComponent(url.lastPathComponent) else { return }
        
        do {
            if FileManager.default.fileExists(atPath: targetURL.path) {
                try FileManager.default.removeItem(at: targetURL)
            }
            
            try FileManager.default.copyItem(at: url, to: targetURL)
            
            DispatchQueue.main.async {
                let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "TrimVideooViewController") as? TrimVideooViewController
                vc!.videoURL = targetURL
                self.navigationController?.pushViewController(vc!, animated: true)
            }
        } catch {
            print(error.localizedDescription)
        }
    }
}

请享用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM