feat: 新增CC码音视频监管系统可落地技术方案,含技术栈选型、核心模块实现、数据库设计、部署架构

This commit is contained in:
freedakgmail
2026-07-21 21:25:32 +08:00
parent 34e4a0773e
commit e4c32b3067
2 changed files with 671 additions and 7 deletions
@@ -0,0 +1,664 @@
# CC码音视频监管系统——可落地技术方案
> 基于业务版方案的技术实现规划
> 编制日期:2026年7月
---
## 一、技术架构总览
### 1.1 架构原则
| 原则 | 说明 |
|------|------|
| **复用现有基础** | 在TCS-IPTV系统(Go+Gin+PostgreSQL)上扩展,不推倒重来 |
| **云原生** | Kubernetes容器化部署,微服务架构,支持水平扩展 |
| **等保三级** | 所有组件部署于广电云等保三级VPC内 |
| **音视频统一** | 视频和音频共用CC码体系、共用API网关、共用监管架构 |
| **分层解耦** | API网关层、业务服务层、检测引擎层、存储层独立部署、独立扩缩 |
### 1.2 服务拆分
| 服务名 | 语言 | 职责 | 部署形态 |
|--------|------|------|---------|
| **api-gateway** | Go | 统一API网关,鉴权、限流、路由 | K8s Deployment, 3副本 |
| **cc-code-svc** | Go | CC码生成、签发、生命周期管理、码段分配 | K8s Deployment, 3副本 |
| **verify-svc** | Go | CC码验证、状态查询、哈希校验 | K8s Deployment, 5副本 |
| **ugc-code-svc** | Go | UGC批量赋码、码段管理、批量回传 | K8s Deployment, 3副本 |
| **takedown-svc** | Go | 秒级下架指令分发、全网同步、下架验证 | K8s Deployment, 3副本 |
| **appeal-svc** | Go | 申诉接收、审核流转、恢复指令 | K8s Deployment, 2副本 |
| **probe-crawler** | Python | 网络探针爬虫集群,音视频内容采集 | K8s Deployment, 10~50副本 |
| **probe-detector** | Python | 水印提取、指纹比对、AI语义分析 | K8s Deployment + GPU节点 |
| **fingerprint-svc** | Python | 视频/音频指纹提取与入库 | K8s Deployment + GPU节点 |
| **watermark-svc** | Rust/Go | 视频水印嵌入/提取、音频水印嵌入/提取 | K8s Deployment, 3副本 |
| **live-monitor** | Go+Python | 直播/广播实时录制、切片检测、断流指令 | K8s Deployment, 5副本 |
| **admin-frontend** | React | 监管后台、运营管理、数据大屏 | Nginx静态部署 |
---
## 二、技术栈选型
### 2.1 后端服务层
| 组件 | 选型 | 版本 | 选型理由 |
|------|------|------|---------|
| 核心语言 | Go | 1.22+ | 高并发、低延迟,已有TCS-IPTV代码基础 |
| Web框架 | Gin | 1.10+ | 轻量高性能,已有代码基础 |
| ORM | GORM | 2.0+ | Go生态最成熟ORM,已有代码基础 |
| API网关 | Kong | 3.x | 开源成熟,插件丰富(JWT/限流/日志) |
| 服务间通信 | gRPC | — | 内部服务高性能RPCProtobuf契约 |
| 依赖注入 | Wire | — | Go编译时依赖注入,类型安全 |
### 2.2 检测引擎层
| 组件 | 选型 | 版本 | 选型理由 |
|------|------|------|---------|
| 检测服务语言 | Python | 3.11+ | AI/媒体处理生态最丰富 |
| 检测服务框架 | FastAPI | 0.110+ | 异步高性能,自动生成API文档 |
| 任务调度 | Celery + Redis | 最新版 | 异步任务队列,支持GPU任务排队 |
| GPU推理框架 | NVIDIA Triton | 2.x | 多模型并行、动态批处理 |
| 深度学习框架 | PyTorch | 2.x | 模型训练与推理 |
### 2.3 媒体处理层
| 组件 | 选型 | 版本 | 选型理由 |
|------|------|------|---------|
| 视频水印 | 自研(DCT+QIM算法) | — | 广电要求自主可控,需定制标准 |
| 视频水印备选 | Digimarc / 海致BD | 商用 | 快速落地可采购商用方案 |
| 音频水印 | 自研(DSSS+心理声学模型) | — | 抗翻录需定制优化 |
| 音频水印备选 | Fraunhofer AudioMark | 商用 | 成熟商用方案,快速验证 |
| 视频指纹 | 自研(关键帧+深度指纹) | — | 需自建指纹库,不依赖第三方 |
| 视频指纹备选 | 腾讯云/字节火山引擎API | SaaS | 快速验证阶段可调用第三方 |
| 音频指纹 | 自研(频谱图+Constellation Map | — | 类Shazam算法,技术成熟可自研 |
| 音频指纹备选 | ACRCloud / Audible Magic | SaaS | 成熟商用音频识别服务 |
| 视频处理 | FFmpeg | 6.x+ | 开源标准,转码/裁剪/帧提取 |
| 音频处理 | librosa / torchaudio | 最新版 | Python音频分析标准库 |
### 2.4 AI推理层
| 组件 | 选型 | 版本 | 选型理由 |
|------|------|------|---------|
| 推理服务 | NVIDIA Triton | 2.x | GPU模型服务化,动态批处理 |
| 视频语义理解 | CLIP + 时序模型 | — | OpenAI CLIP用于视频帧理解 |
| 视频语义备选 | 商汤/百度多模态API | SaaS | 快速落地可调用第三方 |
| 音频语义理解 | Whisper + 音频Embedding | — | 语音识别+音频特征提取 |
| 模型仓库 | MLflow | 最新版 | 模型版本管理、实验追踪 |
| GPU硬件 | NVIDIA A10 / A100 | — | A10性价比优,A100用于大规模推理 |
### 2.5 数据存储层
| 组件 | 选型 | 版本 | 用途 | 选型理由 |
|------|------|------|------|---------|
| 关系型数据库 | PostgreSQL | 16.x | CC码记录、元数据、码段、申诉 | 已有代码基础,JSONB灵活schema |
| 数据库高可用 | Patroni + etcd | 最新版 | 自动故障切换、读写分离 | PG生态标准HA方案 |
| 缓存 | Redis Cluster | 7.x | 热点CC码状态缓存、限流、分布式锁 | 毫秒级状态查询 |
| 向量数据库 | Milvus | 2.x | 视频/音频指纹向量相似度检索 | 亿级指纹检索 |
| 时序数据库 | ClickHouse | 24.x | 播放数据、检测日志、运营分析 | 海量写入、快速聚合 |
| 对象存储 | MinIO | 最新版 | 视频片段、音频片段、证据包 | S3兼容,私有部署 |
| 搜索引擎 | Elasticsearch | 8.x | 审核报告检索、日志检索 | 全文检索标准方案 |
### 2.6 消息与异步层
| 组件 | 选型 | 版本 | 用途 |
|------|------|------|------|
| 消息队列 | Apache Kafka | 3.x | 下架指令广播、检测任务分发、播放数据回传 |
| 流处理 | Apache Flink | 1.18+ | 实时播放统计、异常检测、直播流处理 |
| 任务队列 | Celery + Redis | 最新版 | 异步任务(爬虫调度、通知发送) |
| 定时调度 | Airflow | 2.x | 定时爬虫、存量补码监控、报表生成 |
### 2.7 基础设施与DevOps
| 组件 | 选型 | 版本 | 用途 |
|------|------|------|------|
| 容器编排 | Kubernetes | 1.29+ | 容器编排、自动扩缩容 |
| 镜像仓库 | Harbor | 2.x | 私有镜像仓库、安全扫描 |
| 密钥管理 | HashiCorp Vault | 最新版 | API Key、数据库密码管理 |
| 指标监控 | Prometheus + Grafana | 最新版 | 指标采集、告警、可视化 |
| 日志采集 | Loki + Promtail | 最新版 | 全链路日志聚合 |
| 链路追踪 | Jaeger / OpenTelemetry | 最新版 | 分布式请求追踪 |
| CI/CD | GitLab CI + ArgoCD | 最新版 | 自动化构建、GitOps持续交付 |
### 2.8 前端层
| 组件 | 选型 | 版本 | 用途 |
|------|------|------|------|
| 管理后台 | React | 18.x | 监管后台、运营管理 |
| UI组件库 | Ant Design | 5.x | 企业级中后台组件 |
| 图表可视化 | ECharts | 5.x | 监管数据可视化 |
| 状态管理 | Zustand | 最新版 | 轻量全局状态管理 |
---
## 三、核心模块技术实现
### 3.1 CC码生成与生命周期管理(cc-code-svc
**复用现有**`tcs-iptv/internal/cccode` 已实现码段分配、序列号生成、PostgreSQL持久化。
**需扩展**
| 功能 | 实现方案 | 数据库表 |
|------|---------|---------|
| CC码生成 | 复用现有Generator,扩展音频内容类型 | `cc_segments`表扩展category字段 |
| 生命周期状态机 | 状态字段+状态机校验,非法转换返回错误 | `cc_records`表增加status字段 |
| 状态变更审计 | 每次变更记录操作人、时间、原因 | 新增`cc_status_log`表 |
| 码段管理 | 广电分配码段给平台,平台在码段内赋码 | `cc_segments`表增加platform_id字段 |
| 码段冻结/回收 | 广电通过API冻结平台码段 | `cc_segments`表增加frozen字段 |
**CC码状态机**
```
pending(审核中)─审核通过→ active(有效)
active ─举报/疑似违规→ paused(暂停)
paused ─核实无违规→ active(恢复)
paused ─确认违规→ taken_down(下架)
active ─授权到期/内容下线→ expired(过期)
```
**关键API**
| 接口 | 方法 | 说明 | 调用方 |
|------|------|------|--------|
| `/api/v1/code/apply` | POST | 申请CC码 | 内容制作方/平台 |
| `/api/v1/code/issue` | POST | 审核通过后签发 | 监管方 |
| `/api/v1/code/status` | GET | 查询CC码状态 | 平台(高频调用) |
| `/api/v1/code/suspend` | POST | 暂停CC码 | 监管方 |
| `/api/v1/code/restore` | POST | 恢复CC码 | 监管方 |
| `/api/v1/code/takedown` | POST | 下架CC码 | 监管方 |
| `/api/v1/code/segment/allocate` | POST | 分配码段给平台 | 监管方 |
| `/api/v1/code/segment/freeze` | POST | 冻结平台码段 | 监管方 |
### 3.2 平台门禁验证(verify-svc
**复用现有**`tcs-iptv/internal/api/handlers.go` 已有 `/content/verify``/content/inject` 等验证接口。
**需扩展**:增加音频内容验证、UGC批量验证、直播实时验证。
**验证流程**
```
平台调用API → API网关鉴权 → verify-svc → Redis缓存查询
├── 命中缓存 → 直接返回状态(毫秒级)
└── 未命中 → 查询PostgreSQL → 写入Redis → 返回(秒级)
```
**四关验证API**
| 关卡 | 接口 | 检查内容 | 响应时间 |
|------|------|---------|---------|
| 上传拦截 | `POST /api/v1/verify/upload` | CC码是否存在、是否在有效号段内 | <100ms |
| 播出校验 | `GET /api/v1/verify/playback?cc_code=xxx` | CC码状态是否active | <50ms(缓存) |
| CDN注入校验 | `POST /api/v1/verify/cdn` | 文件哈希与登记哈希是否一致 | <200ms |
| 终端抽检 | `POST /api/v1/verify/terminal` | 播放内容哈希与登记哈希抽样比对 | <200ms |
**性能设计**
- Redis缓存CC码状态,TTL=10秒,热点码命中率>99%
- verify-svc水平扩展,支持10万QPS
- API网关限流:单平台默认1万QPS,可按需调整
### 3.3 秒级下架指令分发(takedown-svc
**复用现有**`tcs-iptv` 已有 `/content/takedown` 接口。
**需扩展**:从单平台下架升级为全网秒级同步下架。
**技术实现**
```
监管方下达下架指令
├── takedown-svc接收指令
│ ├── 查询CC码关联的所有平台、CDN(从PostgreSQL
│ ├── 生成各平台的下架指令
│ └── 写入Kafka topic: takedown.broadcast
├── Kafka多分区并行消费
│ ├── 消费者1 → 通知视频平台A(HTTP回调)
│ ├── 消费者2 → 通知视频平台B(HTTP回调)
│ ├── 消费者3 → 通知音频平台A(HTTP回调)
│ ├── 消费者4 → 通知CDN全网(API调用)
│ └── 消费者N → ...
└── 各平台/CDN执行下架 → 回传确认 → takedown-svc记录
```
**关键设计**
| 设计点 | 方案 |
|--------|------|
| 指令分发 | Kafka多分区并行,每个平台一个分区,保证并行度 |
| 平台回调 | HTTP POST回调平台下架API,超时3秒,重试2次 |
| CDN清除 | 调用CDN API清除缓存+加入黑名单 |
| 下架确认 | 平台执行后回调确认接口,超时未确认自动告警 |
| 下架验证 | 网络探针分钟后验证URL是否仍可访问 |
| 指令幂等 | 指令ID去重,重复指令不重复执行 |
### 3.4 UGC批量赋码(ugc-code-svc
**技术实现**
```
平台获得码段授权
├── 平台本地赋码(无需实时联网)
│ ├── 从分配的码段中取序号
│ ├── 生成CC码(平台本地完成,毫秒级)
│ └── 嵌入水印(平台转码环节)
└── 批量回传CC码中心(异步)
├── 平台调用 POST /api/v1/ugc/batch-report
├── 请求体:[{cc_code, content_hash, title, uploader_id, timestamp}, ...]
├── 单次最多1000条
└── CC码中心写入PostgreSQL,建立指纹索引
```
**API设计**
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/v1/ugc/segment/apply` | POST | 平台申请码段 |
| `/api/v1/ugc/batch-report` | POST | 批量回传赋码信息 |
| `/api/v1/ugc/batch-verify` | POST | 批量验证UGC的CC码 |
**性能设计**
- 平台本地赋码,零延迟,不影响用户上传体验
- 批量回传异步进行,5分钟一批,不阻塞业务
- 批量回传支持10万条/分钟吞吐
### 3.5 视频水印嵌入与提取(watermark-svc
**技术方案**:基于DCT域量化索引调制(QIM)算法。
**嵌入流程**
```
原始视频 → FFmpeg解码 → 分帧 → DCT变换 → QIM嵌入水印信息 → IDCT → 重新编码
水印信息 = CC码(48bit) + 平台代码(16bit) + 时间戳(32bit)
```
**提取流程**
```
待检测视频 → FFmpeg解码 → 分帧 → DCT变换 → QIM提取水印 → 多帧投票 → 输出CC码
```
**技术参数**
| 参数 | 指标 | 说明 |
|------|------|------|
| 嵌入容量 | 96bit/帧 | CC码48bit + 平台16bit + 时间戳32bit |
| 不可见性 | PSNR > 38dB | 人眼不可察觉 |
| 抗压缩 | H.264/H.265压缩后提取率 > 95% | 常见转码场景 |
| 抗裁剪 | 画面裁剪50%后提取率 > 80% | 多帧冗余保证 |
| 嵌入速度 | 1分钟视频处理 < 10秒 | FFmpeg GPU加速 |
| 提取速度 | 1分钟视频处理 < 5秒 | 关键帧采样提取 |
**实现语言**:Rust(性能要求高,FFmpeg绑定成熟)或 Go+CGO(复用FFmpeg C库)。
### 3.6 音频水印嵌入与提取
**技术方案**:基于扩频水印(DSSS)+心理声学模型。
**嵌入流程**
```
原始音频 → 分帧 → FFT → 心理声学模型计算掩蔽阈值 → DSSS扩频嵌入 → IFFT → 重编码
水印信息 = CC码(48bit) + 平台代码(16bit) + 时间戳(32bit)
```
**技术参数**
| 参数 | 指标 | 说明 |
|------|------|------|
| 嵌入容量 | 96bit/10秒 | 每10秒嵌入一轮完整水印 |
| 不可听性 | SNR > 20dB | 人耳不可察觉 |
| 抗压缩 | MP3 128kbps后提取率 > 90% | 常见音频格式 |
| 抗翻录 | 安静环境翻录提取率 > 70% | 嘈杂环境下降明显,依赖音频指纹兜底 |
| 抗变速 | 0.9x~1.1x范围内提取率 > 80% | 超出范围依赖音频指纹 |
| 嵌入速度 | 1分钟音频处理 < 5秒 | |
| 提取速度 | 1分钟音频处理 < 3秒 | |
> **关键设计**:音频水印作为追溯手段,音频指纹(3.7节)作为主力识别技术。两者独立运行,互为补充。
### 3.7 视频指纹(fingerprint-svc
**技术方案**:关键帧提取 + 深度感知哈希(Deep pHash)。
**指纹提取流程**
```
视频 → FFmpeg关键帧提取(每秒1帧) → ResNet50特征提取 → 降维到256维向量 → 存入Milvus
```
**指纹比对流程**
```
待检测视频 → 同样提取指纹向量 → Milvus余弦相似度检索 → Top-K结果 → 阈值判断
├── 相似度 > 0.85 → 疑似搬运
├── 相似度 0.50~0.85 → 疑似二创
└── 相似度 < 0.50 → 原创内容
```
**技术参数**
| 参数 | 指标 | 说明 |
|------|------|------|
| 指纹维度 | 256维浮点向量 | ResNet50特征降维 |
| 提取速度 | 1分钟视频 < 2秒(GPU | A10 GPU |
| 比对速度 | 毫秒级 | Milvus HNSW索引 |
| 指纹库容量 | 亿级 | Milvus分布式集群 |
| 准确率 | > 95%(搬运检测) | 经转码/加滤镜后仍可识别 |
### 3.8 音频指纹
**技术方案**:基于频谱图的Constellation Map算法(类Shazam)。
**指纹提取流程**
```
音频 → FFT频谱分析 → 提取能量峰值点 → 组合峰值对 → 生成指纹哈希 → 存入Milvus
```
**指纹比对流程**
```
待检测音频 → 同样提取指纹哈希 → Milvus检索 → 匹配峰值对数量统计 → 阈值判断
├── 匹配数 > 阈值高 → 疑似翻录
├── 匹配数中等 → 疑似翻唱/改编
└── 匹配数低 → 原创音频
```
**技术参数**
| 参数 | 指标 | 说明 |
|------|------|------|
| 指纹格式 | 32bit哈希/峰值对 | Constellation Map |
| 提取速度 | 1分钟音频 < 1秒(CPU | 纯信号处理,无需GPU |
| 比对速度 | 毫秒级 | Milvus HNSW索引 |
| 抗翻录 | 翻录后识别率 > 90% | Shazam级别 |
| 抗变速 | 0.9x~1.1x识别率 > 85% | 超出范围需AI语义辅助 |
| 抗降噪 | 常规降噪后识别率 > 90% | |
| 翻唱识别 | 有限(需AI语义辅助) | 翻唱改变波形特征,指纹难匹配 |
### 3.9 网络探针爬虫集群(probe-crawler
**技术方案**:分布式爬虫 + 浏览器自动化。
| 采集方式 | 技术实现 | 部署规模 |
|---------|---------|---------|
| 视频网站巡查 | Scrapy + Playwright(浏览器自动化) | 10~20副本 |
| 音频平台巡查 | Scrapy + API抓取 | 5~10副本 |
| 直播/广播录制 | FFmpeg拉流录制,按分钟切片 | 5副本(每副本50路) |
| 音频流监测 | FFmpeg拉取音频流 → 切片 → 送检测 | 5副本 |
**反反爬策略**
| 策略 | 说明 |
|------|------|
| 代理IP池 | 商业代理IP服务,轮换IP |
| User-Agent轮换 | 随机UA,模拟真实浏览器 |
| 请求频率控制 | 每站点QPS限制,避免触发反爬 |
| 浏览器自动化 | Playwright渲染JS,绕过简单反爬 |
| 群众举报补充 | Web举报入口 + API,作为爬虫补充 |
### 3.10 直播实时监管(live-monitor
**技术方案**
```
直播流/广播流 → FFmpeg拉流 → 按分钟切片 → 并行送检
├── 水印提取(秒级)
├── 指纹比对(秒级)
└── AI语义分析(分钟级)
检测结果 → 正常:继续监控
→ 违规:秒级断流指令
```
**技术参数**
| 参数 | 指标 | 说明 |
|------|------|------|
| 并发监测路数 | 500路(初期)→ 2000路(目标) | 按GPU资源线性扩展 |
| 切片间隔 | 60秒 | 平衡检测延迟与计算量 |
| 检测延迟 | 水印/指纹 < 10秒,AI语义 < 60秒 | 切片完成后计时 |
| 断流指令 | < 1秒 | 通过API通知平台断流 |
---
## 四、数据库设计
### 4.1 核心表结构
**cc_recordsCC码记录表)**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| cc_code | VARCHAR(64) | CC码,唯一索引 |
| content_type | VARCHAR(16) | video/audio/live_video/live_audio |
| category | VARCHAR(32) | 内容类目(微短剧/网剧/音乐/播客等) |
| title | VARCHAR(256) | 内容标题 |
| file_hash | VARCHAR(64) | 文件SHA256哈希 |
| perceptual_hash | VARCHAR(128) | 感知哈希(视频/音频指纹摘要) |
| fingerprint_vector | JSONB | 指纹向量(存Milvus的引用ID |
| status | VARCHAR(16) | pending/active/paused/taken_down/expired |
| platform_id | VARCHAR(32) | 所属平台 |
| cp_name | VARCHAR(128) | 内容制作方 |
| is_ugc | BOOLEAN | 是否UGC内容 |
| parent_cc_code | VARCHAR(64) | 父CC码(二创/衍生音频关联) |
| watermark_info | JSONB | 水印嵌入信息 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
**cc_segments(码段表)**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| segment_prefix | VARCHAR(32) | 码段前缀 |
| platform_id | VARCHAR(32) | 分配给哪个平台 |
| category | VARCHAR(32) | 内容类目 |
| start_seq | BIGINT | 起始序号 |
| end_seq | BIGINT | 结束序号 |
| current_seq | BIGINT | 当前已用序号 |
| frozen | BOOLEAN | 是否冻结 |
| allocated_at | TIMESTAMP | 分配时间 |
**takedown_orders(下架指令表)**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| order_id | VARCHAR(64) | 指令ID,唯一索引 |
| cc_code | VARCHAR(64) | 目标CC码 |
| reason | TEXT | 下架原因 |
| issued_by | VARCHAR(64) | 下达人 |
| status | VARCHAR(16) | pending/executing/confirmed/failed |
| targets | JSONB | 下架目标列表(平台+CDN |
| confirmations | JSONB | 各平台确认回执 |
| created_at | TIMESTAMP | 下达时间 |
| completed_at | TIMESTAMP | 完成时间 |
**appeals(申诉表)**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGSERIAL | 主键 |
| appeal_id | VARCHAR(64) | 申诉ID |
| cc_code | VARCHAR(64) | 关联CC码 |
| appellant | VARCHAR(128) | 申诉人/平台 |
| reason | TEXT | 申诉理由 |
| evidence | JSONB | 证据材料 |
| status | VARCHAR(16) | pending/reviewing/approved/rejected |
| reviewer | VARCHAR(64) | 审核人 |
| result | TEXT | 审核结论 |
| created_at | TIMESTAMP | 申诉时间 |
| resolved_at | TIMESTAMP | 结案时间 |
**detection_logs(检测日志表,ClickHouse**
| 字段 | 类型 | 说明 |
|------|------|------|
| event_id | UUID | 事件ID |
| cc_code | String | 检测到的CC码(如有) |
| content_url | String | 内容URL |
| detection_method | String | watermark/fingerprint/ai_semantic |
| result | String | normal/suspected/violation |
| confidence | Float32 | 置信度 |
| platform | String | 发现平台 |
| detected_at | DateTime | 检测时间 |
### 4.2 Kafka Topic规划
| Topic | 分区数 | 用途 | 保留期 |
|-------|--------|------|--------|
| `topic.code.apply` | 6 | CC码申请事件 | 7天 |
| `topic.code.issued` | 6 | CC码签发事件 | 30天 |
| `topic.takedown.broadcast` | 24 | 下架指令广播 | 7天 |
| `topic.takedown.confirm` | 6 | 下架确认回执 | 30天 |
| `topic.detection.task` | 12 | 检测任务分发 | 3天 |
| `topic.detection.result` | 12 | 检测结果上报 | 30天 |
| `topic.ugc.batch-report` | 6 | UGC批量回传 | 7天 |
| `topic.playback.event` | 24 | 播放数据回传 | 3天 |
| `topic.appeal.created` | 3 | 申诉创建 | 30天 |
| `topic.system.dlq` | 3 | 死信队列 | 永久 |
---
## 五、部署架构
### 5.1 Kubernetes集群规划
| 集群 | 节点配置 | 用途 |
|------|---------|------|
| **业务集群** | 6~10台 8C16G | API网关、业务服务、管理后台 |
| **检测集群** | 4~8台 8C16G + 2~4台 GPU(A10) | 爬虫、检测引擎、指纹提取、AI推理 |
| **存储集群** | 3台 4C8GPG主从)+ 3台 8C32GMilvus+ 3台 4C8GClickHouse | 数据库 |
| **消息集群** | 3台 4C8G | Kafka + ZooKeeper |
### 5.2 GPU资源规划
| 用途 | GPU型号 | 数量 | 说明 |
|------|---------|------|------|
| 视频指纹提取 | A10 | 2~4张 | ResNet50深度模型推理,GPU比CPU快10~50倍 |
| 音频指纹提取 | 无需GPU | — | Constellation Map是纯信号处理(FFT+峰值检测),CPU即可,1分钟音频<1秒 |
| AI视频语义 | A10 | 1~2张 | CLIP多模态模型推理,兜底检测 |
| AI音频语义 | A10 | 1张 | Whisper语音识别+音频Embedding,兜底检测 |
| 水印嵌入/提取 | 无需GPU | — | DCT/DSSS变换,CPU计算即可 |
### 5.3 网络架构
```
互联网 ←→ 广电云安全网关 ←→ API网关(Kong) ←→ 业务服务集群
├── 检测集群(内网,不对外)
├── 存储集群(内网)
└── 消息集群(内网)
平台用户 ←→ 互联网 ←→ API网关 ←→ 业务服务
监管人员 ←→ 广电专网 ←→ 管理后台 ←→ 业务服务
```
---
## 六、分阶段实施计划
### 第一阶段(3个月):平台门禁上线
| 交付物 | 说明 |
|--------|------|
| cc-code-svc | CC码生成、签发、状态管理,复用现有TCS-IPTV代码 |
| verify-svc | 四关验证APIRedis缓存 |
| takedown-svc | 秒级下架指令分发 |
| api-gateway | Kong网关,鉴权限流 |
| 平台SDK | Go/Java SDK,分发给试点平台 |
| 管理后台 | CC码管理、下架操作界面 |
| 部署 | K8s业务集群 + PG + Redis + Kafka |
**对接目标**:IPTV平台 + 1~2家持证视频平台
### 第二阶段(6个月):网络探针MVP + UGC赋码
| 交付物 | 说明 |
|--------|------|
| ugc-code-svc | UGC批量赋码、码段管理 |
| probe-crawler | 爬虫集群,覆盖主流视频+音频平台 |
| probe-detector | 水印提取 + 视频指纹比对 + 音频指纹比对 |
| fingerprint-svc | 视频指纹提取与入库 |
| watermark-svc | 视频水印嵌入/提取 |
| Milvus集群 | 指纹向量库 |
| 检测集群 | GPU节点部署 |
**对接目标**:短视频平台 + 1~2家音频平台
### 第三阶段(9个月):存量补码 + 直播监管 + 音频扩展
| 交付物 | 说明 |
|--------|------|
| 存量补码工具 | 平台批量补码API + 进度监控 |
| live-monitor | 直播/广播实时录制、切片检测、断流 |
| 音频watermark-svc | 音频水印嵌入/提取 |
| 音频fingerprint-svc | 音频指纹提取与入库 |
| AI语义检测 | CLIP视频语义 + Whisper音频语义 |
| appeal-svc | 申诉接收、审核流转 |
### 第四阶段(12个月):全量运行
| 交付物 | 说明 |
|--------|------|
| 全平台对接 | 全网视频+音频平台完成API对接 |
| 存量补码完成 | 全量存量音视频内容补码 |
| 网络探针全量 | 爬虫覆盖全量平台,日检测量达标 |
| 完整监管闭环 | 告警→下架→验证→申诉全流程 |
| 监管大屏 | 数据可视化、运营报表 |
### 第五阶段(15个月):音频监管优化
| 交付物 | 说明 |
|--------|------|
| 音频指纹库完善 | Top10000音乐 + Top5000播客指纹入库 |
| 音频水印加固 | 抗翻录优化、抗变速优化 |
| 翻唱/混音检测 | AI音频语义模型优化 |
| 播客/有声书全量 | 全量覆盖 |
### 第六阶段(18个月):运营优化
| 交付物 | 说明 |
|--------|------|
| 误判率优化 | 误判率 < 2% |
| 对抗测试 | 去水印/翻录/变速对抗测试通过 |
| 自动化运营 | 告警自动处理率 > 80% |
| 性能优化 | 全链路性能调优 |
---
## 七、关键技术风险与应对
| 风险 | 等级 | 应对方案 |
|------|------|---------|
| **音频水印抗翻录不达标** | 高 | 自研方案先验证再上线;备选采购Fraunhofer商用方案;音频指纹作为主力兜底 |
| **视频指纹库规模过大** | 中 | Milvus分布式集群,按内容类目分CollectionHNSW索引优化 |
| **爬虫被反爬阻挡** | 中 | 代理IP池+Playwright浏览器自动化+群众举报补充 |
| **GPU资源不足** | 中 | 分级检测策略,快速筛查用CPU,深度检测才用GPU;按需扩容 |
| **平台对接进度滞后** | 中 | SDK简化对接难度,提供Go/Java双语言SDK+完整文档+技术支持 |
| **直播检测延迟超标** | 中 | 优先用水印/指纹(秒级),AI语义作为后台异步补充 |
| **Kafka消息积压** | 低 | Consumer Lag告警+自动扩容消费者副本 |
| **PG单点故障** | 低 | Patroni HA方案,一主两从,自动故障切换 |
---
## 八、与现有TCS-IPTV系统的关系
| 现有模块 | 复用方式 | 扩展内容 |
|---------|---------|---------|
| `internal/cccode` | 直接复用码段分配、序列号生成 | 扩展音频内容类型、码段冻结 |
| `internal/api/handlers.go` | 复用验证、下架接口框架 | 增加音频验证、UGC批量、直播接口 |
| `internal/chain` | 复用版权链交互 | 无需改动 |
| `internal/config` | 复用配置管理 | 增加新服务配置项 |
| `internal/monitor` | 复用Prometheus监控 | 无需改动 |
| `cmd/api-svc/main.go` | 复用服务启动框架 | 拆分为多个独立微服务 |
> **核心理念:TCS-IPTV是CC码中心的核心服务基础,音视频监管系统在其之上扩展检测引擎、网络探针、音频监管能力,形成完整闭环。**
@@ -196,9 +196,9 @@ CC码虽是强制要求,但平台门禁仍有管不到的地方:
|---------|---------|---------|------|------------|
| **提取CC码** | 类似扫描身份证 | 视频+音频 | 秒级 | 扛得住压缩、转码、裁剪 |
| **视频指纹比对** | 类比人脸识别,即使换了衣服也能认出 | 视频 | 毫秒级 | 扛得住剪辑、加滤镜、去水印 |
| **音频指纹比对** | 类比声纹识别,即使翻录、变速也能认出 | 音频 | 毫秒级 | 扛得住翻录、格式转换、变速、降噪 |
| **音频指纹比对** | 类比声纹识别,翻录后仍能认出 | 音频 | 毫秒级 | 扛得住翻录、格式转换、轻度变速、降噪 |
| **AI视频语义理解** | 类比让人看视频说"这跟某某剧是同一部" | 视频 | 分钟级 | 扛得住深度混剪、拼接 |
| **AI音频语义理解** | 类比让人听音频说"这跟某某内容是同一段" | 音频 | 分钟级 | 扛得住语音合成、变速、混音 |
| **AI音频语义理解** | 类比让人听音频说"这跟某某内容是同一段" | 音频 | 分钟级 | 对翻唱、混音的识别能力有限,作为兜底补充 |
检测手段层层递进:第一种认不出来就用第二种,第二种还不行就用第三种。视频和音频检测独立运行,同一内容的视频画面和音频轨道分别检测,任一命中即告警。
@@ -454,7 +454,7 @@ UGC视频上传
| 维度 | 视频指纹 | 音频指纹 |
|------|---------|---------|
| 识别对象 | 画面内容 | 音频波形特征 |
| 抗干扰能力 | 抗剪辑、加滤镜、去水印 | 抗翻录、格式转换、变速、降噪、混音 |
| 抗干扰能力 | 抗剪辑、加滤镜、去水印 | 抗翻录、格式转换、轻度变速、降噪;翻唱和深度混音需AI语义辅助 |
| 比对速度 | 毫秒级 | 毫秒级 |
| 独立性 | 依赖画面 | 不依赖画面,纯音频即可识别 |
| 适用场景 | 视频平台、短视频平台 | 音频平台、音乐平台、播客平台、视频提取音频 |
@@ -498,12 +498,12 @@ UGC视频上传
|------|------|
| **不可听** | 嵌入在音频信号中,人耳听不到,不影响收听体验 |
| **抗压缩** | 经过MP3/AAC等有损压缩后仍可提取 |
| **抗翻录** | 经过扬声器播放→麦克风翻录后可部分提取 |
| **抗变速** | 变速播放0.8x~1.5x)后仍可识别 |
| **抗降噪** | 经过降噪处理后仍可提取 |
| **抗翻录** | 在安静环境、高质量设备翻录后可部分提取;嘈杂环境或手机录音条件下提取率显著下降,此时主要依赖音频指纹兜底 |
| **抗变速** | 小范围变速(0.9x~1.1x)后仍可识别;大范围变速提取率下降,需音频指纹辅助 |
| **抗降噪** | 经过常规降噪处理后仍可提取 |
| **多段冗余** | 水印重复嵌入在音频多个时段中,部分丢失不影响提取 |
> 音频水印是音频内容监管的技术基础。音频翻录门槛低、传播渠道隐蔽,音频水印+音频指纹双重保障,确保即使翻录、变速、格式转换后仍可追溯来源。广电总局应制定音频水印嵌入标准,与视频水印标准统一规划。
> 音频水印是音频内容追溯的重要技术手段,但在抗翻录方面存在客观局限。实际应用中,**音频指纹是音频内容识别的主力技术**(成熟度类似Shazam),音频水印作为补充追溯手段。两者双重保障,音频指纹负责"认出是什么内容",音频水印负责"追溯是谁的、从哪来的"。广电总局应制定音频水印嵌入标准,与视频水印标准统一规划。
### 6.5 音频直播与广播监管