2015-06-26 8 views
6

Mit unserer App können Nutzer ein Video aufzeichnen. Danach fügt die App Untertitel hinzu und exportiert das bearbeitete Video.Wie wird der AVPlayer sofort und nicht erst nach dem Ende des Videos angezeigt?

Das Ziel besteht darin, das Video sofort wiederzugeben, aber der AVPlayer wird erst nach dem Ende des Videos angezeigt (und nur Audio wiedergegeben, was ein separates Problem darstellt).

Folgendes passiert jetzt: Wir zeigen eine Vorschau, so dass der Benutzer sehen kann, was er in Echtzeit aufzeichnet. Nachdem der Benutzer die Aufnahme beendet hat, möchten wir das Video zur Überprüfung wiedergeben. Leider wird kein Video angezeigt und nur Audio wiedergegeben. Ein Bild, das einen Frame des Videos darstellt, wird angezeigt, wenn die Wiedergabe beendet ist.

Warum passiert das?

func exportDidFinish(exporter: AVAssetExportSession) { 
    println("Finished exporting video") 

    // Save video to photo album 
    let assetLibrary = ALAssetsLibrary() 
    assetLibrary.writeVideoAtPathToSavedPhotosAlbum(exporter.outputURL, completionBlock: {(url: NSURL!, error: NSError!) in 
     println("Saved video to album \(exporter.outputURL)") 
     self.playPreview(exporter.outputURL) 
     if (error != nil) { 
      println("Error saving video") 
     } 
    }) 
} 


func playPreview(videoUrl: NSURL) { 
    let asset = AVAsset.assetWithURL(videoUrl) as? AVAsset 
    let playerItem = AVPlayerItem(asset: asset) 
    player = AVPlayer(playerItem: playerItem) 
    let playerLayer = AVPlayerLayer(player: player) 
    playerLayer.frame = view.frame 
    view.layer.addSublayer(playerLayer) 
    player.play() 
} 
+0

Es ist mir unklar, was Sie erwarten. Bitte umformulieren. Versuchen Sie zu zeigen, was die Kamera während der Videoaufnahme aufnimmt? Wenn Sie sagen, dass der AVPlayer erst nach dem Ende des Videos erscheint, meinen Sie, dass der AVPlayer erst erscheint, wenn die Aufnahme beendet ist? –

+0

@ JörnEyrich sorry für die Verwirrung. Jetzt passiert Folgendes: Wir zeigen eine Vorschau, sodass der Benutzer in Echtzeit sehen kann, was er aufnimmt. Nachdem der Benutzer die Aufnahme beendet hat, möchten wir das Video wiedergeben. Leider wird kein Video angezeigt und nur Audio wiedergegeben. Ein Bild, das einen Frame des Videos darstellt, wird angezeigt, wenn die Wiedergabe beendet ist. – Crashalot

+0

Vielleicht ist das Video, das du generierst, kaputt? Wie sieht es aus, wenn du es aus dem Album spielst, in dem du es gespeichert hast? Alternativ, wenn Sie ein anderes Video in playPreview() statt dem gerade aufgenommenen abspielen, wird das korrekt angezeigt? –

Antwort

0

Die Antwort war, wir hatten ein falsch zusammengesetztes Video an erster Stelle, wie hier beschrieben: AVAssetExportSession export fails non-deterministically with error: "Operation Stopped, NSLocalizedFailureReason=The video could not be composed.".

Der andere Teil der Frage (Audio-Wiedergabe, lange bevor Bilder/Video erscheint) wurde hier beantwortet: Long delay before seeing video when AVPlayer created in exportAsynchronouslyWithCompletionHandler

Hoffen, dass diese jemand helfen, das Leid vermeiden wir ertragen! :)

3

Vielleicht kann dies helfen:

let assetLibrary = ALAssetsLibrary() 
assetLibrary.writeVideoAtPathToSavedPhotosAlbum(exporter.outputURL, completionBlock: {(url: NSURL!, error: NSError!) in 
    if (error != nil) { 
     println("Error saving video") 
    }else{ 
     println("Saved video to album \(url)") 
     self.playPreview(url) 
    } 
}) 

Send "url" auf "playPreview" verlassen "completionBlock" und nicht das, was von "AVAssetExportSession" Vielleicht

kommt ...!