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

Posted

技术标签:

【中文标题】AirPlay:连接到 Apple TV 时音量控制被禁用【英文标题】:AirPlay: volume control is disabled when connected to Apple TV 【发布时间】:2018-07-30 14:28:10 【问题描述】:

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

我在 Apple TV 上进行测试,音频播放良好,但始终使用最大音量,我无法更改。音量滑块被禁用,我不明白为什么会这样,因为它可以在其他应用中使用。

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

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

更新:

我正在使用 AVPlayerallowsExternalPlayback 属性为 true。

更新 2:

MPVolumeView也会出现同样的问题。

一些 Reddit 用户告诉我“假设一个人会使用输出设备(电视、音响系统等)的音量控制来控制音量。”、“就像当你通过 hdmi 将 MacBook 插入电视",这是有道理的,但我怎么能强制不使用输出设备来控制音量呢?它在其他播客应用中的工作方式与我预期的一样。

【问题讨论】:

【参考方案1】:

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

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

对纯音频应用(例如 Podcast 和 Overcast)的标准行为进行了更改。在这些情况下,无论如何都会启用音量控制,除了硬件音量控制之外,它还提供音频的软件音量调节。你没有得到这个的原因是你使用了 AVQueuePlayer,它被认为是一个视频播放器,而不是一个纯音频播放器。我修改了您的示例项目以改用 AVAudioPlayer,并且按预期为 AirPlay 输出启用了音量控制。

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

解决方案:

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

最后说明:

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

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

【讨论】:

以上是关于AirPlay:连接到 Apple TV 时音量控制被禁用的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 airplay (Apple TV) 将自定义视图推送到外部显示器

新 Apple TV(第 3 代)上的 Airplay,第二个屏幕不是 1080p

Airplay:从 MPMoviePlayerController 播放电影只会导致音频流式传输到 Apple tv

如何在airplay中区分apple tv和其他设备?

由于 tvOS 10.2 Apple TV 显示 Airplay 连接需要 iOS 7.1 或更高版本错误

我可以在 iOS 4.3 中使用 AirPlay 将静止图像发送到 Apple TV