在Swift和AVPlayer中显示音频流的图稿?

时间:2016-05-03 16:52:34

标签: ios swift tvos avplayerviewcontroller

我正在使用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()
    }
}

1 个答案:

答案 0 :(得分:0)

关闭@JAL(original code)提供的评论后,代码如下:

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,但实际上似乎并不需要将其添加为图层,至少基于实验。

此时唯一缺少的是能够屏蔽时间栏,而不会丢失音频控制菜单。