我正在播客应用中实现 AirPlay支持。我添加了AVRoutePickerView
,并且AirPlay设备可以正常加载,并且可以成功连接到设备。
我正在Apple TV上进行测试,音频播放效果很好,但始终使用最大音量,因此无法更改。音量滑块已禁用,我不明白为什么会发生这种情况,因为它可以在其他应用程序中使用。
例如,我可以在“预期的覆盖”中更改音量,并且音频不是从最大音量开始的:
我在做什么错?我错过任何选择了吗?
更新:
我正在使用AVPlayer
并且allowsExternalPlayback
属性为true。
UPDATE2:
MPVolumeView
也会发生相同的问题。
一些Reddit用户告诉我“ 它假设有人会使用输出设备(电视,音响系统等)的音量控制来控制音量。”,“ 您可以通过hdmi 将MacBook插入电视”,这很有意义,但是如何强制不使用输出设备来控制音量?它可以在其他播客应用程序中正常运行。
答案 0 :(得分:2)
与DTS工程师讨论后,他找到了解决方法(rdar:// 42881405 使用AirPlay连接到Apple TV时,音量控制被禁用。
“根据工程,对于某些Apple TV配置,禁用音量控制是正确的行为,其中音频是通过HDMI发送到实际电视的。在这种情况下,音量由电视本身控制。
仅音频应用程序(例如Podcast和Overcast)对此标准行为进行了更改。在那些情况下,无论如何都会启用音量控制,并且它除了提供硬件音量控制外,还提供音频的软件音量调节。无法获得此信息的原因是您使用了AVQueuePlayer,它被视为视频播放器,而不是纯音频播放器。我修改了示例项目,改而使用AVAudioPlayer,并且按预期为AirPlay输出启用了音量控件。
但是,AVAudioPlayer无法播放流式资产,因此在您的用例中可能不是可行的解决方案。我仍在研究是否可以通过其他播放技术获得纯音频行为。”
基本上,将AVPlayer / AVQueuePlayer的 allowsExternalPlayback
属性设置为 false
,将禁止将视频播放路由到AirPlay,并且(如副作用)可以播放纯音频。
即使如此,我认为使用新的AVSampleBufferAudioRenderer
和AVSampleBufferRenderSynchronizer
类也可以,但是设置起来更复杂。
创建的rdar:// 42966681:提供使用AVPlayer / AVQueuePlayer将应用程序指定为“仅音频”的API。