基于火山引擎实时音视频(RTC)的 iOS 绘本 AI 朗读 Demo。通过摄像头实时捕捉绘本画面,结合大模型视觉能力与 TTS 语音合成,实现"翻页即读"的儿童绘本伴读体验。
- 实时画面捕捉 — 通过设备摄像头获取绘本页面画面,推流至火山引擎 RTC 服务端
- AI 视觉朗读 — 基于豆包大模型(Doubao)的视觉理解能力,识别绘本内容并生成朗读文本
- TTS 语音合成 — 使用火山引擎双向 TTS(
volcano_bidirection)将文本转为自然语音 - 翻页检测 — 基于 Apple Vision 框架的图像特征对比,自动检测翻页动作并触发新一轮朗读
- OpenAPI 集成 — 通过火山引擎 OpenAPI 自动启动/管理 VoiceChat 智能体
| 模块 | 技术 |
|---|---|
| 语言 | Swift (iOS 13+) |
| UI | SwiftUI |
| 实时音视频 | VolcEngineRTC SDK v3.41 |
| AI 大模型 | 豆包 doubao-seed-1-6-flash-250828 (Volcengine ArkV3) |
| TTS | 火山引擎双向 TTS seed-tts-1.0 |
| ASR | 火山引擎 ASR volcano (bigmodel) |
| 计算机视觉 | Apple Vision (VNGenerateImageFeaturePrintRequest) |
| API 签名 | HMAC-SHA256 (火山引擎 V4 签名) |
├── RTCReader/ # Xcode 项目目录
│ ├── RTCReader/ # App 源码
│ │ ├── Config/
│ │ │ ├── AppConfig.swift # 配置入口(从 Secrets.plist 加载密钥)
│ │ │ └── Secrets.plist.example # 密钥模板(复制为 Secrets.plist 后填写)
│ │ ├── Models/ # 数据模型
│ │ ├── Services/ # 核心业务逻辑
│ │ │ ├── RTCReadingClient.swift # RTC 房间管理
│ │ │ ├── RealtimeReadingCoordinator.swift # 主协调器
│ │ │ ├── VolcengineOpenAPIService.swift # OpenAPI HTTP 客户端
│ │ │ ├── VolcengineSignature.swift # V4 签名实现
│ │ │ ├── PageChangeDetector.swift # 翻页检测
│ │ │ └── ...
│ │ └── Views/ # SwiftUI 视图
│ ├── RTCReaderTests/ # 单元测试
│ ├── scratch/ # 调试脚本
│ ├── Podfile # CocoaPods 依赖
│ └── ...
├── LICENSE
└── README.md
- Xcode 15+
- CocoaPods
- 火山引擎账号(需开通 RTC、VoiceChat、TTS 服务)
git clone https://github.com/<your-username>/RTC-Reader.git
cd RTC-Reader/RTCReaderpod install在 RTCReader/Config/ 目录下,将 Secrets.plist.example 复制为 Secrets.plist:
cd RTCReader/Config
cp Secrets.plist.example Secrets.plist编辑 Secrets.plist,填入你的火山引擎凭证:
重要: 将
Secrets.plist拖入 Xcode 项目中(选择 "Copy items if needed",确保添加到 App Target 的 "Copy Bundle Resources" 中),否则运行时会找不到配置文件。
| Key | 说明 | 获取方式 |
|---|---|---|
RTCAppId |
RTC 应用 ID | 火山引擎 RTC 控制台 |
RTCAppKey |
RTC 应用 Key | 同上 |
RTCRoomId |
房间 ID | 自定义,需与 Token 生成时一致 |
RTCUserId |
用户 ID | 自定义,需与 Token 生成时一致 |
RTCToken |
RTC 临时 Token | Token 生成工具 |
VolcengineAccessKey |
IAM Access Key | 火山引擎 IAM |
VolcengineSecretKey |
IAM Secret Key | 同上 |
AgentId |
智能体 ID | 火山引擎 VoiceChat 控制台 |
注意:
Secrets.plist已被.gitignore忽略,不会被提交到仓库。
open RTCReader.xcworkspace选择真机(需要摄像头)运行即可。
摄像头画面 → RTC 推流 → 云端 VoiceChat 智能体
↓
豆包大模型 (Vision) 识别绘本内容
↓
TTS 生成语音 → RTC 拉流播放
↓
翻页检测 (Apple Vision) → 触发新一轮朗读
- App 启动后通过 OpenAPI 创建 VoiceChat 任务,连接 RTC 房间
- 摄摄头画面通过 RTC 视频流推送至云端
- 豆包大模型通过视觉能力识别绘本页面内容
- TTS 引擎将识别结果转为语音,通过 RTC 音频流回传播放
- App 端通过图像特征对比检测翻页,自动触发新一轮朗读