在我的项目中播放视频。我为自定义控件创建了自定义视频播放器(即AVplayerLayer而不是AVPlayerViewController)。问题是当我尝试截取videoPlayer的屏幕截图时,它会返回黑色图像。
这是我用来拍摄截图的代码
func captureScreen() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, UIScreen.main.scale)
view.layer.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
任何建议都会非常有用!
答案 0 :(得分:0)
由于您使用的是AVPlayer
而不是AVAssetReader+AVAssetReaderTrackOutput
(可以在播放时拍摄屏幕截图)
我想这会对你有所帮助。
if let item = player.currentItem {
let imageGenerator = AVAssetImageGenerator(asset: item.asset)
if let cgImage = try? imageGenerator.copyCGImage(at: item.currentTime(), actualTime: nil) {
let image = UIImage(cgImage: cgImage)
}
}
提示:您可以按自己的方式获得该项目。 (例如,在创建AVPlayer时也一样)
编译器指示您的安全性假设。 (你当然可以强行打开)
答案 1 :(得分:0)
如果需要拍摄包含AVPlayerLayer的视图的快照以用于动画/冻结状态,也可以使用view.snapshotView(afterScreenUpdates:)
。
这将返回一个视图,其中包含您的视图的屏幕快照。
与UIVisualEffectView
结合使用非常方便! :)
答案 2 :(得分:-1)
试试这个,希望它能帮到你......
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