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

# 工作原理

> 从请求到最后一个事件：你的应用做什么，SDK 做什么，我们的服务器做什么。

一次视频广告涉及三方：你的应用、SDK 和 Kontext 广告服务器。你的应用发起请求并决定时机；SDK 负责渲染和追踪；服务器运行竞价、托管素材，并与广告主结算每一次竞价。

## 流程

下图以暂停广告为例。叠加广告和线性广告的流程相同，只有展示时机和 `show()` 调用不同。

```mermaid theme={null}
sequenceDiagram
    participant App as 你的应用
    participant SDK as Kontext 视频 SDK
    participant Server as Kontext 广告服务器

    App->>SDK: initialize(publisherToken)
    SDK->>Server: 配置请求
    Server-->>SDK: enabled

    Note over App,SDK: 剧集打开
    App->>SDK: VideoAds(content), ads.format(.pause)
    SDK->>Server: 广告请求（内容、播放器）
    Note over Server: 在需求方之间竞价
    Server-->>SDK: 广告，带价格
    SDK-->>App: VideoAd（价格）

    App->>SDK: ad.load()
    Note over SDK: 在屏幕外渲染素材
    SDK-->>App: 就绪

    Note over App,SDK: 观众暂停
    App->>SDK: ad.show(in: playerView)
    SDK->>Server: 曝光、可见性、点击、完成
    Note over SDK: 观众关闭或继续播放
    SDK-->>App: didEnd(reason)
```

1. **启动时初始化一次。** `initialize(with:)` 保存你的 token 并在后台发送配置请求。没有任何东西等待它；期间发出的广告请求会排在它后面。
2. **创建视频的广告对象。** 每集一个 `VideoAds`，带上你所知道的剧集信息。创建它不发送任何请求。
3. **请求广告。** `format(.pause)` 发出一次携带内容和播放器尺寸的请求，并返回暂停广告。服务器在需求方之间竞价，回答一个广告，或一个无填充原因。
4. **先看价格，再加载或拒绝。** `VideoAd` 在渲染前就带着 CPM。`load()` 在屏幕外渲染素材，就绪后返回；`reject()` 告诉服务器你不会使用它。
5. **在你的时刻展示。** `show(in: playerView)` 把素材放进你的播放器视图（叠加、暂停）；`show()` 全屏呈现它（线性）。从这里开始 SDK 拥有这个广告：计数曝光、测量可见性、追踪每次互动，并给你一个 `didEnd`。
6. **服务器与广告主结算。** 每个事件都发往我们的服务器，由它向广告主报告并计费。你从未展示的广告也会被结算为未使用：当你拒绝它、销毁 `VideoAds`，或它过期时。

## 你提供什么，SDK 处理什么

| 你提供 | SDK 处理 |
| - | - |
| `publisherToken`，启动时一次 | 初始化、每次广告请求、启动失败后的重试 |
| 每集一个 `VideoAds`，带内容元数据 | 每次请求上的设备、应用、同意和身份信号 |
| 时机：尽早 `format()`，合适时 `show()` | 同一时间一个请求、每种格式一个未展示的广告、过期 |
| 内容播放所在的视图（叠加、暂停） | 放置、尺寸、缩放、广告周围触摸的透传 |
| 如果你自己竞价：比较价格，输了就 `reject` | 告知广告主，带上胜出价格和胜出方 |
| `didEnd`：恢复你的内容 | 曝光、可见性、点击、四分位、未使用通知 |
| 观众离开时 `destroy()` | 释放广告占用的资源、结束屏幕上的广告、结算持有的广告 |

## 素材在哪里

我们的服务器托管每个广告的素材，SDK 在与你的应用隔离的环境中渲染它：广告主的代码从不在你的应用中运行，只有真实触摸之后才会打开 URL，全部追踪由 SDK 完成。

## 下一步

> **[广告格式](https://docs.kontext.so/zh/video/concepts/ad-formats.md)**
>
> 叠加、暂停和线性：出现在哪里、多大、如何结束。

> **[广告生命周期](https://docs.kontext.so/zh/video/concepts/lifecycle.md)**
>
> SDK 持有什么、何时放手，以及你要实现的那一个回调。

> **[定向](https://docs.kontext.so/zh/video/concepts/targeting.md)**
>
> 发送什么，让广告与剧集和观众相匹配。

> **[Swift 视频 SDK](https://docs.kontext.so/zh/video/sdk/swift.md)**
>
> 10 分钟集成。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.