大佬教程收集整理的这篇文章主要介绍了ios – 拍摄AVCaptureVideoPreviewLayer视图的快照,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的类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); }
在我想要访问快照的地方,我打电话给:
self.localView.pb_takeSnapshot()
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 } }
当我看一下Xcode调试器中的图像时,它看起来完全是绿色的,而我在iphone屏幕上(在该视图内)可以看到的人不在那里:
class ViewController: UIViewController,RTCEAGLVideoViewDelegate { var captureSession: AVCaptureSession? var previewLayer :AVCaptureVideoPreviewLayer? var peerConnectionFactory: RTCPeerConnectionFactory! var videosource:rTCAVFoundationVideosource! var localTrack :rTCVideoTrack! @IBOutlet var myView: UIView! override func viewDidLoad() { super.viewDidLoad() /*myView = UIView(frame: CGRect(x: 0,y: 0,width: UIScreen.main.bounds.size.width,height: UIScreen.main.bounds.size.height))*/ startCamera() // Do any additional setup after loading the view,typically from a nib. } fileprivate func startCamera() { peerConnectionFactory = RTCPeerConnectionFactory() RTCInitializeSSL(); RTCSetupInternalTracer(); RTCSetMinDebugLogLevel(RTCLoggingSeverity.info) videosource = peerConnectionFactory.avFoundationVideosource(with: nil); localTrack = peerConnectionFactory.videoTrack(with: videosource,trackId: "ARDAMSv0") let localScaleX = CGFloat(1.0) let localView : RTCEAGLVideoView = RTCEAGLVideoView(frame: self.view.bounds) self.view.insertSubview(localView,at: 1) localView.frame = self.view.bounds; localView.transform = CGAffineTransform(scaleX: localScaleX,y: 1) localTrack.add(localView) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewDidAppear(_ animated: Bool) { //previewLayer?.frame.size = myView.frame.size } func videoView(_ videoView: RTCEAGLVideoView,didChangeVideoSize size: CGSizE) { print("Inside didChangeVideoSize") } }
以上是大佬教程为你收集整理的ios – 拍摄AVCaptureVideoPreviewLayer视图的快照全部内容,希望文章能够帮你解决ios – 拍摄AVCaptureVideoPreviewLayer视图的快照所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。