Embedding Default UI for iOS

Description
Is there a way that we can embed the default meeting UI to our own view controller and manually show/hide it.

Hey @azanton

Thanks for using the dev forum!

When using the default meeting UI, it handles presentation and dismissal of the viewcontroller itself. You can toggle hiding/showing certain UI elements of the meeting like the top bar, buttons however, there is not support for hiding/showing the entire UI through the SDK itself. https://marketplace.zoom.us/docs/sdk/native-sdks/iOS/mastering-zoom-sdk/in-meeting-function/zoom-meeting-ui/meeting-setting

You can however, build a custom meeting UI that could have this capability: https://marketplace.zoom.us/docs/sdk/native-sdks/iOS/mastering-zoom-sdk/in-meeting-function/customized-in-meeting-ui/overview

Let me know if you have any other questions
Thanks!
Michael

Hi @Michael_Condon,

Thank you for the response!

We are now building our own custom meeting UI but encountered a MobileRTCRawData_Video_Module_Error when trying to subscribe to the raw video data.

Any suggestions?

Thanks

Hey @azanton

Sorry about the confusion! For Custom Meetings, MobileRTCRawData is not actually supported, we will let you know when that changes though!

To get the video working, you need to set up your MobileRTCCustomizedUIMeetingDelegate, present your custom ViewController, assign that ViewController to be your MobileRTCMeetingServiceDelegate, and then use the MobileRTCVideoView’s to view the videos.

Here is an example of showing the active video in a view in your CustomMeetingViewController:

    let liveFeedVideoView = MobileRTCActiveVideoView(frame: yourVideoView.bounds)
    liveFeedVideoView.setVideoAspect(MobileRTCVideoAspect_PanAndScan)

    videoView.addSubview(liveFeedVideoView)

Hope that helps!
Michael

1 Like

Hi @Michael_Condon

Thanks for the help, we were successful in setting up the video.

Our current issue now is the audio, how can we monitor the audio level of each participant? This is to detect if they are speaking or not.

Thanks

Hey @azanton

Awesome! I am happy to hear the video is working!

Unfortunately, monitoring the audio level is not supported. However, to detect if someone is speaking or not you can obtain the user’s MobileRTCMeetingUserInfo. That object will have a property called audioStatus. Which has a bool isTalking.

MobileRTCMeetingUserInfo.MobileRTCAudioStatus.isTalking

Hope that helps!
Michael

Hi @Michael_Condon

Thanks for the help regarding the audio part.

We have now an issue regarding the video, we are trying to show the video using [MobileRTCVideoView showAttendeeWithUserID] and it sometimes returns NO . Do you know any problem that can cause this?

Thanks!

Hey @azanton,

This issue can happen for a couple reasons. If the function is provided an invalid ID, if this is called before the video is actually available, network issues etc…

Would you mind providing your code so I could look at it?

Thanks!
Michael

Hi @Michael_Condon

Please see the following code:

- (void)videoStatusChangedByUserWithZoomID:(NSUInteger)zoomID {
  BOOL videoEnabled = [self.meetingService isUserVideoSending:zoomID];

  if (videoEnabled) {
    if (![videoView showAttendeeVideoWithUserID:zoomID]) {
      // Failed to show video
    }
  } else {
    [videoView stopAttendeeVideo];
  }

The issue seems to be encountered when the user joins an ongoing meeting, it fails to show videos for the participants with enabled cameras. But if the user re-enables the camera it will show succesfully.

Hey @azanton

Just for troubleshooting purposes, can you replace the code in this function with:

[videoView showAttendeeVideoWithUserID:userID];

CGSize size = [[[MobileRTC sharedRTC] getMeetingService] getUserVideoSize:userID];
if (CGSizeEqualToSize(size, CGSizeZero))
    return;
[videoView setVideoAspect:MobileRTCVideoAspect_PanAndScan];

And let me know what happens?

Thanks!
Michael

Hi @Michael_Condon,

It early returns due to the size being zero

Hey @azanton

Ah ok, so it looks like the UserID is not valid at the current time you are calling this code.
You shouldnt have to call showAttendeeVideo every time their videoStatus changes. Try migrating your code into onMeetingStatusChanged, on onSinkMeetingUserJoin.
To debug further you can also use [[[MobileRTC sharedRTC] getMeetingService] getInMeetingUserList]; to view/obtain the userID’s of the participants.

Let me know what you find.

Thanks!
Michael

Hi @Michael_Condon,

Thanks for the help!

We have another question, currently we enabled custom meeting UI but there are still scenarios where the SDK displays its own prompt like for example when the user tries to join a meeting that hasn’t started yet. Is there a way to disable this?

Hi @Michael_Condon,

Another question,

Do we have a way to get our Zoom ID when we’re in the waiting room?

Thanks

Hey @azanton

When setting up the meeting there is a setting “Join before host” that will allow users to enter the meeting before the host has started it. You can toggle this feature on/off using setAllowJoinBeforeHost in MobileMeetingRTCMeetingItem, when scheduling a meeting.

If this feature is on there should not be a prompt. If this feature is off, a callback should be triggered:
onJBHWaitingWithCmd in MobileRTCMeetingServiceDelegate, where you can handle what the UI does in this event.

Thanks!
Michael

1 Like

@azanton,

For your second question: The information available for a given user in a waiting can be accessed from - waitingRoomUserInfoByID:(NSUInteger)userId from within MobileRTCWaitingRoomService. To obtain the userID’s of the users in the waiting room you can use waitingRoomList in MobileRTCWaitingRoomService which will return an array of UserID’s.

Thanks!
Michael

1 Like

Hi @Michael_Condon, is there a way for the user in the waiting room to know his user ID? Something like [MobileRTCMeetingService.myselfUserID] ?

Thanks

Noted on this.

Thanks @Michael_Condon

Hi @Michael_Condon, another set of questions.

It seems that [MobileRTCMeetingService -lowerAllHands] fails even though the user can successfully can lower a hand individually by [MobileRTCMeetingService -lowerHand], We tried lowering all hands by iterating each user then calling [MobileRTCMeetingService -lowerHand] for each but sometimes it returns NO.

Also when a host from the zoom app clicks lower all hands, both [MobileRTCUserServiceDelegate -onMyHandStateChange] and [MobileRTCUserServiceDelegate -onSinkMeetingUserLowerHand] is not triggered, but when the host from the zoom app lowers their hand individually they are triggered.

Thanks

1 Like

Hey @azanton

Nice to see you again :slight_smile:

Can you provide your hand lowering code so I can reproduce and troubleshoot on my end?

Thanks!
Michael