web-dev-qa-db-fra.com

Accéder à l'URL à partir d'un objet AVPlayer?

Existe-t-il un moyen d'accéder à l'URL à partir d'un objet AVPlayer qui a été initialisé avec une URL, comme dans:

NSURL *url = [NSURL URLWithString: @"http://www.example.org/audio"];
self.player = [AVPlayer playerWithURL: url];
43
Claudijo

Un AVPlayer joue un AVPlayerItem. AVPlayerItems sont soutenus par des objets de la classe AVAsset. Lorsque vous utilisez le playerWithURL: méthode de AVPlayer il crée automatiquement le AVPlayerItem soutenu par un actif qui est une sous-classe de AVAsset nommée AVURLAsset. AVURLAsset possède une propriété URL.

Donc, oui, dans le cas où vous avez fourni, vous pouvez obtenir assez facilement le NSURL de l'élément en cours de lecture. Voici un exemple de fonction expliquant comment procéder:

-(NSURL *)urlOfCurrentlyPlayingInPlayer:(AVPlayer *)player{
    // get current asset
    AVAsset *currentPlayerAsset = player.currentItem.asset;
    // make sure the current asset is an AVURLAsset
    if (![currentPlayerAsset isKindOfClass:AVURLAsset.class]) return nil;
    // return the NSURL
    return [(AVURLAsset *)currentPlayerAsset URL];
}

Pas un Swift expert, mais il semble que cela puisse être fait en Swift plus brièvement.

func urlOfCurrentlyPlayingInPlayer(player : AVPlayer) -> URL? {
    return ((player.currentItem?.asset) as? AVURLAsset)?.url
}
80
NJones

Solution pour Swift 3

func getVideoUrl() -> URL? {
    let asset = self.player?.currentItem?.asset
    if asset == nil {
        return nil
    }
    if let urlAsset = asset as? AVURLAsset {
        return urlAsset.url
    }
    return nil
}
8
Eric Conner

Oneliner Swift 4.1 ????

let url:URL? = (player?.currentItem?.asset as? AVURLAsset)?.url
5
eonist