Есть ли способ получить доступ к URL-адресу из объекта AVPlayer, который был инициализирован URL-адресом, например:
NSURL *url = [NSURL URLWithString: @"http://www.example.org/audio"];
self.player = [AVPlayer playerWithURL: url];
Есть ли способ получить доступ к URL-адресу из объекта AVPlayer, который был инициализирован URL-адресом, например:
NSURL *url = [NSURL URLWithString: @"http://www.example.org/audio"];
self.player = [AVPlayer playerWithURL: url];
An AVPlayer
играет a AVPlayerItem
. AVPlayerItem
поддерживаются объектами класса AVAsset
. Когда вы используете метод playerWithURL:
AVPlayer
, он автоматически создает 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];
}
Не быстрый специалист, но, похоже, это можно сделать быстрее.
func urlOfCurrentlyPlayingInPlayer(player : AVPlayer) -> URL? {
return ((player.currentItem?.asset) as? AVURLAsset)?.url
}
Решение для 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
}
let url: URL? = (player?.currentItem?.asset as? AVURLAsset)?.url