簡體   English   中英

使用AVFoundation播放IOS音樂庫內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM