有没有办法从已初始化为URL的AVPlayer对象,请访问网址为:从AVPlayer对象访问URL?
NSURL *url = [NSURL URLWithString: @"http://www.example.org/audio"];
self.player = [AVPlayer playerWithURL: url];
有没有办法从已初始化为URL的AVPlayer对象,请访问网址为:从AVPlayer对象访问URL?
NSURL *url = [NSURL URLWithString: @"http://www.example.org/audio"];
self.player = [AVPlayer playerWithURL: url];
一个AVPlayer
起着AVPlayerItem
。 AVPlayerItem
s支持类AVAsset
的对象。当您使用的AVPlayer
的playerWithURL:
方法,它会自动创建了由资产名为AVURLAsset
的AVAsset
一个子类支持的AVPlayerItem
。 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];
}
不是一个迅速的专家,但它似乎可以做得更快捷。
func urlOfCurrentlyPlayingInPlayer(player : AVPlayer) -> URL? {
return ((player.currentItem?.asset) as? AVURLAsset)?.url
}
可能要检查的是'player.currentItem'不是'nil'也是空的init – jocull
@jocull您当然可以检查'nil'以便不浪费时间将消息发送到'nil'的情况。但是objective-c的美妙之处在于这段代码是完全安全的。在objective-c发送消息给'nil'不会崩溃,只是返回一个'nil'或'0'或'NO'(取决于返回类型,它们都是一样的)。因此,唯一需要检查的是我包含的if语句,以确保资产是一个url资产,因为如果它不是,那么它不会响应'-URL'选择器,并且会崩溃。 – NJones
我忘记了当我写这个时发生了什么,但是如果'player.currentItem'为零,那么尝试使用'player.currentItem.asset'会崩溃。这是唯一需要注意的事情。 – jocull
解夫特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
}
的'AVPlayer' [文档](https://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVPlayer_Class/Reference/ Reference.html)似乎没有提供抓取URL的方法。你可以尝试看看它是否对'@“URL”'进行了各种排列的'valueForKey:'响应,但我怀疑它会被公开。 – coneybeare