Używam WebRTC do zbudowania czatu wideo między dwoma użytkownikami. Chcę zrobić migawkę widoku localView
, który pokazuje jedną z osób.Robienie migawki widoku AVCaptureVideoPreviewLayer
To moja klasa z metodą configureLocalPreview
który łączy strumienie wideo z 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);
}
w miejscu chcę otworzyć migawkę, wzywam:
self.localView.pb_takeSnapshot()
pb_takeSnapshot
przychodzi z rozszerzenia UIView, które znalazłem w innym poście. Jest zdefiniowany następująco:
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
}
}
Kiedy spojrzeć na obraz w debugera Xcode, wygląda zupełnie zielony, a osoba, której mogę zobaczyć na ekranie iPhone (wewnątrz tego poglądu), nie jest tam:
Co może dlatego, że dana osoba nie jest widoczny? Czy nie jest możliwe zrobienie migawki strumienia? Dziękujemy za obejrzenie!
Dziękuję za odpowiedź, jestem nieco zdezorientowany, jak wyglądałby rzeczywisty kod, chociaż próbowałem tak wielu różnych kodów wersje. – Linus
@Linus Zaktualizowałem post z przykładowym fragmentem kodu, za pomocą którego można uruchomić kamerę i zobaczyć podgląd lokalny. –