Skip to main content
本页接口都挂在 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 及以上
返回值: 可能抛出: 同上一个重载。
自 1.3.2(SRTC 1.4.2)起,整屏共享默认包含本 App 自己的窗口。会中主窗口通常正在渲染远端画面,界面上若有共享预览、或同机双开自测,务必把这些窗口放进 excludedWindowIds,否则形成无限镜像。

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(_:) —— 尚未调用 prepareBroadcastShare
  • SMeetingError.unauthorized —— 房间禁共享且你不是主持人 / 联席主持人
  • SMeetingError.apiError(code:message:)
发布失败时 SDK 会自动回滚共享状态。

stopBroadcastListening()

停止监听全屏采集。正在共享中调用等同于 stopShare(),并且之后不会再自动重新挂上监听。exitRoom() 会自动调用它。 返回值: 无,不抛错。

requestShare(broadcastAppGroup:preset:view:byAdmin:adminUid:)

一步到位版:建立监听的同时就对会议宣布共享。
用户可能根本不点系统胶囊,那时会议里会挂着一个没有画面的共享标记,需要你自己超时撤回。会议类场景请用 prepareBroadcastShare + publishBroadcastShare,本重载只为「不关心中间态」的简单集成保留。

isShareBroadcastActive

类型: Bool(只读) iOS 全屏共享当前是否真的在出帧。prepareBroadcastShare 之后本属性仍为 false,直到用户在系统胶囊里点了「开始直播」。应用内采集模式恒为 false

远端视频

subscribeRemoteVideoTrack(uid:trackDesc:)

订阅远端视频轨道,不绑定渲染视图。
返回值: RemoteVideoTrack 可能抛出:
  • SMeetingError.notInMeeting
  • SMeetingError.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.notInMeetingSMeetingError.internalError(_:)

unsubscribeRemoteAudioTrack(uid:trackDesc:)

参数同上。轨道不存在时静默返回。

toggleRemoteAudioMute(_:)

远端音频播放总开关,只切播放不改订阅关系。
返回值: 无,不抛错。

合屏画面(MCU)

startPlayRemoteVideoMcu(view:uid:)

订阅并播放服务端合成画面。需要服务端已配置合屏任务。 返回值: RemoteVideoTrack 可能抛出: SMeetingError.notInMeetingSMeetingError.internalError(_:)(未找到合成画面轨道)

stopPlayRemoteVideoMcu(view:)

返回值:

相关页面