从AVPlayer对象访问URL?

时间:2012-12-26 02:48:48

标签: ios avplayer

有没有办法从使用URL初始化的AVPlayer对象访问URL,如:

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

4 个答案:

答案 0 :(得分:80)

AVPlayer播放AVPlayerItemAVPlayerItem由类AVAsset的对象支持。当您使用playerWithURL: AVPlayer方法时,它会自动创建由资产支持的AVPlayerItem,该资产是名为AVAsset的{​​{1}}的子类。 AVURLAsset有一个AVURLAsset属性。

所以,是的,在您提供的情况下,您可以非常轻松地获得当前播放项目的URL。以下是如何执行此操作的示例函数:

NSURL

不是一个快速的专家,但似乎可以更迅速地完成。

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

答案 1 :(得分:8)

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
}

答案 2 :(得分:3)

Oneliner swift 4.1

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

答案 3 :(得分:0)

基于@eonist答案的AVPlayerItem扩展名。

extension AVPlayerItem {
    var url: URL? {
        return (asset as? AVURLAsset)?.url
    }
}