SMeetingEngine 上。使用说明见 媒体控制 与 视频渲染。
NativeVideoView 是 SDK 为渲染视图定义的别名,实际类型是 SRTC 的 SRTCVideoRenderer。
摄像头
requestOpenCamera(view:deviceId:preset:byAdmin:adminUid:)
打开摄像头:向会议申请 → 开始采集 → 发布。
返回值:
LocalCameraTrack(可忽略,也可随时读 meeting.cameraTrack)
可能抛出:
SMeetingError.unauthorized—— 房间全体禁画且禁止自我解除,且你不是主持人 / 联席主持人SMeetingError.apiError(code:message:)- 采集或发布失败时的底层错误(此时 SDK 已自动回滚,无需你再调
closeCamera())
deviceId,会切到目标设备。
closeCamera()
userCameraStateDidChange。
switchCamera(deviceId:)
返回值: 无
可能抛出:
SMeetingError.deviceError(_:) —— 摄像头尚未开启
麦克风
requestOpenMic(deviceId:preset:byAdmin:adminUid:)
返回值: 无
可能抛出:
SMeetingError.unauthorized—— 房间全体静音且禁止自我解除,且你不是主持人 / 联席主持人SMeetingError.apiError(code:message:)- 采集或发布失败时的底层错误(SDK 会自动回滚)
closeMic()
userMicStateDidChange。
屏幕共享
1.3.5 变更:requestShare已移除messageOnly参数及对应模式。需要仅广播共享状态时,请使用requestShare(shareType: .whiteBoard);屏幕共享仍会执行正常的媒体采集与发布。旧代码中的messageOnly: true需要删除或改用白板共享。
requestShare(shareType:preset:view:byAdmin:adminUid:)
返回值: 无
可能抛出:
SMeetingError.unauthorized—— 房间禁共享且你不是主持人 / 联席主持人SMeetingError.internalError(_:)—— 本端已在共享SMeetingError.apiError(code:message:)- 采集失败(例如用户拒绝屏幕录制授权)时的底层错误
shareType 为 .whiteBoard 时不创建媒体流,只广播共享状态并触发 roomShareDidStart。
requestShare(source:preset:view:byAdmin:adminUid:excludedWindowIds:excludesCurrentApplication:)
指定采集源的重载,仅 macOS 12.3 及以上。
返回值: 无
可能抛出: 同上一个重载。
stopShare()
视图录制
以下接口自 1.3.4 起可用。调用方负责将视图渲染为CVPixelBuffer 并持续推帧,SDK 只负责创建和发布视频轨道,不负责截取视图或保存本地录制文件。
startViewCaptureShare()
LocalVideoTrack,轨道描述为 screen,降级策略为保持分辨率。重复调用返回已有轨道。
可能抛出:
SMeetingError.notInMeeting—— 尚未加入会议。SMeetingError.internalError(_:)—— 屏幕共享轨道已存在,包括已准备但尚未发布的广播监听轨道。- 底层轨道发布错误。
requestShare() 的会议后端申请及共享状态通知流程。调用方应按自己的业务管理共享状态,并保证视图录制与屏幕共享互斥;需要切换到屏幕共享时,先停止视图录制。
stopViewCaptureShare()
stopShare() 代替。
iOS 全屏共享
以下接口仅 iOS 可用,用于共享整个系统屏幕(requestShare() 在 iOS 上只能采到本 App 画面)。需要先集成 Broadcast Upload Extension,完整步骤见 屏幕共享。
prepareBroadcastShare(appGroup:preset:)
挂起全屏采集的监听,等用户从系统 UI 发起广播。不通知会议后端、不发布轨道 —— 此刻共享还没开始。入会后调用即可,已在监听或已在共享时幂等返回。
返回值: 无
可能抛出: 采集监听建立失败时的底层错误(如 App Group 配置不正确)。
publishBroadcastShare(view:byAdmin:adminUid:)
把已经在出帧的全屏采集发布到会议(后端 + 频道)。在收到
shareBroadcastDidStart 之后调用 —— 那才是用户真的开始共享的时刻。已发布时幂等返回。
返回值: 无
可能抛出:
SMeetingError.internalError(_:)—— 尚未调用prepareBroadcastShareSMeetingError.unauthorized—— 房间禁共享且你不是主持人 / 联席主持人SMeetingError.apiError(code:message:)
stopBroadcastListening()
stopShare(),并且之后不会再自动重新挂上监听。exitRoom() 会自动调用它。
返回值: 无,不抛错。
requestShare(broadcastAppGroup:preset:view:byAdmin:adminUid:)
isShareBroadcastActive
Bool(只读)
iOS 全屏共享当前是否真的在出帧。prepareBroadcastShare 之后本属性仍为 false,直到用户在系统胶囊里点了「开始直播」。应用内采集模式恒为 false。
远端视频
subscribeRemoteVideoTrack(uid:trackDesc:)
订阅远端视频轨道,不绑定渲染视图。
返回值:
RemoteVideoTrack
可能抛出:
SMeetingError.notInMeetingSMeetingError.internalError(_:)—— 该成员没有这一路轨道
unsubscribeRemoteVideoTrack(uid:trackDesc:)
无条件取消订阅,不考虑是否还有渲染视图在用。
返回值: 无
可能抛出:
SMeetingError.notInMeeting。轨道不存在时静默返回。
startPlayRemoteVideo(view:uid:trackDesc:)
订阅并把画面绑定到传入的渲染视图,适合 UIKit / AppKit。
返回值:
RemoteVideoTrack
可能抛出: 同 subscribeRemoteVideoTrack(uid:trackDesc:)
stopPlayRemoteVideo(view:uid:trackDesc:)
解绑渲染视图。只有当这路轨道上已经没有任何渲染视图时才会真正取消订阅。
返回值: 无
可能抛出:
SMeetingError.notInMeeting
远端音频
进入会议时远端音频已自动订阅,以下接口用于需要精细控制的场景。subscribeRemoteAudioTrack(uid:trackDesc:)
返回值: 无
可能抛出:
SMeetingError.notInMeeting、SMeetingError.internalError(_:)
unsubscribeRemoteAudioTrack(uid:trackDesc:)
参数同上。轨道不存在时静默返回。
toggleRemoteAudioMute(_:)
远端音频播放总开关,只切播放不改订阅关系。
返回值: 无,不抛错。
合屏画面(MCU)
startPlayRemoteVideoMcu(view:uid:)
订阅并播放服务端合成画面。需要服务端已配置合屏任务。
返回值:
RemoteVideoTrack
可能抛出: SMeetingError.notInMeeting、SMeetingError.internalError(_:)(未找到合成画面轨道)
stopPlayRemoteVideoMcu(view:)
返回值: 无