Apple Music Song播放不起作用

时间:2018-05-20 04:09:02

标签: ios swift cocoa-touch mpmusicplayercontroller apple-musickit

尝试使用以下代码使用MPMusicPlayerController播放歌曲

let musicPlayerController = MPMusicPlayerController.systemMusicPlayer

func beginPlayback(itemID: String) {

   let descripter = MPMusicPlayerStoreQueueDescriptor(storeIDs: [itemID])
    descripter.startItemID = itemID

    musicPlayerController.setQueue(with: descripter)

    musicPlayerController.prepareToPlay(completionHandler: {(error : Error?) in
        print()
        self.musicPlayerController.play()
    })


}

然而,在控制台中我经常看到

  

[MPMusicPlayerController prepareToPlay] timeout

并且要么没有任何反应,要么播放器将以错误的歌曲开始,可能是我设备上的本地歌曲。

我正在尝试从我的Apple音乐库播放一首歌曲,我使用他们的API获取我的播放列表,然后是歌曲,曲目响应如下:

attributes =     {
    albumName = Villains;
    artistName = "Queens of the Stone Age";
    artwork =         {
        height = 1200;
        url = "https://is3-ssl.mzstatic.com/image/thumb/Music117/v4/8b/19/86/8b19867d-f500-5396-bd6f-e89c0a69adcd/dj.tvdpbelw.jpg/{w}x{h}bb.jpg";
        width = 1200;
    };
    durationInMillis = 341825;
    name = "Feet Don\U0092't Fail Me";
    playParams =         {
        id = "i.B0VN4GGf7Eldk";
        isLibrary = 1;
        kind = song;
    };
    trackNumber = 1;
};
href = "/v1/me/library/songs/i.B0VN4GGf7Eldk";
id = "i.B0VN4GGf7Eldk";
type = "library-songs";

}

我在这里使用“id”作为beginPlayback(i.B0VN4GGf7Eldk)的itemID播放参数。这是正确的还是应该是别的?试图找出为什么这不会发挥作用。

编辑:

也在控制台中看到这个

  

[SDKPlayback] - [MPMusicPlayerController prepareToPlayWithCompletionHandler:]已完成错误:错误Domain = MPCPlayerRequestErrorDomain Code = 1“未提供任何命令。” UserInfo = {NSDebugDescription =未提供命令。}   [SDKPlayback] - [MPMusicPlayerController播放]已完成错误:错误域= MPCPlayerRequestErrorDomain代码= 1000“无法发送命令0”UserInfo = {NSDebugDescription =无法发送命令0,NSUnderlyingError = 0x1c8045b20 {错误域= MPCPlayerRequestErrorDomain代码= 1000“无法发送命令0(MRMediaRemoteCommandHandlerStatus = 1)“UserInfo = {NSDebugDescription =发送命令0失败(MRMediaRemoteCommandHandlerStatus = 1),MPCPlayerErrorKeyMediaRemoteCommandHandlerStatus = 1}}}

1 个答案:

答案 0 :(得分:0)

事实证明,对于Library项目,我不应该使用Web API。我应该只是从MediaPlayer API访问该库。

我可以使用

访问我的播放列表
let playlistQuery = MPMediaQuery.playlists()

然后每个项目都有商店ID

let playlist = playlistQuery.first
for item in playlist.items {
  print(item.playbackStoreId)
}

我可以播放带有该ID的项目。