Как сделать так, чтобы RTCEAGLVideoView не деформировал полноэкранный режим - PullRequest
0 голосов
/ 02 января 2019

Я отображаю RTCVideoTrack с RTCEAGLVideoView и хочу, чтобы он был полноэкранным, но он всегда деформируется. Я пытался использовать метод AVMakeRectWithAspectRatioInsideRect, чтобы отобразить это представление, нет искажений, но нет и полного экрана, вот мой код .

RTCEAGLVideoView *remoteVideoView = [[RTCEAGLVideoView alloc] initWithFrame:self.backView.bounds];
remoteVideoView.contentMode = UIViewContentModeScaleAspectFill;
_remoteVideoView = remoteVideoView;
[remoteVideoView renderFrame:nil];
[remoteVideoTrack addRenderer:remoteVideoView];
remoteVideoView.delegate = self;
self.remoteVideoTrack = remoteVideoTrack;
[self.backView addSubview:remoteVideoView];

когда вызывается делегат didChangeVideoSize:

- (void)videoView:(RTCEAGLVideoView*)videoView didChangeVideoSize:(CGSize)size {
    if (videoView == _remoteVideoView) {
        _remoteVideoSize = size;
    }
    CGRect bounds = self.view.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;
        _remoteVideoView.frame = remoteVideoFrame;
        _remoteVideoView.center =
        CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));
    } else {
        _remoteVideoView.frame = bounds;
    }
}

Мне интересно, может ли метод renderFrame сделать что-нибудь полезное, но я не могу найти, как создать свойство RTCI420Frame.

1 Ответ

0 голосов
/ 02 января 2019

Вы можете использовать RTCMTLVideoView для другого режима содержимого (полный экран).

Импорт:

#import <WebRTC/RTCMTLVideoView.h>

Используйте этот код здесь:

 #if defined(RTC_SUPPORTS_METAL)

       RTCMTLVideoView *mtlVideoView = [[RTCMTLVideoView alloc] initWithFrame:CGRectZero];
       mtlVideoView.videoContentMode = UIViewContentModeScaleAspectFill;

       #else

  //Here you can create RTCEAGLVideoView
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...