# Listen for video events The Video SDK for Linux fires video-related callbacks through `IZoomVideoSDKDelegate`. Implement the callbacks below to react to video state changes in your session. For details on setting up a delegate, see [callback events](/docs/video-sdk/linux/integrate/#callback-events). ## User video status `onUserVideoStatusChanged` fires when a user starts or stops their video. ```cpp void CExampleListener::onUserVideoStatusChanged(IZoomVideoSDKVideoHelper* pVideoHelper, IVideoSDKVector* userList) { IZoomVideoSDKUser* pUser; int count = userList->GetCount(); for (int i = 0; i < count; i++) { pUser = userList->GetItem(i); bool isVideoOn = pUser->getVideoStatus().isOn; } } ``` ## Spotlight changes `onSpotlightVideoChanged` fires when the set of spotlighted users changes. For the spotlight controls, see [Spotlight a user](/docs/video-sdk/linux/video/spotlight/). ```cpp void CExampleListener::onSpotlightVideoChanged(IZoomVideoSDKVideoHelper* pVideoHelper, IVideoSDKVector* userList) { // userList contains the currently spotlighted users. } ``` ## Multi-camera stream status `onMultiCameraStreamStatusChanged` fires when a user enables, mutes, or disables an additional camera stream. The callback passes the stream's status, the user, and the `IZoomVideoSDKRawDataPipe` for that stream. For details, see [Multiple camera support](/docs/video-sdk/linux/video/multiple-cameras/). ```cpp void CExampleListener::onMultiCameraStreamStatusChanged(ZoomVideoSDKMultiCameraStreamStatus status, IZoomVideoSDKUser* pUser, IZoomVideoSDKRawDataPipe* pVideoPipe) { // Subscribe to or unsubscribe from pVideoPipe based on status. } ``` ## Alpha channel mode `onVideoAlphaChannelStatusChanged` fires when alpha channel mode turns on or off. For details, see [Raw video with alpha channel](/docs/video-sdk/linux/raw-data/raw-video-alpha-channel/). ```cpp void CExampleListener::onVideoAlphaChannelStatusChanged(bool isAlphaModeOn) { // Respond to the alpha channel mode change. } ``` ## Camera control requests When a user requests control of the local user's camera, the SDK calls `onCameraControlRequestReceived` with a handler you use to approve or decline. When a control request you sent is answered, the SDK calls `onCameraControlRequestResult`. For details, see [Remote camera control](/docs/video-sdk/linux/video/remote-camera-control/). ```cpp void CExampleListener::onCameraControlRequestReceived(IZoomVideoSDKUser* pUser, ZoomVideoSDKCameraControlRequestType requestType, IZoomVideoSDKCameraControlRequestHandler* pCameraControlRequestHandler) { // Call pCameraControlRequestHandler->approve() or decline(). } void CExampleListener::onCameraControlRequestResult(IZoomVideoSDKUser* pUser, bool isApproved) { // isApproved indicates whether your request was granted. } ```