【问题标题】:Airplay background streaming like Spotify / Amazon MusicAirplay 后台流媒体,如 Spotify / Amazon Music
【发布时间】:2017-11-27 15:05:36
【问题描述】:

是否可以像 Spotify 或 Amazon Music 那样做 Airplay 音频流。当我使用我的应用程序中的音频设置 Airplay 流时,屏幕(在 Apple-TV 上)变黑并且只显示进度条。

是否可以在顶部角落显示小提示以及几秒钟后消失的所有音频信息并且不阻塞整个 Apple TV Ui?

还是这种 Spotify / Amazon Music 特权?

【问题讨论】:

  • 你考虑过使用MPNowPlayingInfoCenter吗?
  • AVAudioPlayer API 与本地纯音频文件一起使用会在 AirPlayed 到 Apple TV 时产生所需的结果。 (即出现“正在播放”通知,并且没有虚假的黑色全屏进度条。)但是AVAudioPlayer 的文档说它不适用于流媒体。所以我仍在努力寻找一种方法让AVPlayer 处理仅流式音频文件。
  • @BillFeth 感谢您分享您的知识。如果您在此主题上取得任何进展时告诉我/我们会很酷。
  • @ANE,Spencer 在下面概述了一个相当简洁的解决方案。如果您觉得他的回答也有帮助,请点赞。

标签: ios swift audio-streaming apple-tv airplay


【解决方案1】:

我们也遇到过这个问题。我相信 Apple 的法庭上存在一些错误,但我们找到了一个不错的解决方法,似乎可以避免副作用。

我们发现将播放器的 allowsExternalPlayback 字段设置为 NO 有时会在没有空白视频屏幕的情况下正确流式传输音频(以及正确显示正在播放信息,正确响应音量摇杆等...)。但是,我们发现它经常无法播放任何内容。

进行一些运行时内省,我们发现播放器总是能正确地从网络缓冲。但是当它遇到isPlaybackLikelyToKeepUp 事件时,它会将播放器的rate 字段设置为1,表示它正在播放,但通常实际上 不播放音频。没有报告任何错误,所以据我们所知,玩家自己认为它确实在玩,但实际上它不是。我们发现只有在为音频输出设置了 AirPlay 设备时才会发生这种挂断。

所以我们发现,在某些事件回调等关键地方,如果我们添加一个简单的单行:

if( self.avPlayer.rate == 1 ){ self.avPlayer.rate = 1; }

它会消除任何导致播放器实际上无法 AirPlay 并正确流式传输音频的内部阻塞。如果玩家已经在正确播放,则不会造成任何伤害。

【讨论】:

  • 某些事件回调和其他关键地方这些地方是什么?
  • 接收缓冲区时触发的回调、播放状态更改等位置。这个想法是把检查放在足够多的地方,这些地方足够频繁地执行,以快速踢出阻碍实际播放的任何东西。
猜你喜欢
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2014-02-05
  • 1970-01-01
相关资源
最近更新 更多