启动AVPlayer时如何显示暂停的视频而不是黑屏

dja*_*o-d 15 avfoundation ios avplayer

我能够成功创建一个播放器,但对最初的黑屏感到恼火.我决定覆盖UIImageView并在播放器启动后隐藏它.这很有用,但我不想为我的所有视频创建和维护图像的麻烦.

我能够通过播放获得我想要的确切结果,并在实例化之后立即暂停播放器.唯一的问题是,有时玩家的状态记录不正确,所以当我再次启动玩家时,状态被列为已经"正在播放",即使播放器已暂停.

我开始研究使用AVPlayerItem seekToTime但没有找到任何可行的解决方案.是否有"非hacky"方式实现这一目标?

JAL*_*JAL 8

如果你正在使用AVPlayerViewController,这是玩家控制器contentOverlayView属性的完美使用.这是UIView在播放器层和为此目的完全暴露的控件之间:

首先,创建截图:

let asset = AVAsset(URL: URL(string: "")!) // link to some video
let imageGenerator = AVAssetImageGenerator(asset: asset)
let screenshotTime = CMTime(seconds: 1, preferredTimescale: 1)
if let imageRef = try? imageGenerator.copyCGImageAtTime(screenshotTime, actualTime: nil) {

    let image = UIImage(CGImage: imageRef)

    // see part 2 below
}
Run Code Online (Sandbox Code Playgroud)

现在,将图像添加为contentOverlayView播放器控制器中的子视图:

// in the same try block

let imageView = UIImageView(image: image)
let playerVC = AVPlayerViewController()
let playerItem = AVPlayerItem(asset: asset)
playerVC.player = AVPlayer(playerItem: playerItem)

self.presentViewController(playerVC, animated: true) { 
    playerVC.contentOverlayView?.addSubview(imageView)
    // adjust the frame of your imageView to fit on the player controller's contentOverlayView
}
Run Code Online (Sandbox Code Playgroud)

然后,imageView在播放器开始播放资源时或缓冲完成时删除子视图.