# Start, join, and leave meetings

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

## Start a meeting

To start a meeting, initialize the `StartParam` data structure.

1. Set the `userType` to `ZOOM_SDK_NAMESPACE::SDK_UT_NORMALUSER;`.
2. Populate the `normaluserStart` structure of the startParam.
    - Set the `meetingNumber` to the meeting number of the meeting to start.
    - Set the `vanityID` if there is a `vanityID`.
    - Set the `customer_key` if there is a `customer_key`.
    - Set `isAudioOff` and `isVideoOff` to either `true` or `false`.
3. Call the `Start()` method to start a meeting.

```cpp
ZOOM_SDK_NAMESPACE::StartParam startParam;
startParam.userType = ZOOM_SDK_NAMESPACE::SDK_UT_NORMALUSER;
startParam.param.normaluserStart.vanityID = NULL;
startParam.param.normaluserStart.customer_key = NULL;
startParam.param.normaluserStart.isVideoOff = false;
startParam.param.normaluserStart.isAudioOff = false;
ZOOM_SDK_NAMESPACE::IMeetingService* m_pMeetingService = SDKInterfaceWrap::GetInst().GetMeetingService();
ZOOM_SDK_NAMESPACE::SDKError err = m_pMeetingService->Start(startParam);
```

### Get the Start Meeting status

To know whether the start meeting action succeeded, didn't succeed, or resulted in an error, implement the `onMeetingStatusChange` method.

```cpp
virtual void onMeetingStatusChanged(MeetingStatus status, int iResult = 0) = 0;
```

Check `MeetingStatus` definition in `meeting_service_interface.h`.

## Join a meeting

To join a meeting identified by a meeting number, populate the `JoinParam` data structure. This shows joining a meeting as an anonymous user.

1. Set the `userType` to `SDK_UT_WITHOUT_LOGIN;`.
2. To join without login, populate the `JoinParam4WithoutLogin` data structure.
    - Set the `meetingNumber`.
    - Set the `vaniyID` if there is a `vanityID`.
    - Set the `userName` and `psw` (password).
    - Set the `customer_key` if there is a `customer_key`.
    - Set the `webinarToken` if joining a webinar. Otherwise, leave it as `NULL`.
    - Set the `isAudioOff` and `isVideoOff`, depending on the desired audio and video setting.
3. Call the `Join()` method to join the meeting.

```cpp
ZOOM_SDK_NAMESPACE::JoinParam joinParam;
joinParam.userType = ZOOM_SDK_NAMESPACE::SDK_UT_WITHOUT_LOGIN;
ZOOM_SDK_NAMESPACE::JoinParam4WithoutLogin& withoutloginParam = joinParam.param.withoutloginuserJoin;
withoutloginParam.meetingNumber = <meeting number>;
withoutloginParam.vanityID = NULL;
withoutloginParam.userName = "";
withoutloginParam.psw = "";
withoutloginParam.customer_key = NULL;
withoutloginParam.webinarToken = NULL;
withoutloginParam.isVideoOff = true;
withoutloginParam.isAudioOff = false;
ZOOM_SDK_NAMESPACE::IMeetingService* m_pMeetingService = SDKInterfaceWrap::GetInst().GetMeetingService(); m_pMeetingService->Join(joinParam);
```

### Get the Join Meeting status

To know whether the join meeting action is a success or not, or to get the error message, implement the onMeetingStatusChange method.

```cpp
virtual void onMeetingStatusChanged(MeetingStatus status, int iResult = 0) = 0;
```

Check `MeetingStatus` definition in `meeting_service_interface.h`.

## Leave a meeting

1. Use the `LeaveMeetingCmd` enum to decide whether to leave or end a meeting.
1. Use the appropriate `LeaveMeetingCmd` enum to either `LEAVE_MEETING` or `END_MEETING`.
1. Use the `Leave()` method to leave a meeting.

```cpp
ZOOM_SDK_NAMESPACE::IMeetingService* m_pMeetingService = SDKInterfaceWrap::GetInst().GetMeetingService();
m_pMeetingService->Leave(ZOOM_SDK_NAMESPACE::LEAVE_MEETING);
```

---
