有沒有辦法從已初始化爲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