Multiple camera support

Users can use both the front and back cameras of their Android mobile devices simultaneously using the methods provided by the Video SDK. Multiple cameras can also be used while screen sharing. Fore more information, see ZoomVideoSDKVideoHelper Class Reference.

Support multiple cameras

Get the device's available camera list and important information about each camera, including the

  • deviceId
  • deviceName
  • isSelectDevice
  • isSelectedAsMultiCamera
  • isRunningAsMultiCamera
val cameraList = ZoomVideoSDK.getInstance().getVideoHelper().cameraList
for (camera in cameraList) {
    // Each device contains deviceId, deviceName, isSelectDevice, isSelectedAsMultiCamera, isRunningAsMultiCamera and more.
}
List<ZoomVideoSDKCameraDevice> cameraList = ZoomVideoSDK.getInstance().getVideoHelper().getCameraList();
for (ZoomVideoSDKCameraDevice camera : cameraList) {
    // Each device contains deviceId, deviceName, isSelectDevice, isSelectedAsMultiCamera, isRunningAsMultiCamera and more.
}

With the available camera list, the user can then use the deviceId to choose which camera they want to enable, disable, unmute (turn on), or mute (turn off). These methods will trigger the onMultiCameraStreamStatusChanged callbacks with different parameters under the ZoomVideoSDKDelegate.

// To enable/disable multi video stream for a camera given its deviceID
val enableBOOLResult = ZoomVideoSDK.getInstance().getVideoHelper().enableMultiStreamVideo("cameraDeviceID", null)
val disableBOOLResult = ZoomVideoSDK.getInstance().getVideoHelper().disableMultiStreamVideo("cameraDeviceID")
// Enable/Disable will trigger the 2 onMultiCameraStreamStatusChanged callback under ZoomVideoSDKDelegate
override fun onMultiCameraStreamStatusChanged(
    status: ZoomVideoSDKMultiCameraStreamStatus?,
    user: ZoomVideoSDKUser?,
    videoPipe: ZoomVideoSDKRawDataPipe?
) {
    // Getting ZoomVideoSDKRawDataPipe
}
override fun onMultiCameraStreamStatusChanged(
    status: ZoomVideoSDKMultiCameraStreamStatus?,
    user: ZoomVideoSDKUser?,
    canvas: ZoomVideoSDKVideoCanvas?
) {
    // Getting ZoomVideoSDKVideoCanvas
}
// To mute (turn off) / unmute (turn on) the multi video stream given its deviceID
val muteBOOLResult = ZoomVideoSDK.getInstance().getVideoHelper().muteMultiStreamVideo("cameraDeviceID")
val unmuteBOOLResult = ZoomVideoSDK.getInstance().getVideoHelper().unmuteMultiStreamVideo("cameraDeviceID")
// To enable/disable multi video stream for a camera given its deviceID
Boolean enableBOOLResult = ZoomVideoSDK.getInstance().getVideoHelper().enableMultiStreamVideo("cameraDeviceID", null);
Boolean disableBOOLResult = ZoomVideoSDK.getInstance().getVideoHelper().disableMultiStreamVideo("cameraDeviceID");
// Enable/Disable will trigger the 2 onMultiCameraStreamStatusChanged callback under ZoomVideoSDKDelegate
@Override
public void onMultiCameraStreamStatusChanged(ZoomVideoSDKMultiCameraStreamStatus status, ZoomVideoSDKUser user, ZoomVideoSDKRawDataPipe videoPipe) {
    // Getting ZoomVideoSDKRawDataPipe
}
@Override
public void onMultiCameraStreamStatusChanged(ZoomVideoSDKMultiCameraStreamStatus status, ZoomVideoSDKUser user, ZoomVideoSDKVideoCanvas canvas) {
    // Getting ZoomVideoSDKVideoCanvas
}
// To mute (turn off) / unmute (turn on) the multi video stream given its deviceID
Boolean muteBOOLResult = ZoomVideoSDK.getInstance().getVideoHelper().muteMultiStreamVideo("cameraDeviceID");
Boolean unmuteBOOLResult = ZoomVideoSDK.getInstance().getVideoHelper().unmuteMultiStreamVideo("cameraDeviceID");

To find the deviceId in the raw data of the multi camera pipe or canvas, use the getDeviceIDByMyPipe or getDeviceIDByMyCanvas methods. For more information about handling raw data, see Raw data.

val localUser = ZoomVideoSDK.getInstance().session.mySelf
// Get the user's multi camera stream - ZoomVideoSDKRawDataPipe
val pipeList = localUser.multiCameraStreamList
for (pipe in pipeList) {
    val deviceID = ZoomVideoSDK.getInstance().getVideoHelper().getDeviceIDByMyPipe(pipe)
}
// Get the user's multi camera canvas - ZoomVideoSDKVideoCanvas
val canvasList = localUser.multiCameraCanvasList
for (canvas in canvasList) {
    val deviceID = ZoomVideoSDK.getInstance().getVideoHelper().getDeviceIDByMyCanvas(canvas)
}
ZoomVideoSDKUser localUser = ZoomVideoSDK.getInstance().getSession().getMySelf();
// Get the user's multi camera stream - ZoomVideoSDKRawDataPipe
List<ZoomVideoSDKRawDataPipe> pipeList = localUser.getMultiCameraStreamList();
for (ZoomVideoSDKRawDataPipe pipe : pipeList) {
    String deviceID = ZoomVideoSDK.getInstance().getVideoHelper().getDeviceIDByMyPipe(pipe);
}
// Get the user's multi camera canvas - ZoomVideoSDKVideoCanvas
List<ZoomVideoSDKVideoCanvas> canvasList = localUser.getMultiCameraCanvasList();
for (ZoomVideoSDKVideoCanvas canvas : canvasList) {
    String deviceID = ZoomVideoSDK.getInstance().getVideoHelper().getDeviceIDByMyCanvas(canvas);
}