Как реализовать AVAssetImageGenerator.copyCGImageAtTime в swift
до сих пор у меня есть следующее
let assetUrl = NSURL.URLWithString(self.targetVideoString)
let asset: AVAsset = AVAsset.assetWithURL(assetUrl) as AVAsset
let imageGenerator = AVAssetImageGenerator(asset: asset);
let time : CMTime = CMTimeMakeWithSeconds(1.0, 1)
let actualTime : CMTime
let myImage: CGImage =imageGenerator.copyCGImageAtTime(requestedTime: time, actualTime:actualTime, error: <#NSErrorPointer#>)
в последней строке я теряюсь ... Я просто хочу захватить изображение в момент 1.0 секунд
4 ответов
функция объявляется как
func copyCGImageAtTime(requestedTime: CMTime, actualTime: UnsafeMutablePointer<CMTime>, error outError: NSErrorPointer) -> CGImage!
и вы должны пройти (инициализирован) CMTime
и NSError?
переменные как "выражение in-out" с &
:
let assetUrl = NSURL(string: ...)
let asset: AVAsset = AVAsset.assetWithURL(assetUrl) as AVAsset
let imageGenerator = AVAssetImageGenerator(asset: asset);
let time = CMTimeMakeWithSeconds(1.0, 1)
var actualTime : CMTime = CMTimeMake(0, 0)
var error : NSError?
let myImage = imageGenerator.copyCGImageAtTime(time, actualTime: &actualTime, error: &error)
обратите внимание также, что ваша первая строка
let assetUrl = NSURL.URLWithString(self.targetVideoString)
больше не компилируется с текущим Xcode 6.1.
С Swift2.0 imageGenerator.copyCGImageAtTime теперь отмечен бросками, поэтому вам нужно обрабатывать ошибки в блоке do - try - catch.
let asset : AVAsset = AVAsset(URL: yourNSURLtoTheAsset )
let imageGenerator = AVAssetImageGenerator(asset: asset)
let time = CMTimeMakeWithSeconds(0.5, 1000)
var actualTime = kCMTimeZero
var thumbnail : CGImageRef?
do {
thumbnail = try imageGenerator.copyCGImageAtTime(time, actualTime: &actualTime)
}
catch let error as NSError {
print(error.localizedDescription)
}
по крайней мере, Xcode 7.0.1 и Swift 2 assetwithURL
сейчас: let asset = AVAsset(URL: assetURL)
. Ошибка Xcode была "'assetWithURL' недоступна: используйте конструкцию объекта ' AVAsset (URL:)'"
принятый ответ в Swift 3, 4:
let asset = AVURLAsset(url: URL(fileURLWithPath: "YOUR_URL_STRING_HERE"))
let imgGenerator = AVAssetImageGenerator(asset: asset)
var cgImage: CGImage?
do {
cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil)
} catch let error as NSError {
// Handle the error
print(error)
}
// Handle the nil that cgImage might be
let uiImage = UIImage(cgImage: cgImage!)