Я использую платформу WebRTC для iOS для реализации функции видеовызова в моем приложении.До сих пор я был в состоянии установить видеозвонок другому пользователю, но у меня есть проблема пользовательского интерфейса с объектом RTCEAGLVideoView
и его соотношением сторон.
До сих пор я реализовал эту функциючтобы вычислить кадр для аспектного заполнения представления видео рендеринга для его представления контейнера:
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
для размера рендеринга видео, содержащегося в представлении контейнера, или что-то еще?