Воспроизведение музыкальной композиции Apple Music не работает - PullRequest
0 голосов
/ 20 мая 2018

Попытка воспроизведения песни с использованием 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 Music Library, я использую их 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" в качестве параметра воспроизведения itemID для beginPlayback (я.B0VN4GGf7Eldk).Это правильно или должно быть что-то еще?Попытка выяснить, почему это не будет играть.

Редактировать:

Также это можно увидеть в консоли

[SDKPlayback] - [MPMusicPlayerController prepareToPlayWithCompletionHandler:] завершена ошибка: Ошибка домена = MPCPlayerRequestErrorDomain Code = 1 "НетКоманды предоставлены. "UserInfo = {NSDebugDescription = Команды не предоставлены.} [SDKPlayback] - [Воспроизведение MPMusicPlayerController] завершена ошибка: Ошибка домена = MPCPlayerRequestErrorDomain Code = 1000 "Не удалось отправить команду 0" UserInfo = {NSDebugDescription = Не удалось отправить команду 0 0, NSUnderlyingcrorОшибка домена = MPCPlayerRequestErrorDomain Code = 1000 "Не удалось отправить команду 0 (MRMediaRemoteCommandHandlerStatus = 1)" UserInfo = {NSDebugDescription = Не удалось отправить команду 0 (MRMediaRemoteCommandHandlerStatus = 1), MPCPlayerErrorKeyMediaRemoteCommandHandlerStatus = 1}}}

1025 *

1 Ответ

0 голосов
/ 25 мая 2018

Оказывается, что для элементов библиотеки я не должен использовать веб-API.Я просто должен был получить доступ к библиотеке из MediaPlayer API.

Я могу получить доступ к своим плейлистам с помощью

let playlistQuery = MPMediaQuery.playlists()

, тогда у каждого элемента есть идентификатор магазина

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

Я могу воспроизводить элементы с этим идентификатором.

...