有没有办法从使用URL初始化的AVPlayer对象访问URL,如:
NSURL *url = [NSURL URLWithString: @"http://www.example.org/audio"];
self.player = [AVPlayer playerWithURL: url];
答案 0 :(得分:80)
AVPlayer
播放AVPlayerItem
。 AVPlayerItem
由类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)
let url:URL? = (player?.currentItem?.asset as? AVURLAsset)?.url
答案 3 :(得分:0)
基于@eonist答案的AVPlayerItem扩展名。
extension AVPlayerItem { var url: URL? { return (asset as? AVURLAsset)?.url } }