2015-06-26 29 views
6

我們的應用程序允許用戶錄製視頻,之後應用程序添加字幕並導出編輯後的視頻。如何讓AVPlayer立即出現而不是在視頻結束後出現?

目標是立即重放視頻,但AVPlayer僅在視頻結束後纔會出現(並且只播放音頻,這是一個單獨的問題)。

下面是現在發生的事情:我們顯示預覽,以便用戶可以實時查看他正在錄製的內容。用戶完成錄製後,我們要播放視頻以供查看。不幸的是,沒有視頻出現,只有音頻播放。當音頻完成回放時,會顯示代表某幀視頻的圖像。

這是怎麼發生的?

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

我不清楚你在期待什麼。請重新說明。您是否試圖在錄製視頻時顯示相機正在錄製的內容?當您說「AVPlayer僅在視頻結束後纔出現」時,您的意思是AVPlayer僅在錄製完成後纔出現? –

+0

@JörnEyrich對此感到抱歉。以下是現在發生的事情:我們顯示預覽,以便用戶可以實時查看他正在錄製的內容。用戶完成錄製後,我們要播放視頻。不幸的是,沒有視頻出現,只有音頻播放。當音頻完成回放時,會顯示代表某幀視頻的圖像。 – Crashalot

+0

也許您生成的視頻已損壞?當您將它保存到相冊中時,它看起來如何?或者,如果您在playPreview()中播放其他視頻而不是剛剛錄製的視頻,是否顯示正確? –

回答

0

答案是我們有一個錯誤組成的視頻擺在首位,如下所述:AVAssetExportSession export fails non-deterministically with error: "Operation Stopped, NSLocalizedFailureReason=The video could not be composed."

問題的另一部分(音頻播放長圖像前/視頻出現),在這裏回答:Long delay before seeing video when AVPlayer created in exportAsynchronouslyWithCompletionHandler

希望這些幫助別人避免我們遭受的痛苦! :)

3

也許這可以幫助:

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

發送 「url」 到 「playPreview」 離開 「completionBlock」,而不是說這來自 「AVAssetExportSession

也許...!

相關問題