Отображение обложки для аудиопотока в Swift и AVPlayer?

Я использую AVPlayerViewController для воспроизведения аудиопотока на tvOS, и теперь я хочу, чтобы некоторые связанные изображения отображались одновременно.

Я не уверен, должен ли я как-то накладывать его поверх или сообщать AVPlayerViewController об обложке. Если это последнее, я не вижу правильного способа сообщить об этом AVPlayerViewController? Есть ли у кого-нибудь указания относительно соответствующего подхода?

class StreamPlayerViewController: AVPlayerViewController 

    var playerItem:AVPlayerItem?

    override func viewDidLoad() {
        let videoURL = NSURL(string: "http://example.org/aac.m3u")
        playerItem = AVPlayerItem(URL: videoURL!)
        self.player=AVPlayer(playerItem: playerItem!)

        let playerLayer=AVPlayerLayer(player: player)
        playerLayer.frame=CGRectMake(0, 0, 300, 50)
        self.view.layer.addSublayer(playerLayer)

        // TODO add art work or other metadata, not coming from stream
        // TODO Tell player stream is of infinite time

        self.player?.play()
    }
}

person Andre M    schedule 03.05.2016    source источник
comment
Используйте contentOverlayView. См. мой ответ здесь: AVPlayerViewController, использующий AVPlayer только для аудио   -  person JAL    schedule 03.05.2016
comment
Решение @JAL было ближе к тому, что было у меня, но мне нужно было настроить его, чтобы оно правильно центрировалось. Я поделюсь своей адаптацией в качестве ответа.   -  person Andre M    schedule 03.05.2016
comment
@JAL Я приму ваш ответ, но вы можете добавить в свой пример код для правильного центрирования?   -  person Andre M    schedule 03.05.2016


Ответы (1)


После комментария, предоставленного @JAL (исходный код), следующий код:

override func viewWillAppear(animated: Bool) {
    let image = UIImage(named: "stationAlbumArt")
    let albumArtView = UIImageView(image: image)
    // ensure view is screen size
    albumArtView.frame =  UIScreen.mainScreen().bounds
    // set bounds, so that image stretch to fill
    albumArtView.bounds = CGRectMake(0, 0, image!.size.width, image!.size.height)
    self.contentOverlayView?.addSubview(albumArtView)
}

Два ключевых дополнения здесь — установка рамки и границ. Кадр здесь использует размер экрана, поскольку self.view.frame недоступен, пока не будет вызван viewDidAppear(). Необходимо установить границы, чтобы изображение не растягивалось до заполнения экрана.

Еще одна вещь, хотя экземпляр AVPlayerLayer должен быть создан, на самом деле его не нужно добавлять в качестве слоя, по крайней мере, на основе экспериментов.

Единственное, чего не хватает на данный момент, — это возможности маскировать полосу времени, не теряя при этом меню управления звуком.

person Andre M    schedule 03.05.2016