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

2 Likes