关于远端和本地摄像头点击放大拉伸的问题

673 阅读1分钟

1 遵循 RTCVideoViewDelegate代理 调用代理方法 

- (void)videoView:(RTCEAGLVideoView *)videoView didChangeVideoSize:(CGSize)size

2 在RTCVideoViewDelegate代理中设置如下代码:

- (void)videoView:(RTCEAGLVideoView *)videoView didChangeVideoSize:(CGSize)size {
    if (videoView == self.videoView) {
        _remoteVideoSize = size;
    }
    [self setNeedsLayout];
}

下方设置等比大小计算 

- (void)layoutSubviews {
    CGRect bounds = self.bounds;
    if (_remoteVideoSize.width > 0 && _remoteVideoSize.height > 0) {
        // Aspect fill remote video into bounds.
        CGRect remoteVideoFrame =
            AVMakeRectWithAspectRatioInsideRect(_remoteVideoSize, bounds);
        CGFloat scale = 1;
        if (remoteVideoFrame.size.width > remoteVideoFrame.size.height) {
            // Scale by height.
            scale = bounds.size.height / remoteVideoFrame.size.height;
        } else {
            // Scale by width.
            scale = bounds.size.width / remoteVideoFrame.size.width;
        }
        remoteVideoFrame.size.height *= scale;
        remoteVideoFrame.size.width *= scale;
        self.videoView.frame = remoteVideoFrame;
        self.videoView.center =
            CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
    } else {
        self.videoView.frame = bounds;
    }
}