SMeetingNet wraps the SMeeting.h C++ API in idiomatic C#: callbacks become events, media becomes
strongly typed objects, and SMeetingEngine / SMeetingChannel implement IDisposable, so you never
write callback vtables yourself.
The call order is identical to the C++ quickstart. There are two layers:
SMeetingEngine—process-wide, one is enough. Login, the meeting management HTTP APIs, channel lifecycle, device enumeration, IM, resource driveSMeetingChannel—one per meeting: entering, room and member data, in-meeting operations, media objects
Initialize the SDK
SetLanguage / Version / GetStatusMessage are static—no engine instance needed.
Use SMeetingEngine.GetStatusMessage(code) for the text of a status code; its language follows
SetLanguage (English until you call it).
Register engine-level events
MeetingStartMessage). Everything else is on SMeetingChannel.
Log in
Login is asynchronous—the result only arrives through the callback.
Create a meeting
Enter a meeting
Two steps:CreateChannel only creates the object without entering; configure it, then call Enter().
As in C++, register the events before Enter()—the entering callbacks fire synchronously while
enter is still running.
Get room and member data
These return raw json whose schema belongs to the backend—parse it yourself. Each member’s published
tracks live in its
stream_tracks field (desc / kind / width / height / fps).Camera
Microphone
Speaker (hear everyone)
Remote audio fetched with an empty uid is the channel mix, so opening it is enough to hear everyone— no per-member subscription:Play remote video
For window rendering just use the ready-made
SMeetingHwndView(handle); to render into your own surface
derive from SMeetingView and override UpdatePlanes (GetViewType returns SMeetingViewType.CallBack).
Always RemovePlayView before disposing a SMeetingView, or the render thread may touch a freed object.Share the screen
engine.EnumScreen(): Type == 5 is a monitor (build the rectangle from
X / Y / Width / Height), Type == 0 is a window (use Hwnd).
Chat and custom messages
RoomChatMessage / RoomCustomMessage events.
Host operations
Local recording
Leave and release
Threading and lifetime
- Except for the events raised while entering, all events arrive on SDK internal threads—marshal to
your UI thread yourself (WinForms:
BeginInvoke) - Async APIs taking an
SMeetingCallback(Login/Enter/RequestOpenCamera, …) invoke the callback once, with(SMeetingStatusCode code, string data) - Every media object is a handle borrowed from its channel: valid only while that channel is alive, and never to be used after leaving
SMeetingNet.dllis a C++/CLI mixed-mode assembly, so its bitness must matchbinand your project’s target platform—see Integration