2012-09-13 53 views
3

我需要以毫秒級的精度同步網絡設備中的音頻。我砍死在一起的東西,工作得很好,但is'nt完全可靠:iOS - 以毫秒級精度同步設備間的音頻

1)服務器設備發送RPC與timeSinceClick PARAM

2)客戶端設備啓動相同的點擊抵消根據時間在運輸過程中所花費的RPC,

3)System.Diagnostics.StopWatch檢查periodicaly上所有連接的設備,以確保播放沒有偏離絕對時間太多,如果有必要

是否有更優雅的方式糾正去做這個?另外,如果非iOS設備添加到混音中,我的做法需要手動同步:延遲分歧使其非常難以自動化...

我是所有人的眼睛!

乾杯,

Gregzo

回答

0

這是很難在同一臺機器精確到毫秒在多個設備上同步,所以如果你能做到這一點在多臺機器,我會說你做得很好。我對你所描述的步驟並不熟悉iOS,但我可以告訴你我將如何以跨平臺的方式進行處理。也許你的方法是一樣的。

  1. 一臺機器(「主」)將發送UDP數據包到所有其他機器。
  2. 所有其他機器會盡快回復。
  3. 接收回復所需的時間除以2將是(大約)從一臺機器到另一臺機器所需的時間。 (這可能需要驗證,也許處理和發送數據包需要更長的時間?可能不會)
  4. 在重複步驟1-3後,忽略任何極值並平均剩餘結果,您知道需要多長時間從一臺機器到另一臺機器獲取消息。
  5. 現在「同步」UDP數據包可以從主機發送到「從機」機器。同步數據包將包含延遲信息,以便當保存機器接收到數據包時,他們知道它們是在毫秒前發送的。如果網絡延遲或丟棄其中的一些,可能需要發送幾個同步數據包。
+0

非常感謝您的回答!唉,它已經非常接近我正在做的事情......我想知道是否有更絕對的做事方式。例如,機場快車如何通過兩個不同的揚聲器完美同步播放?或者也許有辦法以某種方式獲得超精確的原子時間,並完全繞過同步問題? – Gregzo

+0

我不熟悉機場快遞。這可能是因爲它是硬件,它們可以更精確地同步。我認爲這種技術的準確性實際上是基於定時測量的可靠性和可重複性。例如,您可能想重複多次並使用最低值,因爲高於最低值的任何值都是錯誤。 –

+0

不要考慮原子鐘。不管你的時鐘有多準確,它們之間的接近程度都很重要。兩個機器之間的任何時鐘漂移都會比網絡延遲中的任何偏移量都小(除非您打算連續運行數小時 - 如一週)。 –