2015-09-20 16 views
5

Ho una cartella nella mia directory di documenti contenente immagini e video, Nella mia app ho una vista insieme che mostra le immagini in ogni cella.Visualizzazione di un'immagine di anteprima da un video swift

Ho compiuto questo di una funzione di carico che restituisce un UIImage

// Get the UI Image from the path passed in 
    let image = UIImage(contentsOfFile: path) 

    if image == nil 
    { 
     print("No Image at this path"); 
    } 
    else 
    { 
     return image 
    } 

Tuttavia non riesco a trovare qualcosa di equivalente per i video, idealmente lo voglio mostrare come la cosa lettore video come in album fotografico in cui vedi una foto del video con un piccolo pulsante di riproduzione su di esso che quando viene cliccato riproduce il video.

Se non si riesce a ottenere un'istantanea dal video nel percorso specificato, è necessario restituire il valore UIImage che è possibile visualizzare.

Sono nuovo per la roba di iOS, quindi mi chiedo solo se esiste un tipo equivalente come UIImage per i video, il che significa che posso solo caricarlo e visualizzarlo nella visualizzazione della raccolta.

risposta

17

È necessaria un'istantanea del video e visualizzata con un pulsante di riproduzione. Ecco il mio func in Swift 2 che si può ottenere il video-snapshot di un file video a percorso filePathLocal:

func videoSnapshot(filePathLocal: NSString) -> UIImage? { 

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

    let timestamp = CMTime(seconds: 1, preferredTimescale: 60) 

    do { 
     let imageRef = try generator.copyCGImageAtTime(timestamp, actualTime: nil) 
     return UIImage(CGImage: imageRef) 
    } 
    catch let error as NSError 
    { 
     print("Image generation failed with error \(error)") 
     return nil 
    } 
} 
+0

ho seguito il tuo metodo e ha generato uno snapshot dell'immagine. comunque l'orientamento è sbagliato, sono solo io o quello che dovrebbe essere il risultato corretto? Come posso correggere l'orientamento dell'istantanea? – Happiehappie

+0

Questo problema di orientamento è nuovo. L'ultima volta che ho controllato, questo codice funzionava bene. – Nishant

+0

c'è un modo per ottenere un percorso temporaneo per UIImage appena creato? – user3766930

8

Swift 3 versione

func videoPreviewUiimage(fileName:String) -> UIImage? { 
    let filePath = NSString(string: "~/").expandingTildeInPath.appending("/Documents/").appending(fileName) 

    let vidURL = NSURL(fileURLWithPath:filePath) 
    let asset = AVURLAsset(url: vidURL as URL) 
    let generator = AVAssetImageGenerator(asset: asset) 
    generator.appliesPreferredTrackTransform = true 

    let timestamp = CMTime(seconds: 2, preferredTimescale: 60) 

    do { 
     let imageRef = try generator.copyCGImage(at: timestamp, actualTime: nil) 
     return UIImage(cgImage: imageRef) 
    } 
    catch let error as NSError 
    { 
     print("Image generation failed with error \(error)") 
     return nil 
    } 
} 

In base a Nishant risposta di cui sopra.

3

per SWIFT 3,0

func generateThumbnailForVideoAtURL(filePathLocal: NSString) -> UIImage? { 

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

let timestamp = CMTime(seconds: 1, preferredTimescale: 60) 

do { 
    let imageRef = try generator.copyCGImage(at: timestamp, actualTime: nil) 
    return UIImage(cgImage: imageRef) 
} 
catch let error as NSError 
{ 
    print("Image generation failed with error \(error)") 
    return nil 
} 

} 
Problemi correlati