【问题标题】:Using MPNowPlayingInfoCenter without actually playing audio使用 MPNowPlayingInfoCenter 而不实际播放音频
【发布时间】:2018-06-25 14:54:57
【问题描述】:

我正在尝试构建一个 iOS 应用程序来控制在单独的机器上运行的音乐播放器。我想使用 MPNowPlayingInfoCenter 来检查和控制这个播放器。据我所知,该应用实际上必须输出音频才能使其正常工作 (see also this answer)。

但是,例如,Spotify 应用实际上能够做到这一点在 iOS 设备上播放音频。如果您使用 Spotify Connect 在其他设备上播放音频,MPNowPlayingInfoCenter 仍会显示正确的歌曲并且控件正常工作。

这里有什么问题?一个人(概念上)必须做什么才能实现这一目标?我可以想到连续发出“无声”的音频流,但这有点蛮力。

【问题讨论】:

    标签: ios audio spotify remote-control


    【解决方案1】:

    流式静默会起作用,但您不需要一直流式传输它。只需足够长的时间发送您的“正在播放”信息。使用AVAudioPlayer,我发现发送数据的方法如此之短(假设播放器加载了 1 秒无声音频文件):

        player.play()
    
        let nowPlayingInfoCenter = MPNowPlayingInfoCenter.default()
    
        nowPlayingInfoCenter.nowPlayingInfo = [...]
    
        player.stop()
    

    我很惊讶这在单个事件循环中起作用。任何其他播放沉默的方法似乎也有效。同样,它可能非常简短(事实上,我测试中的上述代码甚至没有达到播放静音的程度)。

    我很感兴趣这对其他人是否可靠,所以如果你发现它,请发表评论。

    我对 Spotify 应用进行了一些探索。我不能 100% 确定这是否与他们使用的技术相同。他们能够以某种方式与其他音频混合。因此,您可以在手机上播放本地音频,播放 Spotify Connect 到其他设备,“正在播放”信息会相互影响。就我的目的而言,这实际上会更好,但我无法复制它。我仍然必须让音频会话至少在一段时间内不可混合(所以如果你同时播放本地音频,你会得到大约 1 秒的音频下降)。当我还在本地播放其他音频时,我确实发现 Spotify 应用程序在播放到我的 Connect 设备时的可靠性并不高。有时它会感到困惑并在它想玩的地方切换。 (诚​​然,这是一个奇怪的用例;我故意试图打破它以弄清楚他们是如何做到的。)


    编辑:我不相信 Spotify 实际上在这里做了什么特别的事情。我认为他们只是播放无声的音频。我认为让两个流同时播放与 AirPlay 而不是 Spotify 有关(我无法通过蓝牙实现,只有 AirPlay)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多