2017-08-07 35 views
0

我有兩個AVPlayer()項目打相同時間(10秒)的視頻。目標是讓他們循環並保持彼此同步。我加他們爲同一UIView的子層,然後調用player.play()對他們中的每一個。兩個AVPlayer視頻不同步(SWIFT)

的問題是,雖然作爲代碼執行顯然有作爲一個被另一種稱爲後絲毫的延遲,視頻不同步的(雖然只有幾毫秒,這是明顯的)。

我沒有選擇創建一個AVMutableComposition,因爲我已經看到其他帖子的建議,那麼無論如何有兩個單獨的球員真正保持同步,並在同一時間玩完全嗎?

謝謝!

+0

的可能的複製[如何安排在準確的時間iOS的方法調用(HTTPS ://stackoverflow.com/questions/22866066/how-to-schedule-ios-method-call-at-exact-time) – the4kman

+0

按我的理解,創建已經分別在兩個班,functionToPlayVideo avplayer實現的類兩種觀點。將這兩個視圖添加到您正在使用的視圖控制器。現在,在具有選擇器「functionToPlayVideo」的兩個視圖類中添加oberserver。現在發佈通知應該工作。 –

+0

@AadilAli確實非常有趣的想法。我從來沒有想過用這種方式來使用通知監聽器。我會試一試。 – simplexity

回答

2

如果要實現同步,您應該分別與AVPlayer加載視頻,觀察每個球員的AVPlayerItemStatus財產。只有當所有的球員都有狀態.readyToPlay可以遍歷球員和設置.rate屬性。

編輯:

您還可以通過使用同步setRate(_:time:atHostTime:)他們。不要忘記在撥打setRate之前開始使用preroll(atRate:completionHandler:)加載媒體數據。基本上是:

  • 等待readyToPlay
  • preroll(atRate:completionHandler:)當所有玩家都準備好
  • setRate(_:time:atHostTime:)當所有球員都預卷
+0

所以當我循環播放器和設置速率,只要.readytoplay是好的,它不會有同樣的同步處理延遲? – simplexity

+0

@simplexity我剛剛編輯了我的答案 –