33 KiB
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 | — | 内部服务高性能RPC,Protobuf契约 |
| 依赖注入 | 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算法) | — | 广电要求自主可控,需定制标准 |
| 视频水印备选 | 海致BD / 数字水印国产方案 | 商用 | 国产商用方案,自主可控,快速落地可采购 |
| 音频水印 | 自研(DSSS+心理声学模型) | — | 抗翻录需定制优化 |
| 音频水印备选 | 自研(开源算法改进) | — | 基于开源音频水印算法改进,避免闭源外国SDK的数据安全风险 |
| 视频指纹 | 自研(关键帧+深度指纹) | — | 需自建指纹库,不依赖第三方 |
| 视频指纹备选 | 腾讯云/字节火山引擎API | SaaS | 快速验证阶段可调用第三方(数据不出广电云) |
| 音频指纹 | 自研(频谱图+Constellation Map) | — | 类Shazam算法,技术成熟可自研 |
| 音频指纹备选 | ACRCloud / Audible Magic | SaaS | 仅用于快速验证,生产环境用自研 |
| 视频处理 | FFmpeg | 6.x+ | 开源标准,转码/裁剪/帧提取 |
| 音频处理 | librosa / torchaudio | 最新版 | Python音频分析标准库 |
数据安全说明:广电监管系统涉及内容主权,不使用闭源外国商用SDK(如Digimarc、Fraunhofer)。原因:①闭源二进制无法审计后门或遥测;②美国/欧盟出口管制风险;③等保三级审查不通过;④水印格式不透明,广电无法制定自主标准。水印技术采用"自研为主、国产商用为辅"策略。
自研开源参考项目:
| 技术模块 | 开源项目 | 语言 | License | 说明 |
|---|---|---|---|---|
| 视频水印 | AlexAgents/VidMark | Python | MIT | DWT-DCT-QIM算法实现,含嵌入/提取完整流程,抗压缩/噪声/滤波 |
| 视频水印 | fabriziosalmi/open-video-watermark | Python | MIT | DCT频域水印,Flask Web应用+REST API,含Docker部署 |
| 视频水印 | JumiRay/video-invisible-watermark | Python | MIT | DCT不可见水印,YUV亮度通道嵌入,多帧提取 |
| 音频水印 | swesterfeld/audiowmark | C++ | GPL-3.0 | ⭐569星,Patchwork算法,1024采样帧FFT,成熟可用 |
| 音频水印 | dmeldrum6/Audio-Watermarking | JavaScript | — | DSSS+心理声学模型+Bark尺度掩蔽阈值+Reed-Solomon纠错,完整实现 |
| 音频水印 | corupta/DSSS-watermark | Python | GPL-3.0 | DSSS扩频水印Python脚本,含嵌入/检测完整代码 |
| 音频水印 | Tranquil-Flow/carnation-radio | Rust/TS | — | Masked DSSS+心理声学掩蔽(Painter-Spanias模型),含抗翻录实测数据 |
| 音频指纹 | rhthm/audio-fingerprint-engine | Python | — | Constellation Map+组合哈希+PostgreSQL,完整Shazam算法实现 |
| 音频指纹 | inboxpraveen/Audio-Fingerprint | Python | — | 生产级,3秒片段识别,SQLite+WAL,含REST API |
| 音频指纹 | ankitjosh78/AudioFingerprinting | Python | — | FastAPI+librosa+scipy,含YouTube导入和麦克风实时识别 |
| 视频指纹 | ResNet50预训练模型 + Milvus向量检索 | Python | Apache-2.0 | torchvision提供ResNet50,Milvus官方提供Python SDK,工程集成即可 |
参考论文:
- 视频水印:Chen & Wornell, "Quantization Index Modulation", IEEE Trans. Info. Theory, 2001
- 音频水印:Cox et al., "Secure Spread Spectrum Watermarking", 1997;Garcia, "DSSS for Audio", 1999
- 心理声学模型:Zwicker & Fastl, "Psychoacoustics: Facts and Models", 1999;ISO/IEC 11172-3 (MPEG-1 Audio)
- 音频指纹:Avery Wang, "An Industrial-Strength Audio Search Engine", ISMIR 2003(Shazam核心论文)
自研难度评估与落地策略:
| 技术模块 | 自研难度 | 预估周期 | 难点分析 | 落地策略 |
|---|---|---|---|---|
| 视频水印 | ⭐⭐⭐ 中等 | 3~6个月 | DCT+QIM算法是经典学术成果,论文充分;难点在抗裁剪+抗压缩的鲁棒性调优,需大量对抗测试。1~2个硕博背景算法工程师可完成 | 先采购国产商用方案快速集成(3个月),同步自研(6个月),自研版成熟后替换 |
| 音频水印 | ⭐⭐⭐⭐ 较难 | 6~9个月 | DSSS扩频+心理声学模型组合复杂;抗翻录是公认难题,需反复实验调参;心理声学模型需音频信号处理专业背景。建议至少1个音频信号处理博士+1个工程师 | 自研为主,基于开源算法改进。音频水印抗翻录需持续优化,非一次性开发。不使用闭源外国SDK,避免数据安全风险 |
| 视频指纹 | ⭐⭐ 低 | 2~3个月 | ResNet50是现成模型,关键帧提取用FFmpeg;本质是工程集成而非算法创新。难点在指纹库规模扩大后的检索性能优化 | 直接自研,1个PyTorch工程师即可 |
| 音频指纹 | ⭐⭐ 低 | 2~3个月 | Shazam算法论文公开20年,实现教程众多;librosa已提供FFT和频谱分析工具;算法不复杂,工程化即可 | 直接自研,1个Python工程师即可 |
双轨落地路线:
快速落地(3个月内):
├── 视频水印 → 采购国产商用方案集成上线(如海致BD)
├── 音频水印 → 基于开源算法改进,自研MVP上线
├── 视频指纹 → 自研MVP上线
└── 音频指纹 → 自研MVP上线
自主可控(6~12个月):
├── 视频水印 → 自研版替换国产商用方案
└── 音频水印 → 自研版持续优化抗翻录能力
核心结论:指纹技术自研难度低,直接自研;水印技术有一定门槛,采用"先采购国产商用快速落地、同步自研逐步替换"的双轨策略。所有水印技术最终实现自主可控,不依赖闭源外国SDK。
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_records(CC码记录表):
| 字段 | 类型 | 说明 |
|---|---|---|
| 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 |
爬虫、检测引擎、指纹提取、AI推理 |
| 存储集群 | 3台 4C8G(PG主从)+ 3台 8C32G(Milvus)+ 3台 4C8G(ClickHouse) | 数据库 |
| 消息集群 | 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 | 四关验证API,Redis缓存 |
| 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分布式集群,按内容类目分Collection,HNSW索引优化 |
| 爬虫被反爬阻挡 | 中 | 代理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码中心的核心服务基础,音视频监管系统在其之上扩展检测引擎、网络探针、音频监管能力,形成完整闭环。