Ответ 1
Если вы используете 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
}
Теперь добавьте изображение в виде подкатегории 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 contentOverlayView
}
Затем удалите подвектор imageView
, когда игрок начнет играть в актив или завершает буферизацию.