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.example.org/audio"];
self.player = [AVPlayer playerWithURL: url];
An AVPlayer
plays an AVPlayerItem
. AVPlayerItem
s 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
}
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
}
AVPlayerItem extension base on @eonist answer.
extension AVPlayerItem { var url: URL? { return (asset as? AVURLAsset)?.url } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With