数字人直播 Web 端接入实战,1 个 Agent 当天跑通

2026/09/01

你可能以为数字人直播是个"AI 团队 + 音视频团队"才能干的活。但真实情况是一个 Web 前端工程师用一套 SDK,当天就能跑通。

数字人直播门槛卡在哪?

让一个数字人开口直播,技术上要跨过几道坎?

  1. 把用户说的话听下来:实时语音识别(ASR);
  2. 让大模型想清楚说什么:LLM 推理;
  3. 把回答变成声音:语音合成(TTS);
  4. 让声音驱动一个虚拟形象开口、动表情:数字人驱动与唇形/表情同步;
  5. 把这套东西实时推给观众:RTC 推拉流。

那好,问题来了:这里头哪一步难?

大部分人第一反应是 AI 能力难。但你把这话扔给真正接过数字人直播的工程师,他会告诉你恰恰相反——现在的 ASR、TTS、LLM 单点能力都成熟到可以按 API 采购。真正把人卡死的,是第 5 步:当你要把 4 家供应商的能力缝成一条低延迟、不掉帧、能打断、唇音同步的实时链路时,工程量瞬间爆炸。

为什么?因为这不是算法问题,是工程问题。流格式怎么对齐?丢包了怎么重传?首帧能不能做到秒开?数字人嘴唇动了、声音没到,观众一眼就出戏。用户一句停,这 4 层链路怎么协作才算打断成功?

数字人直播的门槛,从来不在「AI」,而在这条管道

ZEGO 实时互动 AI Agent做的事,说白了就是把这条管道直接递到你手里——ASR、LLM、TTS、数字人驱动,一站式封装成一个智能体。

本文把这条可复现的路一步一步地分享给你。

一、先分清两种"数字人直播"

ZEGO 的接入方式,是按交互形态分的,不要弄混。

形态典型场景客户端行为交互性接入成本
数字人实时播报数字人直播、口播、带货开场引导、新闻播报只登录房间拉流观看,不推流单向,可主动触发播报最低
数字人视频通话/互动AI 互动、AI 客服、数字人老师用户推流上麦,Agent 拉用户流双向,可打断、LLM 实时回复

这两个形态在代码层面有本质区别,我先把最关键的一点摆出来:

  • 播报场景:客户端不创建本地流,不调 startPublishingStream 你只需要拿到服务端返回的 agent_stream_id,登录房间拉流、播放,三步结束。
  • 互动场景:客户端要推流。 用户的声音和画面推上去,数字人 Agent 在云端拉取,处理完再把回复推回来。

这里有个特别值得 Web 开发者高兴的事:数字人视频通话的互动场景在 iOS/Android 端需要额外集成数字人 SDK​,做自定义渲染——把远端视频帧和 SEI 数据喂给数字人 SDK,由它驱动形象。但 Web 端不用。Web 端直接拿 ZEGO Express SDK 播放数字人视频流就行。也就是说同样一套互动能力,Web 的接入步骤反而最少。

二、整体架构:一条时序图看懂

在写代码前,先把这条链路的角色和顺序刻进脑子里。整个系统有三个部分:

  • 客户端(Web):你的页面,负责登录房间、推拉流、播放。
  • 业务后台:你自己的服务端。所有 ZEGO API 调用都在这里
  • ZEGO AI Agent 后台:云端真正跑数字人的地方。

特别强调:客户端不直接碰 ZEGO 的服务端 API,也不生成 Token。 它只跟你的业务后台说话。这是整个架构安全性的第一根钉子。

下面是数字人实时播报的完整时序:

sequenceDiagram
    participant 客户端
    participant 业务后台
    participant AI Agent 后台

    业务后台->>业务后台: 注册智能体(RegisterAgent)
    业务后台->>AI Agent 后台: 注册智能体
    AI Agent 后台-->>业务后台: 响应

    客户端->>业务后台: 通知开始播报
    业务后台->>AI Agent 后台: 创建播报数字人实例(CreateDigitalHumanAgentInstance)
    AI Agent 后台->>AI Agent 后台: 数字人登录房间并推送数字人流
    AI Agent 后台-->>业务后台: 返回数字人配置 + 流信息
    业务后台-->>客户端: 数字人配置 + 流信息

    客户端->>业务后台: 请求 Token
    业务后台-->>客户端: Token

    客户端->>客户端: 初始化 ZEGO Express SDK,登录房间
    客户端->>客户端: 初始化数字人 SDK,设置配置(仅 iOS/Android)
    客户端->>客户端: 拉取数字人流,播放(Web 直接播放)

    客户端->>业务后台: 主动播报文本
    业务后台->>AI Agent 后台: 调用主动播报能力(SendAgentInstanceTTS)
    AI Agent 后台-->>客户端: 数字人开始播报

    客户端->>业务后台: 通知停止播报
    业务后台->>AI Agent 后台: 删除播报数字人实例
    AI Agent 后台-->>业务后台: 响应
    业务后台-->>客户端: 响应

    客户端->>客户端: 停止拉流,退出房间

互动场景的时序几乎一样,差别在两点:创建的是数字人智能体实例,且客户端多了推流上麦这个动作,数字人在云端拉你的流。

现在开始动手。

三、Step 1:准备

1.1 开通控制台

ZEGO 控制台注册账号,创建一个项目,记下两个东西:app_idserver_secret

这两个值一个进客户端 SDK 初始化,一个只进服务端server_secret 一旦出现在前端代码或 commit 里,等于把整个鉴权敞开了。

1.2 定一个数字人形象

数字人形象有几种定制路线,按需选:

数字人类型素材要求特点
图片数字人1 张高质量真人照片最快,当天可用
真人视频数字人5–10 分钟绿幕拍摄视频一比一复刻,神态动作表情媲美真人
自定义动作库定制时生成支持「比心」「打招呼」等特殊动作

这里有个玄机要提前说:视频数字人的最终效果 80% 取决于你拍的素材。 唇形、表情、妆造、灯光、绿幕,任何一个环节糊了,AI 训出来的形象就跟着糊。官方有专门的《视频数字人拍摄指南》,别嫌麻烦,第一次拍之前先照着看一遍。素材规格以《视频数字人素材规范》《图片数字人素材规范》为准。

四、Step 2:服务端(业务后台)

2.1 注册智能体

业务后台先调注册智能体 RegisterAgent,把智能体的人设配好——你要接哪个 LLM、用什么音色、绑定哪个数字人形象。

2.2 创建实例

客户端点开始直播,请求你的接口,比如 /api/start-live-digital-human。你的业务后台收到后调 ZEGO 的CreateDigitalHumanAgentInstance(互动场景对应创建数字人智能体实例),AI Agent 后台随即让数字人登录房间并开始推流,然后返回三样东西:

  • agent_instance_id:这个实例的唯一标识
  • agent_stream_id:数字人的视频流 ID,客户端靠它拉流
  • digital_human_config:数字人配置(互动场景的 Web 端用不到,播报场景下不同端处理方式不同)

Web 端客户端请求你的后台,用 fetch 就行:

async function startLiveDigitalHuman(roomId: string) {
  const response = await fetch(`${baseURL}/api/start-live-digital-human`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      digital_human_id: config.digitalHuman.id,
      config_id: config.digitalHuman.configId,
      room_id: roomId,
    }),
  });
  const result = await response.json();
  if (result.code !== 0) throw new Error(result.message);
  return result; // 返回 agent_instance_id / agent_stream_id 等
}

注意这里的 digital_human_id就是你在 Step 1 里定制好的那个形象的 ID。config_id 是客户端配置标识。

2.3 生成 Token

Token 必须在服务端生成。 客户端每次要用的时候,从业务后台现取。这是硬性要求,不是建议。

Token 生成涉及一套签名逻辑,参考Token 生成文档和各语言(Go / Java / Python / Node.js / PHP / C++ 等)的完整示例代码。你在接入时直接对照着实现,别自己拍脑袋造签名。服务端 API 的签名规则(Signature = md5(AppId + SignatureNonce + ServerSecret + Timestamp))见服务端 API 调用方式

五、Step 3:客户端(Web 接入)

现在到了 Web 端本身。这份代码是全文的落点,也是本文可复现核心。

3.1 集成 ZEGO Express SDK

Web 端只需要装一个 zego-express-engine-webrtc(按你的构建工具引入SDK,地址见SDK 及 Demo 下载页)。初始化引擎:

import { ZegoExpressEngine } from 'zego-express-engine-webrtc';

const zg = new ZegoExpressEngine(appID, server);

3.2 登录房间

先通过业务后台拿 Token,再登录房间:

const token = await fetchToken(); // 从你自己的业务后台拿
await zg.loginRoom(roomID, { userID, userName }, { userID: userID, token });

3.3 按形态操作

完整可运行代码直接看官方快速开始:实现数字人实时播报(Web)实现数字人视频通话(Web)。下面是核心逻辑:

播报场景:登录房间后,直接拉数字人流播放。

// 从业务后台拿到的 agent_stream_id
zg.startPlayingStream(agentStreamId, {
  canvas: document.getElementById('digital-human-canvas'),
});

// 监听房间流更新,找到目标流再拉(Web 常用的方式)
zg.onRoomStreamUpdate = (roomID, updateType, streamList) => {
  streamList.forEach(stream => {
    if (updateType === 'ADD' && stream.streamID === agentStreamId) {
      zg.startPlayingStream(stream.streamID, {
        canvas: document.getElementById('digital-human-canvas'),
      });
    }
  });
};

互动场景:多一步推流。用户上麦,把自己的视频/音频推上去,同时拉数字人流。

// 创建本地流并推流
const localStream = await zg.createStream({ camera: { video: true }, mic: true });
zg.startPublishingStream('my_stream_id', localStream);

然后同样拉取数字人流的 agent_stream_id 播放。到这里,一个能实时对话的数字人就在你页面里跑起来了。

3.4 主动控制数字人

直播里经常需要让数字人主动说一句话,比如带货开场白、报个价格。Web 端通过房间信令 callExperimentalAPI 实现(详见智能体自定义控制),消息体是 JSON,里面带 ActionParams:

zg.callExperimentalAPI(msgContent); // msgContent = JSON.stringify({...})

支持的 5 类控制能力:

Action能力对应服务端接口
SendAgentInstanceTTS让数字人朗读一段文本自定义调用 TTS
SendAgentInstanceLLM让 Agent 基于文本推理并回复自定义调用 LLM
InterruptAgentInstance打断当前 TTS/LLM 流程打断智能体实例
StartListeningAgent 开始聆听指定用户智能体开始聆听
StopListeningAgent 结束聆听智能体结束聆听

一条主动播报就是:

const msgContent = JSON.stringify({
  Action: 'SendAgentInstanceTTS',
  Seq: 'user_123:device_456:000001', // 业务链路追踪标识
  Params: { Text: '欢迎来到直播间,今天全场八折' },
});
zg.callExperimentalAPI(msgContent);

关于 Seq,建议养成填的习惯。它是你排障时的根据,格式推荐 user_id:device_id:local_seq,在回调里会原样返回给你。

同时你要在客户端初始化时把数字人 开启自定义视频渲染 的配置设好。

六、Step 4:联调与上线

4.1 直接用官方示例跑通

说了这么多,不如直接跑一个能跑的。ZEGO 官方示例仓库ZEGOCLOUD/ai_agent_quick_startweb 目录,开箱即用。里面有两个入口:

  • 最基础的登录 / 推流 / 拉流 / 退出房间
  • Start Live Digital Human——播报数字人

把这套 clone 下来,配上自己的 app_idserver_secret,跟着 README 把服务端和 Web 端都跑起来,第一时间验证你脑子里的架构图对不对。

4.2 用量化指标验延迟

数字人直播的生死线是延迟。ZEGO 提供了获取智能体状态及延迟数据的接口,能拿到:

  • LLM 首 token 耗时(毫秒)
  • TTS 音频首帧耗时(毫秒)
  • 服务端总耗时(毫秒)

上线前先量一次,把这三段分别记住。哪一段异常,一眼就能定位是模型问题、TTS 问题还是链路问题,而不是抓瞎。

4.3 收尾:释放资源

停止播报时,按「删除智能体实例 → 停止拉流 → 退出房间」的顺序来。别忘了删掉 agent_instance_id。直播中间如果反复创建实例不删,资源泄漏会慢慢吃掉你的并发额度。

最后

数字人直播的技术门槛越来越低。 当 ASR、LLM、TTS、数字人驱动全部被封进一个智能体,当 Web 端连渲染 SDK 都不用碰,那剩下需要你投入的是技术之外的东西:

数字人的人设、专业语料、业务编排。 一个只会背稿的数字人和一个能接得住观众提问、会引导成交、有品牌人格的数字人,差距不只是代码还要内容层的东西。

建议先跑通官方ai_agent_quick_start的 Web 示例,先让数字人「说」起来,祝你的第一个数字人开口说话。

最新文章
数字人直播 Web 端接入实战,1 个 Agent 当天跑通
2026/09/01
基于 ZEGO ZIM 搭建 App 内电商客服聊天场景:商品卡片、客服路由与合规审计的实现
2026/08/27
WebCodecs API 详解:浏览器中的原生编解码器访问
2026/08/25
活动报名|来全球AI出海大会与即构共话增长
2026/08/21
远程医疗视频会议功能实现指南:基于 ZEGO 音视频 SDK 的集成全流程
2026/08/20
扫一扫,获取更多服务与支持
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们