检测AirPlay延迟

Jas*_*tal 21 audio ios airplay

虽然我意识到AirPlay具有固有的延迟/延迟,但我想知道是否有一种方法可以让(当前假设的)iPhone应用程序检测到延迟是什么.如果是这样,延迟值有多精确?我对应用程序是否能"知道"自己的AirPlay延迟更为好奇,而不是简单地将其最小化.

Lau*_*rin 37

延迟不是来自网络抖动,而是由源设备(您的iPhone)决定.

长话短说:

  • 使用Apple设备时,它总是精确到2秒(低至毫秒).
  • 没有办法用公共API调整它.

音频延迟需要非常准确,以便多个输出可以同步播放.

关于AirPlay实施的一些解释:

  • 该协议从几个RTSP命令开始.在此握手期间,源发送 rtpTime,即播放开始的时间,这也是您的延迟.典型值为88200 = 2s x 44100 Hz.
  • AirPlay设备可以使用NTP将其时钟与源同步,以减轻网络延迟.
  • 在播放过程中,源会定期发送SYNC数据包以调整音频延迟,并确保所有设备仍处于同步状态.

如果使用自定义实现,则可以更改延迟,但Apple通常会拒绝它们.

检查这个书面记录以获取更多信息.您还可以阅读非官方协议文档.


Aar*_*ger 4

简短的回答是:不,苹果没有提供这样做的方法。假设您需要您的应用程序在 App Store 中获得批准,那么您就不太走运了。如果您可以在越狱设备上运行您的应用程序,您可以搜索未记录的 API,这将使您可以执行更多操作。

如果您需要您的应用程序在 Apple 的 App Store 中可用,您可以在网络上执行的大多数操作都在“可达性”示例应用程序中概述。

我能想到的获得良好猜测的唯一方法是使用 Bonjour 来识别主机(请参阅此处的示例代码https://developer.apple.com/library/ios/#samplecode/BonjourWeb/Introduction/Intro.html)然后 ping 主机。

然而:

  • 如果有超过 1 个 Airplay 电台,您将需要猜测或询问用户连接到哪个,或者可能取平均值。
  • 设备可能根本不响应 ping(Apple TV 和 Airport Express 都响应 ping,不确定第 3 方设备是否如此。)
  • ping 可能无法反映音频的实际延迟

您应该遵循 Apple 的指南来为 AirPlay 准备音频并丰富您的 AirPlay 应用程序,而不是在此花费太多时间:http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AirPlayGuide/ PreparingYourMediaforAirPlay/PreparingYourMediaforAirPlay.html#//apple_ref/doc/uid/TP40011045-CH4-SW1

希望这可以帮助!:)