如何将视频保存到 Swift Playgrounds 中的 URL

Posted

技术标签:

【中文标题】如何将视频保存到 Swift Playgrounds 中的 URL【英文标题】:How to save a video to a URL in Swift Playgrounds 【发布时间】:2017-04-01 15:20:22 【问题描述】:

我正在尝试实例化 PHLivePhoto,但每当我尝试保存构成实时照片的视频时,我都无法正常工作。

这是我编写的用于处理导出视频的小代码 sn-p:

public func exportFilteredVideo(to outputURL: URL, completion: @escaping (Void) -> Void) 
    if FileManager.default.fileExists(atPath: outputURL.path) 
        try? FileManager.default.removeItem(at: outputURL)
    

    let export = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetMediumQuality)!
    export.outputFileType = AVFileTypeQuickTimeMovie
    export.outputURL = outputURL
    export.videoComposition = generateComposition()
    export.exportAsynchronously(completionHandler: completion)

这是我尝试检索视频的时候:

let destURL = url.deletingLastPathComponent().appendingPathComponent("Test.mov")
pixellationFilter.exportFilteredVideo(to: destURL) 
     print(try! destURL.checkResourceIsReachable()) //An error is thrown! Why though, isn't the export completed?

目前,我怀疑您可能无法写入指定的URL。但是,我的理解是,每当我想创建一个PHLivePhoto 对象时,我需要将资源指定为URL 而不是Data。如果可能的话,我可以改用数据而不是将其导出到URL。我可能是错的,但我并没有真正找到用Data 创建PHLivePhoto 的方法。有一个PHAssetResource 类,但这仅有助于获取PHLivePhoto 的数据文件,而不是创建PHLivePhoto

所以我现在认为我可能的解决方案是:

    弄清楚如何将视频保存为URL。 尝试通过Data 而不是URL 创建实时照片。

【问题讨论】:

文件URL就是数据所在的位置 @LeoDabus 同意,但是在创建PHLivePhoto 时我需要使用这种方法:request(with​Resource​File​URLs:​placeholder​Image:​target​Size:​content​Mode:​result​Handler:​)。如您所见,它使用[URL] 作为参数,而不是Data @LeoDabus 以下是相关文档:developer.apple.com/reference/photos/phlivephoto/… 明白:),那我就用 FileManger。如果有效,我会尽快通知您。 @LeoDabus 成功了!非常感谢你。我认为捆绑网址应该可以工作,但临时目录可以工作。如果您愿意,可以回答,我会标记为已接受。 【参考方案1】:

fileURL 就是数据所在的位置。只需将数据写入temporary folder 并将该文件 url 传递给该方法。

【讨论】:

以上是关于如何将视频保存到 Swift Playgrounds 中的 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Playground 中导入 Swift 包?

如何将本地 HTML 文件导入到我的 Swift Playground Live View?

将图像添加到 swift Playground [iPad]

如何将视频保存到 Swift Playgrounds 中的 URL

在 Swift Playground 中使用 AVPlayer 播放视频?

如何使用 Swift Playground 打印到控制台?