基于纵横比缩放视频视图

5
我想在不同屏幕大小的设备上缩放视频流。发送者的视频大小也可能不同。
到目前为止我有以下代码:
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)
    }

渲染器是视频呈现的视图。它可以缩放,但不是正确的方式。视频的一部分丢失了,高度是正常的。但是我理解宽度被裁剪了。
有可能实现一个解决方案,在接收端以全屏显示视频而不失去其纵横比吗?

1
经过3年6个月,你让我的一天变得美好...由于某些原因,我不得不使用2017年版本的WebRTC。非常感谢你。你的问题就是我的答案。 :) - Ankit Kumar
1个回答

6
尝试使用AVMakeRect(aspectRatio:insideRect)方法。此方法查找在指定矩形内保留纵横比的最小矩形。
您可以在此处了解更多信息。
通常,您将指定UIScreen范围作为insideRect:参数,并将媒体大小设置为aspectRatio。在某些情况下,矩形可能会稍小于UIScreen大小。在这种情况下,建议使用称为信封式布局的技术。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接