我目前正在开发一个小型的快速应用程序,并且我将一些视频记录存储在应用程序的文档文件夹中。我想稍后检索这些。我已经有一个像这样的文件位置数组:
file:///private/var/mobile/Containers/Data/Application/6C462C4E-05E2-436F-B2E6-F6D9AAAC9361/Documents/videorecords/196F9A75-28C4-4B65-A06B-6111AEF85F01.mov
现在我想使用这样的文件位置来创建第一帧的缩略图,并使用以下代码将其连接到我的imageview:
func createVideoStills() {
for video in directoryContents {
print("\(video)")
do {
let asset = AVURLAsset(URL: NSURL(fileURLWithPath: "\(video)"), options: nil)
let imgGenerator = AVAssetImageGenerator(asset: asset)
imgGenerator.appliesPreferredTrackTransform = true
let cgImage = try imgGenerator.copyCGImageAtTime(CMTimeMake(0, 1), actualTime: nil)
let uiImage = UIImage(CGImage: cgImage)
videoCell.imageView = UIImageView(image: uiImage)
//let imageView = UIImageView(image: uiImage)
} catch let error as NSError {
print("Error generating thumbnail: \(error)")
}
}
}
第一次印刷给我一条如上所述的路径。但是AVURLAsset并不喜欢这条路径,因为它会吐出以下错误:
生成缩略图时出错:错误域= NSURLErrorDomain代码= -1100 "在此服务器上找不到请求的URL。" UserInfo = {NSLocalizedDescription =找不到请求的URL 此服务器。,NSUnderlyingError = 0x14ee29170 {错误 Domain = NSPOSIXErrorDomain Code = 2"没有这样的文件或目录"}}
这是奇怪的,因为它就在那里。关于如何解决/解决这个问题的任何解决方案?
亲切的问候,
的Wouter
答案 0 :(得分:1)
print("\(video)")
的输出不是文件路径,而是文件网址的字符串表示形式。您需要使用init(string:)
而不是init(fileURLWithPath:)
的{{1}}。
看看你得到了什么:
NSURL
(不必要的字符串插值会产生一些没有错误的意外结果 - 比如获取“Optional(...)”,所以你应该避免。)