2012-04-03 377 views
21

雖然我意識到AirPlay具有固有的延遲/延遲,但我想知道是否有方法讓(當前假設的)iPhone應用程序檢測延遲是什麼。如果是這樣,這個延遲值有多精確?我更加好奇一個應用是否可以「知道」自己的AirPlay延遲,而不是簡單地將其最小化。檢測AirPlay延遲

+3

發送一個blip然後聽通過麥克風返回的聲音? – trapper 2012-04-03 17:07:37

+0

我正在尋找揚聲器前延遲。信號通過網絡傳輸需要多長時間。等待揚聲器和聲音傳輸將增加額外的延遲,我不一定感興趣。謝謝! – 2012-04-03 19:11:56

回答

4

簡短的回答是:不,Apple不提供這樣做的方法。假設你需要你的應用程序在App Store中獲得批准,那麼你有點不幸。如果您可以在越獄設備上運行您的應用程序,則可以搜索未公開的API,這樣可以讓您做更多事情。

如果您需要在蘋果應用程序商店中提供您的應用程序,則可以通過網絡進行操作的大部分功能都列在「可訪問性」示例應用程序中。

我能想到的唯一方法就是使用Bonjour來識別主機(請參閱示例代碼https://developer.apple.com/library/ios/#samplecode/BonjourWeb/Introduction/Intro.html),然後ping主機。

但是:

  • 如果有多於1個的Airplay站你將需要猜測或詢問該用戶連接到,或可能採取的平均值。
  • 設備可能不響應ping所有(蘋果電視和機場快線皆響應ping通,不知道第三方設備。)
  • 的平可能沒有反映音頻的實際延遲

與其花太多時間在這,你應該遵循蘋果的指導方針爲您準備了AirPlay的音頻和豐富您的應用程序使用AirPlay播放:http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AirPlayGuide/PreparingYourMediaforAirPlay/PreparingYourMediaforAirPlay.html#//apple_ref/doc/uid/TP40011045-CH4-SW1

希望這有助於! :)

34

延遲不是來自網絡抖動,而是由源設備(您的iPhone)決定的。

長話短說:

  • 它總是精確2S(精確到毫秒)與蘋果設備。
  • 無法使用公共API對其進行調整。

音頻延遲需要非常準確,以便多個輸出可以同步播放。

有關的AirPlay的執行幾點說明:

  • 協議與幾個RTSP開始命令。在這次握手過程中,信號源會傳輸rtpTime,即播放開始的時間,這也是您的延遲時間。典型值爲88200 = 2s×44100Hz。
  • AirPlay設備可以通過NTP與其源時鐘同步其時鐘,以減輕網絡延遲。
  • 在播放過程中,信號源會定期發送一個SYNC數據包來調整音頻延遲並確保所有設備仍保持同步。

如果使用自定義實現,可以更改延遲,但Apple通常會拒絕它們。

檢查此writeup欲知更多信息。您也可以閱讀unofficial protocol documentation

+0

謝謝你的鏈接Laurent。我一直在努力解決這個延遲問題,你的第二條評論很多。看起來Airplay上的AVPlayer沒有這種延遲,但有其他限制。 – amergin 2012-10-18 20:18:43

+0

意想不到的參考!清除一些不必要的謎題,可以通過更多控制來實現更強大的功能。 – 2012-12-28 11:43:17

0

您可以通過-[AVAudioSession outputLatency]查詢的iOS目前的硬件音頻延遲,

據爲outputLatency文件:

使用的AirPlay的功能的設備爲您的音頻內容可能會導致一個2秒的延遲。檢查遊戲內容的延遲。

而且根據我的經驗,這個值開關輸出設備時,如改變:

  • 音箱:〜10ms的
  • 藍牙:〜100個+ MS
  • 的AirPlay:2S