SMeetingNet 把 SMeeting.h 的 C++ 接口包装成惯用的 C# 写法:回调变成 event,媒体变成强类型对象,
SMeetingEngine / SMeetingChannel 可以 Dispose,不需要自己写回调 vtable。
调用顺序与 C++ 快速开始 完全一致,先分清楚两层对象:
SMeetingEngine—— 进程级,一个就够。登录、会议管理 HTTP 接口、频道生命周期、设备枚举、IM、资源盘SMeetingChannel—— 一个会议一个对象,入会、房间与成员数据、会中操作、媒体对象都在它上面
初始化 SDK
SetLanguage / Version / GetStatusMessage 都是静态方法,不必先有 engine 实例。
状态码文案用 SMeetingEngine.GetStatusMessage(code) 取,语言跟随 SetLanguage(未设置时为英文)。
注册引擎级事件
MeetingStartMessage)。
会议内的回调都在 SMeetingChannel 上。
登录
Login 是异步的,结果只能从回调里拿。
创建会议
加入会议
分两步:CreateChannel 只创建对象、不入会,配置好之后再 Enter()。
和 C++ 一样,事件必须在 Enter() 之前订阅 —— 入会过程中的回调是在 enter 还没返回时就同步触发的。
获取房间与成员信息
这几个接口返回的都是原始 json,schema 由后端定义,需要你自己解析(每个成员的已发布轨道在
stream_tracks 字段里,含 desc / kind / width / height / fps)。摄像头
麦克风
扬声器(听到所有人)
远端音频传空 uid 取的是频道混音,打开后即可听到所有人,无需逐个订阅:播放远端视频
窗口渲染直接用现成的
SMeetingHwndView(句柄);要渲染到自己的表面就从 SMeetingView 派生并重写
UpdatePlanes(GetViewType 返回 SMeetingViewType.CallBack)。SMeetingView 析构前务必先
RemovePlayView,否则渲染线程可能访问已释放对象。屏幕共享
engine.EnumScreen() 枚举:Type == 5 是显示器(取 X / Y / Width / Height 拼矩形),
Type == 0 是窗口(取 Hwnd)。
聊天与自定义消息
RoomChatMessage / RoomCustomMessage 事件里。
主持人操作
本地录制
退出与释放
线程与生命周期
- 除入会过程中的事件外,所有事件都在 SDK 内部线程触发,界面更新请自己 marshal
(WinForms 用
BeginInvoke)到 UI 线程 - 带
SMeetingCallback的异步接口(Login/Enter/RequestOpenCamera等)回调只触发一次, 参数是(SMeetingStatusCode code, string data) - 媒体对象都是频道借出的句柄:只在频道存活期间有效,退出频道后一律不要再使用
SMeetingNet.dll是 C++/CLI 混合模式程序集,位数必须与bin及工程目标平台一致,见集成