重新编译应用程序后生成预览图像时,视频会从URL中消失

时间:2015-09-30 11:51:12

标签: ios swift

我创建了一个视频应用,用户可以在其中录制视频并添加一些其他信息。然后,用户可以在单独的屏幕上显示视频及其信息。

在信息屏幕上,我试图从视频中显示静止图像。如果我在该会话中打开信息屏幕,这会有效,但是当我重新编译并运行应用程序时,屏幕截图不再出现。我收到以下错误:

NSUnderlyingError=0x162b9350 "The operation couldn’t be completed. No such file or directory", NSLocalizedDescription=The requested URL was not found on this server.

视频位于设备的某个位置,因为我可以通过内置的“照片”来查看视频。应用

我使用以下代码执行url字符串的保存和生成预览图像。

保存视频网址

    let videoURL = info[UIImagePickerControllerMediaURL] as! NSURL
    let videoData = NSData(contentsOfURL: videoURL)        
    let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
    let dataPath = path.stringByAppendingPathComponent("-cached.MOV")
    videoData.writeToFile(dataPath, atomically: false) 
    NSUserDefaults.standardUserDefaults().setObject(dataPath, forKey: "dataPath")

    videoNote.url = dataPath

创建预览图片

// filePathLocal == videoNote.url
func videoSnapshot(filePathLocal: NSString) -> UIImage? {

    let vidURL = NSURL(fileURLWithPath:filePathLocal as String)
    let asset = AVURLAsset(URL: vidURL, options: nil)
    let generator = AVAssetImageGenerator(asset: asset)
    generator.appliesPreferredTrackTransform = true

    let timestamp: CMTime = asset.duration

    var error: NSError?

    if let imageRef = generator.copyCGImageAtTime(timestamp, actualTime: nil, error: &error){
        return UIImage(CGImage: imageRef)
    } else {
        print("Image generation failed with error \(error)")
        return nil
    }
}

任何帮助非常感谢

1 个答案:

答案 0 :(得分:0)

虽然我从未设法使videoSnapshot()方法的代码生效,但我发现我可以使用以下内容生成预览镜头。缺点是无法控制拍摄图像的时间戳。

    ALAssetsLibrary().assetForURL(nsURL, resultBlock: { (asset) -> Void in
        if let ast = asset {
            return image = UIImage(CGImage: ast.defaultRepresentation().fullResolutionImage().takeUnretainedValue())
        }
    })