How to custom the conference UI

Thanks for helping out! :slight_smile:

Hi t.barry-woods,

Thanks for the reply. The error code from the CreateVideoElement() could be retrieved by modifying the C# wrapper and print it out when debugging. Please note that: we have 3 different types of video elements: Preview/Active/Normal; For preview video element, you may create it at any point, but for active/normal video elements, it must be created only after the meeting is in “In-Meeting” state.

If you follow the above process and still get the error, then we might need the SDK log to investigate further.

Thanks!

1 Like

Hi @Carson_Chen,
I have the opposite problem. I can’t destroy a video element without getting SDKERR_UNINITIALIZE. What’s the correct way to do it?

Hi, I’m trying to create a custom UI using the C# wrapper. However I cannot find the CreateCustomizedUIMgr() function.

Also, where do I call this (before joining the meeting, when connecting, when in meeting, …)?

And does creating the CustomizedUIMgr automatically prevent the default Zoom UI from loading or do I need to call something to prevent that?

Yes! I finally found how to tell the SDK to use a custom UI:

I should have read the tutorials a little bit better: https://marketplace.zoom.us/docs/sdk/native-sdks/windows/mastering-sdk/custom-ui-feature#1-initialize-the-sdk

Now do I still need to call CreateCustomizedUIMgr() ?

Hi Sam,

To use Custom UI, you will need to set the following at SDK initialization:

InitParam.config_opts = new ConfigurableOptions() { optionalFeatures = 1 << 5 }

This will tell SDK not to show the Zoom default UI. Once the Custom UI mode is enabled, you will need to draw your own UI, and handle each event. You may follow the steps that Wilmer has mentioned above:

These steps are for creating a video view and show it in the Custom UI. So you will need to repeat these steps for every video view you would like to have.

Hope this helps. Thanks!

How do I do this in C#? I can’t seem to find that function.

I can only find CZoomSDKeDotNetWrap.Instance.GetCustomizedUIMgrWrap()

Well, the introduce of using sdk is written to c++ user. We do not have document for C# user.

For C# sdk, we wrap the calling of CreateCustomizedUIMgr() in c++ wrapper. You can find it in ./wrap/customized_ui_components_wrap/customized_ui_mgr_wrap.cpp. You can just use the functions of the class CCustomizedUIMgrDotNetWrap to create video container/share render.

@sam.decrock @bragma @meldur has anyone got this working? I’ve tried following @bragma’s helpful suggestion but unfortunately I still have the exact same problem. When I run the custom UI code after the meeting status changes to MEETING_STATUS_INMEETING, I get the same result of an empty black rectangle in my application and a null video element in code. here’s my code for reference:
var ui = CZoomSDKeDotNetWrap.Instance.GetCustomizedUIMgrWrap();
var container = ui.CreateVideoContainer(handle, bounds); // handle and bounds are valid
var video = container.CreateVideoElement(VideoRenderElementType.VideoRenderElement_ACTIVE);
var activeVideo = video as IActiveVideoRenderElementDotNetWrap; // activeVideo is always null

@t.barry-woods, set a reasonable width and height on the container before creating the element. If I remember well, that was also required to make it work.

@bragma do you mean the element that handle points to, or the container returned by CreateVideoContainer(handle, bounds)? In my code, bounds has already been set to an area of around 300 X 300 pixels, which is calculated from the (WPF) ActualSize of the area I want the video to occupy. Is there something else I need to do to set the width and height?

Good question, actually I don’t remember. I could do some tests, but probably it’s quicker for you to make sure that both the container and the handle element have adequate width/height.

1 Like

Hi @t.barry-woods,

Based on the code you provided, everything looks good. Could you recompile the wrapper and add debug logs for the interface IVideoRenderElementDotNetWrap^ CreateVideoElement and see what is the reason that causes this issue?

Thanks!