ios - 如何获取另一个应用程序当前正在播放的音频

标签 ios iphone swift avfoundation

<分区>

我如何访问另一个应用程序当前正在播放的音频 - 实际的音频项目但也欢迎使用元数据。我可以看到这个问题已经被问了很多,但多年来提供的解决方案很少。我理解苹果的理念,可能不希望应用能够做到这一点。我也明白这样的请求可能在 iOS API 之外。话虽如此,我真的很想要某种解决方案。

从逻辑上讲,我觉得

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo 

应该返回当前正在播放的信息;但是,正如其他人所提到的,对于在您的应用程序之外播放的音频,此值始终为 nil。值得注意的是,流行的音频应用程序似乎无法使用 MPNowPlayingInfoCenter 类,导致此类音频无法出现。

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

MPMusicPlayerController.systemMusicPlayer().nowPlayingItem

但是,通过播客应用程序、Spotify、Pandora、Safari 等访问音频播放的更一致的方法是什么?

有人找到解决办法了吗?是否有任何旧的 Objective-C 框架支持此功能?

如果有某种方式我可以访问当前正在播放的项目的音频路径,那么一种方法可能是可行的。例如,如果我可以获得当前播放项目的路径,我可以从中创建一个 AV 对象:

AVAudioPlayer(contentsOfURL: audioUrl)

那么有没有办法获取当前播放项目的音频 url 并以这种方式使用它?

另一种方法更好吗?

如果 native 解决方案不存在,是否可以隐藏某些东西以使其工作?欢迎任何建议或想法。

编辑:我不相信有人能够做到这一点;但是,我认为很多人都愿意。如果已解决,请链接! :)

最佳答案

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

iOS 仅考虑将非混合应用包含在 MPNowPlayingInfoCenter 中,因为如果有多个混合应用同时播放,则不确定哪个应用会显示在(例如)控制中心中.

建议:一个选项是使用音乐指纹识别算法,通过从您的应用程序录制来识别正在播放的内容。

这方面的一些有趣的项目:

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

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

ACRCloud https://www.acrcloud.com/为电视广告、音乐技术等自定义文件提供 ACR 解决方案

关于ios - 如何获取另一个应用程序当前正在播放的音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37198219/

相关文章:

ios - 在 Swift 中为 DebugPrintable 实现 debugDescription

swift - iOS 13 - 右栏按钮项目在模态表演示中偏移

iphone - 具有编辑和删除功能的UIView叫什么?

ios - 此类不符合键值编码标准(带有 Storyboard )

ios - Swift - 拍照或选择现有的

ios - 在iOS中检测音频文件中的间隙

iphone - 如何通过从 UIViewController 向右或向左滑动来更改 UIImageView 中的图像

iphone - 通过UITextField的UISearchBar功能

iphone - 如何判断您是否触摸了 CCLabel?

arrays - 在 Swift 中将数组变量转换为数据