Accessing URL from AVPlayer object?

后端 未结 4 1572
独厮守ぢ
独厮守ぢ 2020-12-28 11:49

Is there a way to access the URL from an AVPlayer object that has been initialized with a URL, as in:

NSURL *url = [NSURL URLWithString: @\"http://www.exampl         


        
相关标签:
4条回答
  • 2020-12-28 12:21

    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
    }
    
    0 讨论(0)
  • 2020-12-28 12:34

    Oneliner swift 4.1

    0 讨论(0)
  • 2020-12-28 12:36

    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
    }
    
    0 讨论(0)
  • 2020-12-28 12:40

    AVPlayerItem extension base on @eonist answer.

    extension AVPlayerItem {
        var url: URL? {
            return (asset as? AVURLAsset)?.url
        }
    }
    0 讨论(0)
提交回复
热议问题