如何获取另一个应用程序当前正在播放的音频
How to get another app's currently playing audio
我如何访问另一个应用程序当前正在播放的音频 - 实际的音频项目但也欢迎使用元数据。我可以看到这个问题已经被问了很多,但多年来提供的解决方案很少。我理解苹果 可能 不希望应用程序能够执行此操作的理念。我也明白这样的请求是可能在iOSAPI之外。话虽如此,我真的很想要某种解决方案。
逻辑上,我觉得
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo
应该return当前正在播放的任何内容的信息;但是,正如其他人所提到的,对于在您的应用程序之外播放的音频,此值始终为 nil
。值得注意的是,流行的音频应用程序似乎无法使用 MPNowPlayingInfoCenter class,导致此类音频无法出现。
如果使用默认的音乐应用程序,可以使用
MPMusicPlayerController.systemMusicPlayer().nowPlayingItem
但是,访问通过播客应用程序、Spotify、Pandora、Safari 等播放的音频的更一致的方法是什么?
有人找到解决办法了吗?是否有支持此功能的旧 Objective-C 框架?
如果有某种方式我可以访问当前正在播放的项目的音频路径,那么一种方法可能是可行的。例如,如果我可以获得当前播放项目的路径,我可以从中创建一个 AV 对象:
AVAudioPlayer(contentsOfURL: audioUrl)
那么有没有办法获取当前播放项目的音频 url 并以此方式使用它?
另一种方法更好吗?
如果本机解决方案 不存在 ,是否可以 bodge 一些东西一起工作?欢迎任何建议或想法。
编辑:我不相信有人能够做到这一点;但是,我认为很多人都愿意。如果这个已经解决了,请link吧! :)
iOS 目前无法做到这一点。只需将您的 AVAudioSession
类别选项更改为 .MixWithOthers
,这是一个从其他应用程序获取信息歌曲信息的选项,导致您的 nowPlayingInfo
被忽略。
iOS 仅考虑将非混合应用程序包含在 MPNowPlayingInfoCenter
中,因为如果同时有多个混合应用程序在播放,则不确定哪个应用程序会出现在(例如)控制中心中同时。
建议: 一个选项是使用 音乐指纹算法 通过从您的应用程序录制来识别正在播放的内容。
这方面的一些有趣的项目:
Gracenote https://developer.gracenote.com/ Gracenote(归索尼所有)已经开放了它的 SDK 和 APIs,并且有一个合适的开发门户。
EchoNest 和 Spotify API http://developer.echonest.com/ 自 2016 年 3 月起与 Spotify 融合
ACRCloud https://www.acrcloud.com/ 为电视广告、音乐等自定义文件提供 ACR 解决方案
我如何访问另一个应用程序当前正在播放的音频 - 实际的音频项目但也欢迎使用元数据。我可以看到这个问题已经被问了很多,但多年来提供的解决方案很少。我理解苹果 可能 不希望应用程序能够执行此操作的理念。我也明白这样的请求是可能在iOSAPI之外。话虽如此,我真的很想要某种解决方案。
逻辑上,我觉得
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo
应该return当前正在播放的任何内容的信息;但是,正如其他人所提到的,对于在您的应用程序之外播放的音频,此值始终为 nil
。值得注意的是,流行的音频应用程序似乎无法使用 MPNowPlayingInfoCenter class,导致此类音频无法出现。
如果使用默认的音乐应用程序,可以使用
MPMusicPlayerController.systemMusicPlayer().nowPlayingItem
但是,访问通过播客应用程序、Spotify、Pandora、Safari 等播放的音频的更一致的方法是什么?
有人找到解决办法了吗?是否有支持此功能的旧 Objective-C 框架?
如果有某种方式我可以访问当前正在播放的项目的音频路径,那么一种方法可能是可行的。例如,如果我可以获得当前播放项目的路径,我可以从中创建一个 AV 对象:
AVAudioPlayer(contentsOfURL: audioUrl)
那么有没有办法获取当前播放项目的音频 url 并以此方式使用它?
另一种方法更好吗?
如果本机解决方案 不存在 ,是否可以 bodge 一些东西一起工作?欢迎任何建议或想法。
编辑:我不相信有人能够做到这一点;但是,我认为很多人都愿意。如果这个已经解决了,请link吧! :)
iOS 目前无法做到这一点。只需将您的 AVAudioSession
类别选项更改为 .MixWithOthers
,这是一个从其他应用程序获取信息歌曲信息的选项,导致您的 nowPlayingInfo
被忽略。
iOS 仅考虑将非混合应用程序包含在 MPNowPlayingInfoCenter
中,因为如果同时有多个混合应用程序在播放,则不确定哪个应用程序会出现在(例如)控制中心中同时。
建议: 一个选项是使用 音乐指纹算法 通过从您的应用程序录制来识别正在播放的内容。
这方面的一些有趣的项目:
Gracenote https://developer.gracenote.com/ Gracenote(归索尼所有)已经开放了它的 SDK 和 APIs,并且有一个合适的开发门户。
EchoNest 和 Spotify API http://developer.echonest.com/ 自 2016 年 3 月起与 Spotify 融合
ACRCloud https://www.acrcloud.com/ 为电视广告、音乐等自定义文件提供 ACR 解决方案