Accessing URL from AVPlayer object? Accessing URL from AVPlayer object? ios ios

Accessing URL from AVPlayer object?


An AVPlayer plays an AVPlayerItem. AVPlayerItems are backed by objects of the class AVAsset. When you use the playerWithURL: method of AVPlayer it automatically creates the AVPlayerItem backed by an asset that is a subclass of AVAsset named AVURLAsset. AVURLAsset has a URL property.

So, yes, in the case you provided you can get the NSURL of the currently playing item fairly easily. Here's an example function of how to do this:

-(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];}

Not a swift expert, but it seems it can be done in swift more briefly.

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


Oneliner swift 4.1 🔸

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


Solution for 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}