2015-06-26 7 views
6

La nostra app consente agli utenti di registrare un video, dopo di che l'app aggiunge i sottotitoli ed esporta il video modificato.Come rendere AVPlayer visualizzato istantaneamente anziché dopo il termine del video?

L'obiettivo è riprodurre il video immediatamente, ma l'AVPlayer viene visualizzato solo al termine del video (e riproduce solo l'audio, che è un problema separato).

Ecco cosa succede ora: mostriamo un'anteprima in modo che l'utente possa vedere ciò che sta registrando in tempo reale. Dopo che l'utente ha terminato la registrazione, vogliamo riprodurre il video per la revisione. Sfortunatamente, non viene visualizzato alcun video e viene riprodotto solo l'audio. Un'immagine che rappresenta qualche fotogramma del video appare quando l'audio viene riprodotto.

Perché sta succedendo?

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

Non mi è chiaro cosa ti aspetti. Per favore riformulare Stai cercando di mostrare cosa sta registrando la videocamera mentre viene registrato il video? Quando dici "l'AVPlayer viene visualizzato solo al termine del video", intendi che l'AVPlayer viene visualizzato solo al termine della registrazione? –

+0

@ JörnEyrich scusa per la confusione. Ecco cosa succede ora: mostriamo un'anteprima in modo che l'utente possa vedere ciò che sta registrando in tempo reale. Dopo che l'utente ha terminato la registrazione, vogliamo riprodurre il video. Sfortunatamente, non viene visualizzato alcun video e viene riprodotto solo l'audio. Un'immagine che rappresenta qualche fotogramma del video appare quando l'audio viene riprodotto. – Crashalot

+0

Forse il video che hai generato è rotto? Come appare quando lo riproduci dall'album in cui l'hai salvato? In alternativa, se riproduci qualche altro video in playPreview() anziché quello appena registrato, viene visualizzato correttamente? –

risposta

0

La risposta è stata la presenza di un video non correttamente composto, come descritto qui: AVAssetExportSession export fails non-deterministically with error: "Operation Stopped, NSLocalizedFailureReason=The video could not be composed.".

L'altra parte della questione (audio giocare molto tempo prima che le immagini/video appare) è stato risposto qui: Long delay before seeing video when AVPlayer created in exportAsynchronouslyWithCompletionHandler

auguriamo che questi aiutare qualcuno a evitare la sofferenza abbiamo sopportato! :)

3

Forse questo può aiutare:

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" a "playPreview", lasciando "completionBlock" e non quella che viene da "AVAssetExportSession"

Forse ...!