gpt4 book ai didi

ios - 共享扩展中的 AVAssetExportSession

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:30:58 29 4
gpt4 key购买 nike

我正在尝试对共享扩展中选择的视频使用 AVAssetExportSession 并获取

Error Domain=NSURLErrorDomain Code=-3000 "Cannot create file" UserInfo={NSLocalizedDescription=Cannot create file, NSUnderlyingError=0x14811fdb0 {Error Domain=NSOSStatusErrorDomain Code=-12124 "(null)"}}

但我可以在同一个 NSURL 上手动创建文件而不会出错。这是我正在使用的功能

func reencodeVideo() {
let videoAsset = AVURLAsset(URL: video.url)

let videoTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0] as AVAssetTrack
print(videoTrack.estimatedDataRate)
let exportSession = AVAssetExportSession(asset: videoAsset, presetName: AVAssetExportPreset1920x1080)
guard let outputURL = uploadableFileURL else {
return
}
let fileManager = NSFileManager.defaultManager()
// let created = fileManager.createFileAtPath(outputURL.path!, contents: nil, attributes: nil)
if let path = outputURL.path where fileManager.fileExistsAtPath(path) {
print("file exists")
}
do {
try fileManager.removeItemAtURL(outputURL)
print("deleted")
} catch {
print(error)
}
exportSession?.outputURL = outputURL
exportSession?.outputFileType = AVFileTypeQuickTimeMovie

exportSession?.exportAsynchronouslyWithCompletionHandler{
print(exportSession?.status)
}
}

private var uploadableFileURL: NSURL? {
guard let tempFileName = video.url.lastPathComponent else {
return nil
}
let fileManager = NSFileManager.defaultManager()
guard let containerURL = fileManager.containerURLForSecurityApplicationGroupIdentifier(Constants.appGroupIdentifier) else {
return nil
}
return containerURL.URLByAppendingPathComponent("videoFile.mov")
}

我已经在同一目录中成功创建了文件,但是 AVAssetExportSession 在那里返回了一个错误。知道我做错了什么吗?

我试过使用 AVAssetReaderAVAssetWriterAVAssetWriter 在尝试启动时返回相同的错误。如果我正在使用文档目录,编码过程会成功完成,只有在使用共享应用程序组容器时才会失败。

最佳答案

您的问题可能与文档文件夹和 icloud 同步的使用有关。参见 https://forums.developer.apple.com/message/77495#77495

如果你做类似的事情:

guard let containerURL = fileManager.containerURLForSecurityApplicationGroupIdentifier(Constants.appGroupIdentifier) else {
return nil
}

let libraryURL = containerURL.URLByAppendingPathComponent("Library", isDirectory: true)
let cachesURL = libraryURL.URLByAppendingPathComponent("Caches", isDirectory: true)
return cachesURL.URLByAppendingPathComponent("videoFile.mov")

关于ios - 共享扩展中的 AVAssetExportSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37427804/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com