如何从 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 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个

如何从Mac从android studio中的fabric注销? [复制]