В сборке 2.6.6 добавлена возможность использования RTCMTLVideoView для отображения видео, если устройство поддерживает данный вид.
Разберем автоматическое переключение между видами для отображения локального видео на примере TwoWayStreaming
1. Определяем, поддерживается ли Metal View
id<MTLDevice> localDevice;
#ifdef __aarch64__
localDevice = MTLCreateSystemDefaultDevice();
...
#endif
2. Если MTLCreateSystemDefaultDevice() возвращает не nil, создаем объект RTCMTLVideoView
...
#ifdef __aarch64__
localDevice = MTLCreateSystemDefaultDevice();
if (localDevice) {
RTCMTLVideoView *localView = [[RTCMTLVideoView alloc] init];
localView.delegate = self;
_localDisplay = localView;
}
#endif
...
3. Если MTLCreateSystemDefaultDevice() возвращает nil, создаем объект RTCEAGLVideoView
...
if (!localDevice) {
RTCEAGLVideoView *localView = [[RTCEAGLVideoView alloc] init];
localView.delegate = self;
_localDisplay = localView;
}
...
Полный код примера
id<MTLDevice> localDevice;
#ifdef __aarch64__
localDevice = MTLCreateSystemDefaultDevice();
if (localDevice) {
RTCMTLVideoView *localView = [[RTCMTLVideoView alloc] init];
localView.delegate = self;
_localDisplay = localView;
}
#endif
if (!localDevice) {
RTCEAGLVideoView *localView = [[RTCEAGLVideoView alloc] init];
localView.delegate = self;
_localDisplay = localView;
}
_localDisplay.translatesAutoresizingMaskIntoConstraints = NO;