【发布时间】:2015-02-08 18:55:56
【问题描述】:
在用户允许我们访问他的相机胶卷之后。我们想从我们的应用程序中获取数据并将其上传到我们的服务。 有没有办法从文件中访问视频数据?打开视频文件的唯一方法是创建一个 AVAsset。但这对我来说还不够。
我知道了
func requestExportSessionForVideo(_ asset: PHAsset!,
options options: PHVideoRequestOptions!,
exportPreset exportPreset: String!,
resultHandler resultHandler: ((AVAssetExportSession!,
[NSObject : AnyObject]!) -> Void)!) -> PHImageRequestID
但就我而言,我只想将视频上传到我们不想做的服务:
- 首先通过导出到我的本地应用数据来复制视频
- 然后将该数据发送到我们的服务。
- 删除数据。
上面的这种方法会占用大量额外的空间和时间,并且对于拥有完整 16GB iPhone 的用户来说效果不佳。
好的,这是我迄今为止使用 URL 尝试的方法
var anAcces = sourceURL?.startAccessingSecurityScopedResource
if !NSFileManager.defaultManager().fileExistsAtPath(sourceURL!.path!) {
NSLog("not exist")
}
var aFileCoordinator = NSFileCoordinator(filePresenter:nil)
var anError: NSError?
aFileCoordinator.coordinateReadingItemAtURL(sourceURL!, options:.ForUploading, error:&anError, byAccessor: { (newURL: NSURL!) -> Void in
var data = NSData(contentsOfURL: newURL)
})
if let unError = anError {
NSLog("Error \(unError)")
}
sourceURL?.stopAccessingSecurityScopedResource
这会记录以下内容:
2015-02-08 16:20:01.947 Cameo[15706:2288691] not exist
2015-02-08 16:20:01.991 Cameo[15706:2288691] Error Error Domain=NSCocoaErrorDomain Code=257 "The operation couldn’t be completed. (Cocoa error 257.)" UserInfo=0x170876480 {NSURL=file:///var/mobile/Media/DCIM/100APPLE/IMG_0155.MOV, NSFilePath=/var/mobile/Media/DCIM/100APPLE/IMG_0155.MOV, NSUnderlyingError=0x17005a9a0 "The operation couldn’t be completed. Operation not permitted"}
【问题讨论】:
-
您应该能够从 AVAsset 获取 URL,然后将其传递给您的上传者。我已经有一段时间没有看过这个了。看看我的问题/答案。我认为有人提出了一些可能对你有用的建议。
-
我用我用来尝试访问 URL 的代码更新了我的问题。我尝试了 2 种技术:NSFileManager 和 NSFileCoordinator
-
据我所知,这并不能解决问题。我可以从 PHAsset 中检索 AVURLAsset 并从生成的 URL 中读取(例如,读入 NSData 对象)。但是尝试从该 URL 创建 NSURLSessionUploadTask 会引发错误:
Failed to issue sandbox extension for file file:///var/mobile/Media/DCIM/100APPLE/IMG_0730.MOV, errno = 1。这是问题的核心。 @mvo 介意将这个细节添加到问题中吗?有人有解决方法吗?我的共享应用组设置正确...