我正在使用WEBRTC远程视频流并将远程会话附加到此:
@IBOutlet weak var remoteVideoElement: QBRTCRemoteVideoView!
我想发生的事情是,当用户点击上方的插座时,远程流填充整个窗口。当用户再次敲击它时,它将像通常在布局中一样返回其位置。在大多数情况下,它可以正常工作,除了我无法保持远程视频流的正确纵横比或屏幕分辨率。有人可以帮我找出正确的方法来获得所需的效果吗?
这是我的代码:
var isExpanded = Bool()
var videoPlayerViewCenter = CGPoint()
override func viewDidLoad() {
super.viewDidLoad()
isExpanded = false
let toggleFullScreen = UITapGestureRecognizer(target: self, action: #selector (self.toggleFullScreenRemoteVideo(sender:)))
self.view.addGestureRecognizer(toggleFullScreen)
}
func toggleFullScreenRemoteVideo(sender: QBRTCRemoteVideoView) {
if !isExpanded {
// GO FULL SCREEN
UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
self.videoPlayerViewCenter = self.remoteVideoElement.center
self.view.bringSubview(toFront: self.modalShadeBackground)
self.view.bringSubview(toFront: self.remoteVideoElement)
self.remoteVideoElement.frame = CGRect(x: 0, y: 0, width: self.view.frame.height, height: self.view.frame.width)
self.remoteVideoElement.frame = AVMakeRect(aspectRatio: (self.remoteVideoElement.layer.preferredFrameSize()), insideRect: self.remoteVideoElement.frame)
self.remoteVideoElement.contentMode = .scaleAspectFit
self.remoteVideoElement.frame = UIScreen.main.bounds
self.remoteVideoElement.center = self.view.center
self.remoteVideoElement.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))
self.remoteVideoElement.layoutSubviews()
}, completion: nil)
} else {
// REVERT BACK TO ORIGINAL CONTRAINTS IN THE LAYOUT
UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
self.remoteVideoElement.transform = CGAffineTransform.identity
self.remoteVideoElement.center = self.videoPlayerViewCenter
self.view.sendSubview(toBack: self.remoteVideoElement)
self.view.sendSubview(toBack: self.modalShadeBackground)
self.remoteVideoElement.frame = AVMakeRect(aspectRatio: (self.remoteVideoElement.layer.preferredFrameSize()), insideRect: self.remoteVideoElement.frame)
self.remoteVideoElement.layoutSubviews()
}, completion: nil)
}
isExpanded = !isExpanded
}
我不确定QBRTCRemoteVideoView
,但我解决了视频流的类似问题通过获取我的视频图像的比例并将其转换为视频视图的矩形。基本上是这样:
let xScale = maxImageDrawingArea.size.width / imageSize.width
let yScale = maxImageDrawingArea.size.height / imageSize.height
let scaleFactor = xScale < yScale ? xScale : yScale;
然后通过
获取您的视图尺寸let height = maxImageDrawingArea.size.height * scaleFactor
let width = maxImageDrawingArea.size.width * scaleFactor
然后使用此高度和宽度在您的情况下绘制视频持有人
更新我是怎么做的;
祝你好运,