0

Dans ma quête pour répondre à cette question, je suis tombé sur ceci dans un livre. "MPMediaItem, cependant, a une clé MPMediaItemPropertyAssetURL (ou une propriété assetURL) dont la valeur est une URL.Cela vous donne une référence au fichier musical sur le disque, ... ayant obtenu l'URL de l'asset de MPMediaItem, vous pouvez l'utiliser URL pour initialiser un AVAudioPlayer, un AVPlayer ou un AVAsset. " J'ai donc essayé d'utiliser mediaPickerController pour obtenir l'URL de l'actif comme ceci.Comment puis-je obtenir un mediaItemCollection de mediaPickerController à lire sur un AVPlayer?

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) 
} 

Dans le livre, il donne cet exemple:

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() 

Je ne suis pas sûr de savoir comment obtenir le mediaItemCollection à la variable arr. L'utilisation de songURL et MediaItemCollection sont dans la fonction mediaPicker du sélecteur. Je ne peux pas y accéder en dehors de sa fonction. Comment puis-je faire fonctionner ça?

Répondre

1

OK. J'ai compris ça.

La solution consiste à déclarer la variable en dehors de la fonction en premier, mais sous la classe. Je viens de créer comme ceci:

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) 
} 

Maintenant, je peux accéder à la songUrl en dehors de la fonction.