如何获得另一个应用程序正在播放的audio

我怎样才能访问另一个应用程序的当前正在播放的audio – 实际的audio项目,但也欢迎元数据。 我可以看到,这个问题已经被问了很多,但几年来提供的解决scheme很less。 我明白苹果的理念可能不希望一个应用程序能够做到这一点。 我也明白,这样的请求可能在iOS API之外。 据说,我真的很喜欢某种解决scheme。

从逻辑上讲,我觉得

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo 

应该返回当前正在播放的信息; 但是,正如其他人所提到的,这个值总是nil在您的应用程序之外播放的audio。 值得注意的是,stream行的audio应用程序似乎无法使用MPNowPlayingInfoCenter类,使这种audio失败。

如果使用默认的音乐应用程序,可以使用

 MPMusicPlayerController.systemMusicPlayer().nowPlayingItem 

但是,通过Podcast应用程序,Spotify,Pandora,Safari等访问audio播放的更一致的方式是什么?

有没有人find这个解决scheme? 有没有旧的Objective-C框架支持这个function?

如果有某种方法可以访问当前正在播放的项目的audiopath,则可以使用一种方法。 例如,如果我能得到当前正在播放的项目的path,我可以从中创build一个AV对象:

 AVAudioPlayer(contentsOfURL: audioUrl) 

那么有什么办法可以得到当前正在播放的项目的audiourl,并以这种方式使用它?

另一种方法更好吗?

如果一个本地解决scheme不存在 ,是否有可能一起躲避它的工作? 任何意见或想法的欢迎。

编辑:我不相信有人能够实现这一点; 不过,我想很多人都想。 如果已经解决,请链接! 🙂

这在iOS中目前不可行。 只需将您的AVAudioSession类别选项更改为。 MixWithOthers ,从其他应用程序获取信息歌曲信息的选项将导致您的nowPlayingInfo被忽略。

iOS仅考虑将不混合的应用程序包含在MPNowPlayingInfoCenter ,因为如果有多个混合应用程序同时播放,那么对于哪个应用程序将显示在(例如)控制中心中是不确定的。

build议:一个选项是使用音乐指纹识别algorithm来识别从您的应用程序中logging它正在播放什么。

一些有趣的项目在这个方向:

Gracenote https://developer.gracenote.com/ Gracenote(由Sony所有)已经开放了SDK和API,并且拥有一个合适的开发者门户。

EchoNest&Spotify API http://developer.echonest.com/自2016年3月起与Spotify合作

ACRCloud https://www.acrcloud.com/为自定义文件提供ACR解决scheme,例如电视广告,音乐技术