PHAsset 复制视频完成
Posted
技术标签:
【中文标题】PHAsset 复制视频完成【英文标题】:PHAsset copy video completion 【发布时间】:2018-08-27 12:07:19 【问题描述】:我希望将视频文件从照片库复制到我的应用的 Documents 目录并希望收到有关完成的通知。这是我的工作:
let videoAsset = fetchResult.object(at: indexPath.item)
print(videoAsset.description)
let options = PHVideoRequestOptions()
options.version = .original
PHImageManager.default().requestAVAsset(forVideo: videoAsset, options: options) [weak self] (avAsset, audioMix, info) in
if let avurlAsset = avAsset as? AVURLAsset
let url = avurlAsset.url
let toUrl = //some Url
let fileManager = FileManager.default
do
try fileManager.copyItem(at: url, to: toUrl)
catch
NSLog("Unable to copy file from \(url) to \(toUrl)")
这种方法的唯一问题是我无法收到 copyItem 完成的通知。至少在复制完成之前阻塞的 copyItem 方法(或完全不同的方法)的替代方法是什么?是否可以使用 FileHandle 并读取连续字节并写入另一个文件?这足够同步吗?
编辑:正如 Alex 所指出的,copyItem 实际上是同步例程。仔细检查后,我发现我有时会在复制时出错。不知道为什么当它是我复制的应用程序的 Documents 文件夹时出现权限错误。
2018-08-27 20:30:07.485841+0530 MyProject[3577:1288452] Copying file...
2018-08-27 20:30:07.487880+0530 MyProject[3577:1288452] stat on /var/mobile/Media/DCIM/107APPLE/IMG_7915.MP4: Operation not permitted
2018-08-27 20:30:07.512994+0530
MyProject[3577:1288452] Unable to copy file from file:///var/mobile/Media/DCIM/107APPLE/IMG_7915.MP4 to file:///var/mobile/Containers/Data/Application/CC13FD5A-E4CF-42A1-931F-2F1FFE799C15/Documents/IMG-0027.mov, Error Domain=NSCocoaErrorDomain Code=513 "“IMG_7915.MP4” couldn’t be copied because you don’t have permission to access “Documents”." UserInfo=
NSSourceFilePathErrorKey=/var/mobile/Media/DCIM/107APPLE/IMG_7915.MP4, NSUserStringVariant=(
Copy
),
NSDestinationFilePath=/var/mobile/Containers/Data/Application/CC13FD5A-E4CF-42A1-931F-2F1FFE799C15/Documents/IMG-0027.mov, NSFilePath=/var/mobile/Media/DCIM/107APPLE/IMG_7915.MP4, NSUnderlyingError=0x111c441c0 Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"
【问题讨论】:
【参考方案1】:Copyitem:将指定路径的item同步复制到新位置。
如果项目复制成功或文件管理器的代理故意停止操作,则返回 true。如果发生错误,则返回 false。
这是一个同步方法,所以在catch之后执行后没有错误就表示复制成功了。
https://developer.apple.com/documentation/foundation/filemanager/1407903-copyitem
【讨论】:
看来确实存在复制错误。我已经用编辑更新了这个问题。 尝试根据您的日志将权限添加到 plist 中。因为它说:因为您没有访问“文档”的权限。以上是关于PHAsset 复制视频完成的主要内容,如果未能解决你的问题,请参考以下文章
在 Nativescript 应用程序中将 PHAsset/AVAsset 转换为 mp4 视频