update software kit development developer desarrolladores apple ios objective-c swift video photos

ios - software - Fotos del marco de la imagen del video en un determinado marco.



update xcode to ios12 (3)

Creo que necesitas mirar las bibliotecas de AVFoundation para decodificar el video y tomar el marco que deseas.

Para actualizar los marcadores de posición en la biblioteca mirando los documentos, parece que necesita crear un PHAssetChangeRequest y establecer la propiedad placeholderForCreatedAsset en él. Luego, debe solicitar que la biblioteca realice el cambio dentro de un bloque de cambios.

Nota: Si esto es solo para su uso, puede establecer el marco del marcador de posición dentro de Fotos y eso debería reflejarse en su aplicación.

He realizado una colección de bibliotecas con videos que obtengo del marco de fotos, uso miniaturas para mostrar todos los diferentes videos usando el siguiente método

func requestImageForAsset(_ asset: PHAsset!, targetSize targetSize: CGSize, contentMode contentMode: PHImageContentMode, options options: PHImageRequestOptions!, resultHandler resultHandler: ((UIImage!, [NSObject : AnyObject]!) -> Void)!) -> PHImageRequestID

que funciona bien. Pero mis videos siempre comienzan con un marco negro, por lo que todas las miniaturas son negras. ¿Puedo desplazar el fotograma desde el que toma una imagen instantánea?


Este es el código que he usado en mi proyecto, que funciona como un encanto para mí.

func generateThumnail(url: URL) -> UIImage? { let asset = AVAsset(url: url) let assetImgGenerate = AVAssetImageGenerator(asset: asset) assetImgGenerate.appliesPreferredTrackTransform = true assetImgGenerate.maximumSize = CGSize(width: 100, height: 100) let time = CMTimeMake(1, 30) if let img = try? assetImgGenerate.copyCGImage(at: time, actualTime: nil) { return UIImage(cgImage: img) } return nil }

La función anterior devolverá la imagen a 1 segundo del video.

Esta es la forma de pasar el assetUrl de tu video para obtener la miniatura.

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { let mediaType = info[UIImagePickerControllerMediaType] as! String if (mediaType == kUTTypeMovie as! String){ let tempVideo = info[UIImagePickerControllerMediaURL] as! URL if let thumbnail = self.generateThumbnail(url: tempVideo) { // Use your thumbnail }


Puede recuperar el objeto AVAsset asociado con

func requestAVAssetForVideo(_ asset: PHAsset, options options: PHVideoRequestOptions?, resultHandler resultHandler: (AVAsset?, AVAudioMix?, [NSObject : AnyObject]?) -> Void) -> PHImageRequestID

luego, cargue ese activo en un AVAssetImageGenerator que sea capaz de obtener miniaturas específicas de tiempo a través de

func copyCGImageAtTime(_ requestedTime: CMTime, actualTime actualTime: UnsafeMutablePointer<CMTime>, error outError: NSErrorPointer) -> CGImage!