Swift3 iOS:如何拍摄AVplayer的屏幕截图?

Swift3 iOS:如何拍摄AVplayer的屏幕截图?,swift3,Swift3,在我的项目中播放视频。我为自定义控件创建了自定义视频播放器(即AVplayerLayer而不是AVPlayerViewController)。问题是,当我尝试拍摄视频播放器的屏幕截图时,它会返回黑色图像 这是我用来截图的代码 func captureScreen() -> UIImage? { UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.main.scale) view.l

在我的项目中播放视频。我为自定义控件创建了自定义视频播放器(即AVplayerLayer而不是AVPlayerViewController)。问题是,当我尝试拍摄视频播放器的屏幕截图时,它会返回黑色图像

这是我用来截图的代码

func captureScreen() -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.main.scale)
    view.layer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

任何建议都会非常有用

试试这个,希望它能帮助你

extension UIView
{
  public func getSnapshotImage() -> UIImage
  {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.isOpaque, 0)
    self.drawHierarchy(in: self.bounds, afterScreenUpdates: false)
    let snapshotImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return snapshotImage
  }
}
用法:

let Snap = self.VideoPlayerView.getSnapshotImage

因为您使用的是
AVPlayer
,而不是
avassetrader+avassetradertrackoutput
(可以在播放的同时进行屏幕截图)

我想这对你有帮助

if let item = player.currentItem {
    let imageGenerator = AVAssetImageGenerator(asset: item.asset)
    imageGenerator.appliesPreferredTrackTransform = true
    if let cgImage = try? imageGenerator.copyCGImage(at: item.currentTime(), actualTime: nil) {
        let image = UIImage(cgImage: cgImage)
    }
}
小贴士:你可以按自己的方式获得该商品。(e.创建AVPlayer时相同)


这些假设只是为了确保编译器指示您的安全性。(当然可以强制展开)

如果需要拍摄包含AVPlayerLayer的视图的快照,以便在动画/冻结状态下使用,也可以使用
view.snapshotView(AfterCreenUpdate:)

这将返回一个带有视图屏幕截图的视图。
UIVisualEffectView
!:)结合使用非常方便

显示您用于播放音频/视频的代码这在实际设备上使用时通常会产生黑色图像这种方式在图像方面有问题orientation@VyachaslavGerchicovappliesPreferredTrackTransform应该可以做到这一点