在我回答这个问题的过程中,我在一本书中看到了这个问题。
“然而,MPMediaItem有一个MPMediaItemPropertyAssetURL键(或assetURL属性),其值为URL。这使您可以参考磁盘上的音乐文件,...获得了MPMediaItem的资产URL,您可以使用该URL初始化AVAudioPlayer,AVPlayer或AVAsset。“
所以我尝试使用mediaPickerController来获取这样的资产URL。
func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
guard let mediaItem = mediaItemCollection.items.first else {
NSLog("No item selected.")
return
}
var songURL = mediaItem.valueForProperty(MPMediaItemPropertyAssetURL) as! NSURL
print(songURL)
self.dismissViewControllerAnimated(true, completion: nil)
}
在书中,它以此为例:
let arr = // array of MPMediaItem
let items = arr.map {
let url = $0.assetURL!
let asset = AVAsset(URL:url)
return AVPlayerItem(asset: asset)
}
self.qp = AVQueuePlayer(items:items)
self.qp.play()
我不确定如何将mediaItemCollection转换为arr变量。 songURL和MediaItemCollection的使用在picker mediaPicker函数中。我不能在它的功能之外访问它。我如何让它工作?
答案 0 :(得分:1)
行。我想出了这个。
解决方案是首先在函数之外声明变量,但在类之下。我刚刚创建了它:
class ViewController: UIViewController, MPMediaPickerControllerDelegate {
var songUrl: NSURL = NSURL()
var player = AVPlayer()
func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
guard let mediaItem = mediaItemCollection.items.first else {
NSLog("No item selected.")
return
}
songUrl = mediaItem.valueForProperty(MPMediaItemPropertyAssetURL) as! NSURL
print(songUrl)
self.dismissViewControllerAnimated(true, completion: nil)
}
现在我可以在函数外部访问songUrl。