我正在使用iOS的WebRTC框架来为我的应用实现视频通话功能。到目前为止,我已经能够与其他用户进行视频通话,但是我遇到RTCEAGLVideoView
对象及其宽高比的UI问题。
到目前为止,我已经实现了此功能,以便计算框架以对其容器视图进行宽高比填充视频渲染视图:
extension VideoCallViewController: RTCEAGLVideoViewDelegate {
func videoView(_ videoView: RTCEAGLVideoView, didChangeVideoSize size: CGSize) {
if videoView === localVideoRenderer && size.height > 0 && size.width > 0 {
let videoFrame = aspectFillRect(for: size, containedIn: localVideoView.frame)
videoView.frame = videoFrame
}
}
func aspectFillRect(for size: CGSize, containedIn rect: CGRect) -> CGRect {
let maxFloat: CGFloat = max(rect.size.height, rect.size.width)
let aspectRatio = size.width / size.height
var frame = CGRect(origin: .zero, size: rect.size)
if size.width < size.height {
frame.size.width = maxFloat
frame.size.height = frame.size.width / aspectRatio
} else {
frame.size.height = maxFloat
frame.size.width = frame.size.height * aspectRatio
}
frame.origin.x = (rect.size.width - frame.size.width) / 2
frame.origin.y = (rect.size.height - frame.size.height) / 2
return frame
}
}
到目前为止,我已经成功地获得了正确的宽高比,但是现在,渲染视图显示了较大的(放大的)视频捕获输出,因此我不确定我的计算是否正确或还有其他问题我的代码中缺少以正确缩放纵横比填充。
我在为容器视图或其他内容中包含的视频渲染尺寸计算正确的CGRect
时,代码中是否有错误?