2015-09-20 10 views
5

Ich habe einen Ordner in meinem Dokumentenverzeichnis, der Bilder und Videos enthält. In meiner App habe ich eine Sammlungsansicht, die die Bilder in jeder Zelle anzeigt.Zeigen Sie ein Vorschaubild von einem Video-Swift an

Ich habe dies mit einer Last Bildfunktion erreicht, die eine UIImage gibt

// 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 
    } 

Allerdings kann ich nicht etwas Gleichwertiges für Videos zu finden scheinen, im Idealfall möchte ich es als Video-Player, was zu zeigen, wie in Fotoalbum, wo Sie ein Standbild des Videos mit einem kleinen Play-Button sehen, der beim Anklicken das Video abspielt.

Wenn das nicht in der Lage ist, einen Stand vom Video auf dem angegebenen Pfad zu bekommen, muss ich als UIImage zurückgegeben werden kann ich würde in Ordnung sein.

Ich bin neu in Sachen iOS so nur frage mich, ob es eine gleichwertige Art wie UIImage für Videos gibt, die bedeutet, ich kann nur laden und auf der Sammlung anzuzeigen.

Antwort

17

Sie benötigen einen Schnappschuss des Videos und zeigen es zusammen mit einer Wiedergabetaste an. Hier ist mein func in Swift 2 die filePathLocal bei Ihnen den Video-Schnappschuss für einen Videodateipfad bekommen:

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

folgte ich Ihre Methode und erzeugen ein Bild Momentaufnahme. aber die Orientierung ist falsch, ist es nur ich oder das soll das richtige Ergebnis sein? Wie korrigiere ich die Snapshot-Ausrichtung? – Happiehappie

+0

Dieses Problem mit der Ausrichtung ist neu. Als ich das letzte Mal überprüft habe, funktionierte dieser Code einwandfrei. – Nishant

+0

gibt es eine Möglichkeit, einen temporären Pfad zu dem frisch erstellten UIImage zu bekommen? – user3766930

8

Swift 3 Version

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 
    } 
} 

auf Nishant Basierend oben beantworten.

3

Für schnelle 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 
} 

} 
Verwandte Themen