虽然我意识到AirPlay具有固有的滞后/延迟,但我想知道(当前假设的)iPhone应用程序是否有办法检测延迟是什么。如果是这样,延迟值有多精确?我对应用程序是否能“知道”自己的AirPlay延迟更为好奇,而不是简单地将其最小化。
答案 0 :(得分:36)
延迟不是来自网络抖动,而是由源设备(您的iPhone)决定。
长话短说:
音频延迟需要非常准确,以便多个输出可以同步播放。
关于AirPlay实施的一些解释:
rtpTime
,即播放开始的时间,这也是您的延迟。典型值为88200 = 2s x 44100 Hz。SYNC
数据包以调整音频延迟,并确保所有设备仍处于同步状态。如果您使用自定义实现,则可以更改延迟,但Apple通常会拒绝它们。
查看此writeup以获取更多信息。您还可以阅读unofficial protocol documentation。
答案 1 :(得分:4)
简短的回答是:不,Apple没有提供这样做的方法。假设你需要在App Store批准你的应用程序,那你就有点不走运了。如果您可以在越狱设备上运行您的应用程序,您可以搜索未记录的API,以便您可以执行更多操作。
如果您需要在Apple的App Store中使用您的应用程序,那么您可以通过网络方式执行的大多数操作都会在“可达性”示例应用程序中进行概述。
我能想到的唯一方法就是使用Bonjour来识别主机(请参阅此处的示例代码https://developer.apple.com/library/ios/#samplecode/BonjourWeb/Introduction/Intro.html),然后ping主机。
然而:
您应该遵循Apple为AirPlay准备音频并丰富AirPlay应用的指南,而不是在此花费太多时间:http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AirPlayGuide/PreparingYourMediaforAirPlay/PreparingYourMediaforAirPlay.html#//apple_ref/doc/uid/TP40011045-CH4-SW1
希望这有帮助! :)
答案 2 :(得分:2)
您可以按-[AVAudioSession outputLatency]
,
根据outputLatency
的文件:
将启用AirPlay的设备用于音频内容可能会导致2秒的延迟。检查游戏内容的延迟。
根据我的经验,这个值在切换输出设备时会发生变化,例如: