> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stmlink.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> 对外开放的服务端接口有两组前缀，都用同一套鉴权：`/server/v1/...`（SRTC 与 SMeeting 的主接口）和 `/stm/srvapi/v1/...`（SMeeting 的用户体系，服务端极简对接会用到）。鉴权是 app_id + nonce + timestamp + signature 四个请求头，用 app_key 做 HMAC-SHA256 签名，只能从业务方自己的后端调用。除这两组前缀外的接口均为内部接口，不要建议客户调用。
> app_key 是服务端密钥，绝不能出现在客户端代码、前端配置或移动 App 里。客户端加入频道用的 token 必须由业务方后端签发后下发（SRTC 走 `/server/v1/channel/grant`，SMeeting 走 `/stm/srvapi/v1/member/grant`）。
> SRTC 与 SMeeting 是上下两层不同的产品，术语不通用：SRTC 是音视频底座，说「频道 channel」「加入 / 退出」；SMeeting 建在 SRTC 之上，说「房间 room」「会议 meeting」「进入 / 退出」。回答时按用户所在的层用对应术语，不要把「房间」「会议」安到 SRTC 的接口上。
> 同一能力在各端 SDK 里的包名、类名、方法名并不相同。写示例代码时请使用文档中该端自己的 API，不要把一个端的写法套到另一个端上。苹果平台每个产品都有两套 SDK（Swift 原生与 Objective-C），两套 API 不能混用。

# 白板共享

> 会议里怎么开白板：用 getWhiteBoard() 取页面地址内嵌 iframe，用 requestShare(ShareType.WhiteBoard) 广播共享状态，以及中途入会时如何恢复现场

会议里的电子白板是一个**内嵌的 H5 页面**（`iframe`），笔迹同步走白板自己的通道，不产生媒体流。会议层在此之上多做了一件事：**替你管理"现在谁在共享白板"这个状态**，不用像 SRTC 层那样自己广播。

<Note>
  白板页面本身的能力（URL 参数、隐藏菜单、桌面批注模式、销毁时机）与 SRTC 层完全一致，见 [SRTC · 电子白板](/zh/rtc/whiteboard)。本页只讲会议层的用法差异。
</Note>

***

### 取白板地址

进入会议后即可读取，SDK 已经把授权码拼好，直接内嵌：

```typescript theme={null}
await smeeting.enterRoom(/* ... */);

const url = smeeting.getWhiteBoard();
if (url) {
  const iframe = document.createElement("iframe");
  iframe.src = url;
  iframe.style.cssText = "width:100%;height:100%;border:0";
  boardContainer.appendChild(iframe);
}
```

白板与会议一一对应——同一个会议里的人打开的是同一块板。退出会议后该地址失效。

***

### 开始与停止共享

白板共享**只广播状态，不采集任何画面**：

```typescript theme={null}
import { ShareType } from "@seastart/smeeting-web-sdk";

// 开始：会议内广播「我在共享白板」
await smeeting.requestShare(ShareType.WhiteBoard);

// 结束
await smeeting.stopShare();
```

同一时刻一个会议只允许一位成员共享，屏幕共享与白板互斥。主持人开启了"房间禁共享"时，普通成员调用会抛错。

***

### 响应他人的白板共享

其他人开白板时，你会收到房间事件，据此显示白板：

```typescript theme={null}
smeeting.onNotifyRoomEvent = (evt: RoomEvent) => {
  switch (evt.type) {
    case CommonRoomEventType.ROOM_SHARE_START:
      if (evt.data.share_type === ShareType.WhiteBoard) {
        showWhiteBoard(smeeting.getWhiteBoard());
      }
      break;
    case CommonRoomEventType.ROOM_SHARE_STOP:
      hideWhiteBoard();
      break;
  }
};
```

**中途入会的人收不到这个事件**，要自己补一次判断——会议信息里带着当前共享状态：

```typescript theme={null}
const info = smeeting.getRoomInfo();
if (info?.share_state === ShareType.WhiteBoard) {
  // 会议中已经有人在共享白板，进来就要显示
  showWhiteBoard(smeeting.getWhiteBoard());
}
```

`share_state` 的取值：`0` 无共享、`1` 屏幕共享、`2` 白板；共享者是 `share_uid`。

***

### 相关

* [SRTC · 电子白板](/zh/rtc/whiteboard) —— 白板页面的 URL 参数、原生端内嵌、生命周期与销毁
* [事件参考](/zh/meeting/web/events) —— 共享相关事件的完整定义
* [SMeeting](/zh/meeting/web/api-reference/SMeeting) —— 接口签名
