web-dev-qa-db-ja.com

AVPlayerオブジェクトからURLにアクセスしますか?

次のように、URLで初期化されたAVPlayerオブジェクトからURLにアクセスする方法はありますか?

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

AVPlayerAVPlayerItemを再生します。 AVPlayerItemsはAVAssetクラスのオブジェクトによってサポートされます。 AVPlayerplayerWithURL:メソッドを使用すると、AVPlayerItemという名前のAVAssetのサブクラスであるアセットに連動する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];
}

Swiftエキスパートではありませんが、Swiftより簡単に行うことができます。

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

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