Multiple camera support

Users can run more than one camera at the same time using the methods provided by the Video SDK for macOS. Multiple cameras can also be used while screen sharing.

To enumerate the available cameras and read each camera's deviceID, see Get the camera list.

Enable or disable a multi-camera stream

Pass a deviceID from the camera list to enable or disable that camera as an additional stream. You can supply a custom display name when enabling. Both calls fire onMultiCameraStreamStatusChanged. For more information, see Multi-camera stream status.

let videoHelper = ZMVideoSDK.shared()?.getVideoHelper()
let enableResult = videoHelper?.enableMultiStreamVideo("cameraDeviceID", customDeviceName: nil)
let disableResult = videoHelper?.disableMultiStreamVideo("cameraDeviceID")
ZMVideoSDKVideoHelper *videoHelper = [[ZMVideoSDK sharedVideoSDK] getVideoHelper];
BOOL enableResult = [videoHelper enableMultiStreamVideo:@"cameraDeviceID" customDeviceName:nil];
BOOL disableResult = [videoHelper disableMultiStreamVideo:@"cameraDeviceID"];

Mute or unmute a multi-camera stream

Mute or unmute an active multi-camera stream by its deviceID.

let videoHelper = ZMVideoSDK.shared()?.getVideoHelper()
let muteResult = videoHelper?.muteMultiStreamVideo("cameraDeviceID")
let unmuteResult = videoHelper?.unmuteMultiStreamVideo("cameraDeviceID")
ZMVideoSDKVideoHelper *videoHelper = [[ZMVideoSDK sharedVideoSDK] getVideoHelper];
BOOL muteResult = [videoHelper muteMultiStreamVideo:@"cameraDeviceID"];
BOOL unmuteResult = [videoHelper unmuteMultiStreamVideo:@"cameraDeviceID"];

Map a pipe back to a device ID

The local user's multi-camera streams are exposed as ZMVideoSDKRawDataPipe objects through getMultiCameraStreamList. To find the deviceID for a given pipe, use getDeviceIDByMyPipe. For more on handling raw data, see Raw data.

if let localUser = ZMVideoSDK.shared()?.getSession()?.getMySelf(),
   let pipeList = localUser.getMultiCameraStreamList() {
    let videoHelper = ZMVideoSDK.shared()?.getVideoHelper()
    for pipe in pipeList {
        let deviceID = videoHelper?.getDeviceIDByMyPipe(pipe)
    }
}
ZMVideoSDKUser *localUser = [[[ZMVideoSDK sharedVideoSDK] getSession] getMySelf];
NSArray<ZMVideoSDKRawDataPipe *> *pipeList = [localUser getMultiCameraStreamList];
ZMVideoSDKVideoHelper *videoHelper = [[ZMVideoSDK sharedVideoSDK] getVideoHelper];
for (ZMVideoSDKRawDataPipe *pipe in pipeList) {
    NSString *deviceID = [videoHelper getDeviceIDByMyPipe:pipe];
}