检测AirPlay延迟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测AirPlay延迟相关的知识,希望对你有一定的参考价值。

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

答案

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

长话短说:

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

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

关于AirPlay实施的一些解释:

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

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

查看此writeup以获取更多信息。你也可以阅读unofficial protocol documentation

另一答案

简短的回答是:不,Apple没有提供这样做的方法。假设你需要在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,不确定第三方设备。)
  • ping可能无法反映音频的实际延迟

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

希望这可以帮助! :)

另一答案

您可以通过-[AVAudiosession outputLatency]查询iOS当前的硬件音频延迟,

根据outputLatency的文件:

为您的音频内容使用支持AirPlay的设备可能会导致2秒的延迟。检查游戏内容的延迟。

根据我的经验,这个值在切换输出设备时会发生变化,例如:

  • 演讲者:~10ms
  • 蓝牙:~100 + ms
  • AirPlay:2s

以上是关于检测AirPlay延迟的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中针对airplay、蓝牙和相关技术的近似音频延迟

是否有任何公共 api 来检测可用的 AirPlay

iOS 是不是提供任何功能来检测外部屏幕是“硬连线”电视输出/HDMI 还是“网络”Airplay 显示器/设备?

Android中切换标签片段之间的延迟

AirPlay 的音频输出路径

如何使用 AirPlay 查找可用屏幕?