Я хочу отобразить текст песни, которая в данный момент воспроизводится системным проигрывателем iOS.
Вот мой пользовательский плеер:
import UIKit
import MediaPlayer
import AVFoundation
class NowPlayingController: NSObject {
var musicPlayer: MPMusicPlayerController {
if musicPlayer_Lazy == nil {
musicPlayer_Lazy = MPMusicPlayerController.systemMusicPlayer()
let center = NotificationCenter.default
center.addObserver(self,
selector: #selector(self.playingItemDidChange),
name: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange,
object: musicPlayer_Lazy)
musicPlayer_Lazy!.beginGeneratingPlaybackNotifications()
}
return musicPlayer_Lazy!
}
private var musicPlayer_Lazy: MPMusicPlayerController?
var nowPlaying: MPMediaItem?
//If song changes
func playingItemDidChange(notification: NSNotification) {
nowPlaying = musicPlayer.nowPlayingItem
}
}
Чтобы получить текст из элемента nowPlaying
, я пробовал 2 подхода, и оба они всегда возвращают nil
.
Этот код всегда возвращает ноль:
let lyricsText = nowPlaying?.value(forProperty: MPMediaItemPropertyLyrics) as? NSString as String?
В следующем коде MPMediaItemPropertyAssetURL
всегда возвращает nil
вместо фактического URL:
let songUrl = nowPlaying?.value(forProperty: MPMediaItemPropertyAssetURL) as? NSURL as URL?
if songUrl != nil {
let songAsset = AVURLAsset(url: songUrl!, options: nil)
lyricsText = songAsset.lyrics
Все песни находятся на устройстве (синхронизированы с iTunes), содержат тексты (отображаются в системном проигрывателе) и не защищены DRM (скопированные файлы aac/mp3).
Я тестирую это на реальном устройстве: iPhone 6s/iOS 10.3.
Любые предложения, как я могу получить текст или почему MPMediaItemPropertyAssetURL возвращает ноль?
MPMediaItemPropertyAssetURL
. Вы должны использовать его только как музыкальный автомат, где iOS воспроизводит музыку для вас. Более сложные варианты использования невозможны. - person Rhythmic Fistman   schedule 05.04.2017let lyric = nowPlaying?.lyrics let assetUrl = nowPlaying?.assetURL
также обратите внимание, что - person Bluewings   schedule 05.04.2017false
(это означает, что в песнях нет DRM):nowPlaying?.hasProtectedAsset
- person dandepeched   schedule 05.04.2017nill
- person dandepeched   schedule 05.04.2017