Swift 3,iOS 10+;,xCode 8.3+;,Quickblox-切换全屏远程流,同时保持纵横比/视频分辨率

Swift 3,iOS 10+;,xCode 8.3+;,Quickblox-切换全屏远程流,同时保持纵横比/视频分辨率,ios,swift3,xcode8,quickblox,ios10.3,Ios,Swift3,Xcode8,Quickblox,Ios10.3,我正在使用webRTC远程视频流,并将远程会话连接到此: @IBOutlet weak var remoteVideoElement: QBRTCRemoteVideoView! 我想要发生的是,当用户点击上面的出口时,远程流会填满整个窗口。当用户再次点击它时,它将返回到布局中的正常位置。在大多数情况下,除了我无法保持远程视频流的正确纵横比或屏幕分辨率外,它工作正常。有人能帮我找到达到预期效果的正确方法吗 这是我的密码: var isExpanded = Bool() var videoPla

我正在使用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;
然后使用此高度和宽度在案例remoteVideoElement中绘制视频支架

告诉我进展如何


祝你好运,

处理另一个问题很快就会给你回复。我直到今天才谈到这个问题,因为防火墙出现了一个关键任务问题。我恨他们没有给你50英镑。如果我能做些什么来解决这个问题,请告诉我。你能在这里添加更多的代码吗?具体来说,您是否至少可以铸造maxImageDrawingArea和imageSize?那些应该是什么?如何获得“我的视频图像的比率”??
let height = maxImageDrawingArea.size.height * scaleFactor
let width = maxImageDrawingArea.size.width * scaleFactor