如何从 mediaPickerController 获取 mediaItemCollection 以在 AVPlayer 上播放?
Posted
技术标签:
【中文标题】如何从 mediaPickerController 获取 mediaItemCollection 以在 AVPlayer 上播放?【英文标题】:How do I get a mediaItemCollection from the mediaPickerController to play on an AVPlayer? 【发布时间】:2016-02-13 14:38:11 【问题描述】:为了回答这个问题,我在一本书中遇到了这个问题。
“然而,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 的使用都在选择器 mediaPicker 函数内部。我无法在它的功能之外访问它。我如何让它发挥作用?
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于如何从 mediaPickerController 获取 mediaItemCollection 以在 AVPlayer 上播放?的主要内容,如果未能解决你的问题,请参考以下文章
如何从外部从 GitHub 加载 JavaScript 文件? [复制]
如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数