Since build 2.6.6 it is possible to use RTCMTLVideoView to display a video, if device supports this view.
Use TwoWayStreaming example code to analyze automatic view selection to display a local (publishing) video
1. Detect if Metal View is supported by device
id<MTLDevice> localDevice;
#ifdef __aarch64__
localDevice = MTLCreateSystemDefaultDevice();
...
#endif
2. If MTLCreateSystemDefaultDevice() returns not nil, create RTCMTLVideoView object
...
#ifdef __aarch64__
localDevice = MTLCreateSystemDefaultDevice();
if (localDevice) {
RTCMTLVideoView *localView = [[RTCMTLVideoView alloc] init];
localView.delegate = self;
_localDisplay = localView;
}
#endif
...
3. If MTLCreateSystemDefaultDevice() returns nil, create RTCEAGLVideoView object
...
if (!localDevice) {
RTCEAGLVideoView *localView = [[RTCEAGLVideoView alloc] init];
localView.delegate = self;
_localDisplay = localView;
}
...
Full code example for local video
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;