拍摄AVCaptureVideoPreviewLayer的视图快照

Nik*_*iko 5 uiview ios avcapturesession webrtc

我正在使用WebRTC在两个用户之间建立视频聊天.我想拍摄localView视图的快照,其中显示了其中一个人.

这是我的课程configureLocalPreview,它将视频流与UIViews连接起来:

@IBOutlet var remoteView: RTCEAGLVideoView!
@IBOutlet var localView: UIView!

var captureSession: AVCaptureSession?
var videoSource: RTCAVFoundationVideoSource?
var videoTrack: RTCVideoTrack?

func configureLocalPreview() {
    self.videoTrack = self.signaling.localMediaStream.self.videoTracks.first as! RTCVideoTrack?
    self.videoSource = (self.videoTrack?.source as? RTCAVFoundationVideoSource)
    self.captureSession = self.videoSource?.self.captureSession

    self.previewLayer = AVCaptureVideoPreviewLayer.init(session: self.captureSession)
    self.previewLayer.frame = self.localView.bounds
    self.localView.layer.addSublayer(self.previewLayer)
    self.localView.isUserInteractionEnabled = true
    //self.localView.layer.position = CGPointMake(100, 100);
}
Run Code Online (Sandbox Code Playgroud)

在我想要访问快照的地方,我打电话给:

self.localView.pb_takeSnapshot()
Run Code Online (Sandbox Code Playgroud)

pb_takeSnapshot来自UIView扩展,我在另一篇文章中找到了它.它的定义如下:

extension UIView {
    func pb_takeSnapshot() -> UIImage {
    UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale)

    drawHierarchy(in: self.bounds, afterScreenUpdates: true)

    let image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return image
    }
}
Run Code Online (Sandbox Code Playgroud)

当我看一下Xcode调试器中的图像时,它看起来完全是绿色的,而我在iphone屏幕上(在该视图内)可以看到的人不在那里:

快照的屏幕截图

这个人不可见的原因是什么?难道不知道是不可能制作一个流的快照?谢谢你看看!