[英]Play IOS Music Library Content Using AVFoundation
我正在嘗試編寫一個IOS應用程序,該應用程序將播放我的iPhone音樂庫內容,顯示作品以及“宣布”標題,藝術家等。
使用Apple的Media Player框架,它可以很好地工作。 我可以顯示播放列表名稱,並將歌曲排入所選播放列表。 我使用“ MPMusicPlayerControllerNowPlayingItemDidChange”觀察者通知來暫停播放,檢索元數據並通過AVSpeechSynthesizer進行通知。 在遇到可怕的“媒體播放器框架無法在后台響應觀察者通知”問題之前,我一直是一個快樂的露營者。
因此,我開始研究AVFoundation框架。 我發現了一個示例,該示例在后台通過URL播放本地歌曲文件。 我在嘗試通過AVFoundation檢索音樂庫內容時失敗了。 我也無法將通過Media Player框架檢索的內容提供給AVFoundation播放器。 (注意:從MPMediaItem檢索的URL是偽造的“ ipod-library://item/item.m4a?id = ######################## ## “格式。使用此“ URL”創建AVPlayerItem無效。)
有沒有人設法做到這一點? 我正在開發自己的用法。 我無意將應用程序發布在Apple的App Store中,因此我願意使用隱藏的API或未經Apple認可的方法。
一個Swift代碼示例會很棒。 (Objective-C沒有那么多)
從用戶的庫中獲取了assetURL
,然后獲取其assetURL
。 從生成的URL創建AVPlayer確實可行。
來自我的示例應用之一的實際代碼:
func oneSong () -> (URL?, String?) {
let query = MPMediaQuery.songs()
// always need to filter out songs that aren't present
let isPresent = MPMediaPropertyPredicate(value:false,
forProperty:MPMediaItemPropertyIsCloudItem,
comparisonType:.equalTo)
query.addFilterPredicate(isPresent)
let item = query.items?[0]
return (item?.assetURL, item?.title)
}
@IBAction func doPlayOneSongAVPlayer (_ sender: Any) {
let (url, title) = self.oneSong()
if let url = url, let title = title {
self.avplayer = AVPlayer(url:url)
self.avplayer.play()
MPNowPlayingInfoCenter.default().nowPlayingInfo = [
MPMediaItemPropertyTitle : title
]
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.