我想在不同屏幕尺寸的设备上缩放视频流。发送者的视频大小也可能不同。
到目前为止我所拥有的代码:
public func videoView(_ videoView: RTCEAGLVideoView, didChangeVideoSize size: CGSize) {
// scale by height
let w = renderer.bounds.height * size.width / size.height
let h = renderer.bounds.height
let x = (w - renderer.bounds.width) / 2
renderer.frame = CGRect(x: -x, y: 0, width: w, height: h)
}
Run Code Online (Sandbox Code Playgroud)
渲染器是渲染视频的视图。它可以缩放,但方式不正确。视频有些部分丢失了,高度还好。但宽度被裁剪成我所理解的。
是否有可能实现一种在不损失宽高比的情况下全屏显示视频(在接收端)的解决方案?
尝试使用AVMakeRect(aspectRatio:insideRect). 此方法查找在指定矩形内保留纵横比的最小矩形。
你可以在这里读更多关于它的内容
一般来说,您将指定UIScreen边界作为insideRect:参数,并在 中指定媒体的大小aspectRatio。在某些情况下,矩形可能会比您的尺寸稍小UIScreen。在这种情况下,我建议使用称为信箱的技术