AirPlay:连接到 Apple TV 时禁用音量控制

ric*_*ira 3 avfoundation ios avplayer airplay

我正在播客应用程序中实现AirPlay 支持。我添加了一个AVRoutePickerView,AirPlay 设备加载正常,我可以成功连接到设备。

我正在 Apple TV 上进行测试,音频播放得很好,但它始终使用最大音量,我无法更改它。音量滑块被禁用,我无法理解为什么会发生这种情况,因为它可以在其他应用程序中使用。

在此输入图像描述

例如,我可以更改 Overcast 中预期的音量,但音频不会以最大音量开始:

在此输入图像描述

我究竟做错了什么?我是否缺少任何选项。

更新:

我正在使用AVPlayerandallowsExternalPlayback属性是 true 。

更新2:

同样的问题也发生在MPVolumeView.

一些 Reddit 用户告诉我“它假设一个人会使用输出设备(电视、音响系统等)的音量控制来控制音量。 ”,“就像当你通过 HDMI 将 MacBook 插入电视一样”,并且它有道理,但我怎样才能强制不使用输出设备来控制音量呢?它的工作原理正如我在其他播客应用程序中所预期的那样。

ric*_*ira 6

在与 DTS 工程师讨论后,他找到了一个解决方法(rdar://42881405\n使用 AirPlay 连接到 Apple TV 时音量控制被禁用)。

\n
\n

“根据工程设计,对于某些 Apple TV 配置,禁用音量控制是正确的行为,其中音频通过 HDMI 发送到实际的电视。在这种情况下,音量由电视本身控制。

\n

此标准行为的更改是针对纯音频应用程序(例如 Podcasts 和 Overcast)。在这些情况下,无论如何都会启用音量控制,并且除了硬件音量控制之外,它还提供音频的软件音量调整。您\xe2\x80\x99t得到这个的原因是您使用了AVQueuePlayer,它被视为视频播放器,而不是纯粹的音频播放器。我修改了您的示例项目以使用 AVAudioPlayer 代替,并且按预期为 AirPlay 输出启用了音量控制。

\n

但是,AVAudioPlayer 无法播放流媒体资源,因此在您的用例中它可能不是一个可行的解决方案。我\xe2\x80\x99m仍在研究是否可以通过其他播放技术获得纯音频行为。”

\n
\n

解决方案:

\n

基本上,将allowsExternalPlaybackAVPlayer/AVQueuePlayer 的属性设置为false将禁止将视频播放路由到 AirPlay,并且(作为副作用)允许纯音频播放。

\n

最后说明:

\n

即便如此,我认为使用新的AVSampleBufferAudioRendererAVSampleBufferRenderSynchronizer类也可以,但它们的设置要复杂得多。

\n

rdar://42966681 已创建:提供一个 API,用于将使用 AVPlayer/AVQueuePlayer 的应用程序指定为“仅音频”

\n