How to determine whether the frame is ScreenShare or Video RawData in onRawDataFrameReceived?

I have created separate RendererHelpers for Audio and Video/ScreenShare as below:

RendererHelper.h

#pragma once

#include “RendererHelperBase.h”

class RendererHelper :
public RendererHelperBase,
public IZoomSDKRendererDelegate
{
public:
RendererHelper(UINT64 meetingNumber, ZoomSDKRawDataType type, string sourceId);

void setUserRendererStatus(SDKError recordingStatus);

string getRawDataStatus(RawDataStatus status);
string getFilePath();
string getResolution();
SDKError getUserRendererStatus();

private:
string resolution;
SDKError recordingStatus;

// Inherited via IZoomSDKRendererDelegate
virtual void onRendererBeDestroyed() override;
virtual void onRawDataFrameReceived(YUVRawDataI420* data) override;
virtual void onRawDataStatusChanged(RawDataStatus status) override;

};

AudioRendererHelper.h

#pragma once

#include “RendererHelperBase.h”

class AudioRendererHelper :
public RendererHelperBase,
public IZoomSDKRendererDelegate,
public IZoomSDKAudioRawDataDelegate
{
public:
AudioRendererHelper(UINT64 meetingNumber, ZoomSDKRawDataType type, string sourceId);
virtual string getRawDataStatus(RawDataStatus status) override;
string getAudioMeta();
string getFilePath();
string getResolution();

private:
string audioRawMeta;

// Inherited via IZoomSDKRendererDelegate
virtual void onRendererBeDestroyed() override;
virtual void onRawDataFrameReceived(YUVRawDataI420* data) override;
virtual void onRawDataStatusChanged(RawDataStatus status) override;

// Inherited via IZoomSDKAudioRawDataDelegate
virtual void onMixedAudioRawDataReceived(AudioRawData* data_) override;
virtual void onOneWayAudioRawDataReceived(AudioRawData* data_, uint32_t node_id) override;

};

and then creating new instances of the above classes once receiving a new participant video/screen share as below:

void CreateUserRenderer(UINT64 userId, ZoomSDKRawDataType type)
{
string raw_type;

switch (type)
{
case ZoomSDKRawDataType::RAW_DATA_TYPE_VIDEO:
	raw_type = "-video";
	break;

case ZoomSDKRawDataType::RAW_DATA_TYPE_SHARE:
	raw_type = "-screenshare";
	break;
}

string mapKey = to_string(userId) + raw_type;
IZoomSDKRendererDelegate* currentUserRenderer = rawData[mapKey];

if (currentUserRenderer == NULL)
{
	currentUserRenderer = new RendererHelper(meetingNumber, type, to_string(userId));
}

SDKError rendererStatus = createRenderer(&rawRender, currentUserRenderer);

rawData[mapKey] = currentUserRenderer;

if (rendererStatus == SDKError::SDKERR_SUCCESS)
{
	rawRender->setRawDataResolution(ZoomSDKResolution::ZoomSDKResolution_1080P);
	((RendererHelper*)currentUserRenderer)->setUserRendererStatus(rawRender->subscribe(userId, type));
}

}

and multi-user video/screenshare recording is working concurrently. Thanks

1 Like