【问题标题】:How to get another app's currently playing audio [duplicate]如何获取另一个应用程序当前正在播放的音频[重复]
【发布时间】:2016-05-12 22:03:16
【问题描述】:

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

从逻辑上来说,我觉得

MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo 

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

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

MPMusicPlayerController.systemMusicPlayer().nowPlayingItem

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

有没有人找到解决这个问题的方法?是否有任何旧的 Objective-C 框架支持此功能?

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

AVAudioPlayer(contentsOfURL: audioUrl)

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

另一种方法更好吗?

如果原生解决方案不存在,是否有可能bodge 一起工作以使其工作?欢迎任何建议或想法。

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

【问题讨论】:

  • 您发布的代码可能会返回该信息,但前提是其他玩家将其提供给MPNowPlayingInfoCenter
  • 我使用 Apple Music 和股票播客应用 @Larme 进行了测试。我执行不正确吗?
  • 问题是这是不可能的。您无法获得有关其他应用程序正在做什么的任何信息。想象一个应用程序可以跟踪您在 youtube 或 Safari 上观看的内容。这将是一个巨大的安全威胁。
  • 您是否可以选择使用越狱功能或 API 录制系统音频?
  • @Nucl3ic boseconnect 应用程序提供了类似的功能。该应用程序可以控制潘多拉歌曲。任何想法..

标签: ios iphone swift avfoundation


【解决方案1】:

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

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

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

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

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 解决方案

【讨论】:

  • 对不起@Paul,我从未接受您的回答。这是正确的
  • @modesitt - 有人知道这些年来情况是否发生了变化?
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多