35 KiB
35 KiB
CC码监管最优方案:平台侧API预防(秒级)+ 独立监控兜底(分钟级)
版本:V1.0 编制日期:2026年7月 关联文档:0-req-IPTV.md(TCS-IPTV需求规格)、IPTV系统融合MA码方案介绍.md
一、方案总览
1.1 设计目标
| 目标 | 指标 |
|---|---|
| 持证平台违规内容 | 秒级拦截(上传/播出环节预防) |
| 已上线违规内容 | 秒级下架(CC码指令全网同步) |
| 不配合平台/UGC | 分钟级发现 + 小时级处置 |
| 境外平台 | 天级封锁(DNS/IP层面) |
| 检测准确率 | 水印提取 ≥95%,指纹匹配 ≥90% |
1.2 双层架构
┌──────────────────────────────────────────────────────────┐
│ 第一层:平台侧预防 │
│ (秒级,主动拦截) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ 上传拦截 │ │ 播出校验 │ │ CDN注入 │ │终端抽检 │ │
│ │ (0ms) │ │ (+200ms) │ │ (秒级) │ │(实时) │ │
│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
│ │ │ │ │ │
│ └────────────┴────────────┴────────────┘ │
│ │ │
│ 监管API网关(统一入口) │
│ CC码验证 · 哈希比对 · 黑名单查询 │
├──────────────────────────────────────────────────────────┤
│ 第二层:独立监控兜底 │
│ (分钟级,被动发现) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ 爬虫采集 │ │ 直播旁路 │ │ 水印提取 │ │指纹比对 │ │
│ │ (持续) │ │ (实时) │ │ (秒级) │ │(毫秒级) │ │
│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
│ │ │ │ │ │
│ └────────────┴────────────┴────────────┘ │
│ │ │
│ 告警引擎 → 行政通知 → 证据固化 │
└──────────────────────────────────────────────────────────┘
1.3 两层的关系
| 维度 | 第一层(平台侧预防) | 第二层(独立监控兜底) |
|---|---|---|
| 定位 | 事前预防 + 事中拦截 | 事后发现 + 兜底监管 |
| 时效 | 秒级(0~200ms) | 分钟级(10秒~数小时) |
| 依赖平台配合 | 强依赖 | 不依赖 |
| 覆盖范围 | 持证平台 | 全网 |
| 检测手段 | CC码验证 + 哈希比对 | 水印提取 + 指纹匹配 + AI语义 |
| 执行方式 | 平台自动执行 | 行政通知 + CDN黑名单 |
| 对抗能力 | 平台可绕过(不调API) | 无法绕过(外部独立检测) |
核心原则:第一层是防线,第二层是底线。第一层能拦住的不需要第二层介入;第一层被绕过的由第二层兜底。
二、第一层:平台侧API预防(秒级)
2.1 四道拦截关卡
内容生命周期:
CP制作 → 上传平台 → 平台审核 → 入库 → 发布到CDN → 用户播放
拦截关卡:
┌─ 关卡1:上传拦截 ──┐ ┌─ 关卡2:播出校验 ─┐
│ 上传时验证CC码 │ │ 发布前验证CC码 │
│ 无码→拒绝上传 │ │ 码不合法→拒绝发布│
│ 时延:0ms │ │ 时延:0ms │
└──────────────────┘ └──────────────────┘
│
┌─ 关卡3:CDN注入校验 ─┐ ┌─ 关卡4:终端抽检 ──┐
│ 注入CDN前哈希校验 │ │ 播放时片段哈希抽检│
│ 哈希不匹配→拒绝注入│ │ 不匹配→断流切换 │
│ 时延:秒级 │ │ 时延:实时 │
└──────────────────┘ └──────────────────┘
2.2 关卡1:上传拦截(事前预防,0ms)
场景:用户/CP向平台上传视频时,平台调用监管API验证CC码。
用户上传视频
│
├── 平台提取视频元数据中的CC码
│
├── 调用监管API:POST /api/v1/verify/upload
│ Request:
│ {
│ "cc_code": "MA.156.8531.6101/WD/20260000001",
│ "file_hash": "sha256:abc123...",
│ "perceptual_hash": "phash:def456...",
│ "content_meta": {
│ "title": "xxx",
│ "duration": 3600,
│ "resolution": "1920x1080"
│ }
│ }
│
▼
监管API响应(<100ms)
│
├── { "action": "ALLOW", "cc_code": "valid", "hash_match": true }
│ → 平台允许上传
│
├── { "action": "DENY", "reason": "CC_CODE_NOT_FOUND" }
│ → 平台拒绝上传,提示"内容未取得CC码,请先完成备案"
│
├── { "action": "DENY", "reason": "HASH_MISMATCH" }
│ → 平台拒绝上传,提示"内容哈希与登记不符,疑似版本替换"
│
├── { "action": "DENY", "reason": "CC_CODE_REVOKED" }
│ → 平台拒绝上传,提示"该内容CC码已被吊销"
│
└── { "action": "QUARANTINE", "reason": "CC_CODE_NOT_FOUND", "suggestion": "ENTER_REVIEW" }
→ 平台允许暂存但不可发布,进入人工审核流程
关键设计:
- 平台在上传页面嵌入CC码验证SDK,上传前先验证
- 无CC码的内容不进入可发布状态(暂存区→人工审核→备案→发布)
- 验证API响应时间 <100ms(Redis缓存 + PostgreSQL索引)
2.3 关卡2:播出校验(事中拦截,+200ms)
场景:用户请求播放视频时,平台在返回播放地址前验证CC码状态。
用户点击播放
│
├── 平台向监管API查询CC码实时状态
│ GET /api/v1/verify/playback?cc_code={cc_code}
│
▼
监管API响应(<50ms,Redis缓存)
│
├── { "status": "ACTIVE" }
│ → 正常返回播放地址
│
├── { "status": "SUSPENDED", "action": "BLOCK" }
│ → 返回"该内容已被监管要求下架"
│
└── { "status": "REVOKED", "action": "BLOCK" }
→ 返回"该内容播出许可已被吊销"
关键设计:
- 平台播放器在请求播放地址时同步查询CC码状态
- CC码状态变更(下架/吊销)通过WebSocket实时推送到平台
- 查询走Redis缓存,命中率 >99%,响应 <50ms
- 用户感知延迟 <200ms(含网络往返)
2.4 关卡3:CDN注入校验(已有需求,对应需求7)
场景:运营商向CDN注入内容前,校验哈希。
运营商接收发布内容
│
├── 计算注入文件哈希(SHA-256)
│
├── 调用监管API:POST /api/v1/verify/cdn-inject
│ {
│ "cc_code": "MA.156.8531.6101/WD/20260000001",
│ "file_hash": "sha256:abc123...",
│ "cdn_endpoint": "cdn001.operator.com"
│ }
│
▼
├── 哈希匹配 → 允许注入CDN → 注册分发编码
└── 哈希不匹配 → 拒绝注入 → 告警 → 退回审核部门
2.5 关卡4:终端播放抽检(已有需求,对应需求8)
场景:播放器/机顶盒在播放时抽检片段哈希。
播放器下载片段
│
├── 计算片段哈希
│
├── 与可信数据空间链上哈希比对
│
├── 匹配 → 正常播放
└── 不匹配 → 断流 → 切换备用源 → 上报异常
2.6 应急下架指令链路(秒级全网同步)
场景:监管方下发CC码下架指令,秒级同步到全网。
监管方下发指令:"下架 CC码 MA.156.8531.6101/WD/20260000001"
│ ← T0
▼
TCS-IPTV系统解析CC码
│ 查询该CC码绑定的所有:
│ ├── 媒资编码 → 媒体资源库
│ ├── 分发编码 → 各运营商CDN
│ ├── 审核流水号 → CSPS
│ └── 各平台内容ID
│ ← T0+10ms
▼
并行下发执行指令
│
├── → 媒体资源库:撤除发布状态 ← T0+100ms
├── → 运营商A CDN:删除缓存+下线URL ← T0+100ms
├── → 运营商B CDN:删除缓存+下线URL ← T0+100ms
├── → 持证平台A:标记内容下架 ← T0+100ms
├── → 持证平台B:标记内容下架 ← T0+100ms
└── → CDN黑名单推送:全局拦截 ← T0+200ms
│
▼
全网下架完成
← T0+1~3秒(取决于各节点网络延迟)
技术实现:
| 机制 | 说明 | 时延 |
|---|---|---|
| WebSocket长连接 | TCS与各平台/运营商保持长连接,指令实时推送 | 100ms |
| Redis Pub/Sub | CC码状态变更广播到所有订阅节点 | 50ms |
| CDN API对接 | 调用各CDN的Purge API清除缓存 | 200ms~1s |
| 播出校验联动 | 关卡2的播出校验会自动拦截已下架CC码 | 实时 |
| 兜底轮询 | 未保持长连接的节点每5秒轮询CC码状态 | ≤5秒 |
2.7 监管API接口清单
| 接口 | 方法 | 调用方 | 时延要求 | 说明 |
|---|---|---|---|---|
/api/v1/verify/upload |
POST | 平台上传服务 | <100ms | 上传时CC码+哈希验证 |
/api/v1/verify/playback |
GET | 平台播放服务 | <50ms | 播出时CC码状态查询 |
/api/v1/verify/cdn-inject |
POST | 运营商CDN | <200ms | CDN注入哈希校验 |
/api/v1/verify/terminal |
POST | 终端播放器SDK | <100ms | 终端片段哈希抽检 |
/api/v1/takedown/issue |
POST | 监管方 | - | 下发下架指令 |
/api/v1/takedown/status |
GET | 各执行方 | <50ms | 查询下架执行状态 |
/api/v1/cc-code/lookup |
GET | 各方 | <50ms | CC码信息查询 |
/api/v1/blacklist/push |
POST | 监管方→CDN | - | 推送CDN黑名单 |
ws:/api/v1/events |
WS | 各平台/运营商 | 实时 | CC码状态变更实时推送 |
三、第二层:独立监控兜底(分钟级)
3.1 适用场景
第二层在以下场景触发:
| 场景 | 第一层状态 | 第二层动作 |
|---|---|---|
| 持证平台绕过API直接上传 | 关卡1被绕过 | 爬虫发现 → 水印/指纹检测 → 告警 |
| 平台未对接监管API | 第一层缺失 | 爬虫发现 → 检测 → 行政通知 |
| UGC二次创作传播 | 不经过上传校验 | 爬虫发现 → 指纹匹配 → 告警 |
| 境外平台传播 | 无法要求配合 | 爬虫发现 → 检测 → DNS封锁 |
| 直播违规内容 | 播出校验未覆盖 | 旁路录制 → 实时检测 → 告警 |
| 水印被恶意去除 | 所有关卡失效 | 指纹匹配 + AI语义 → 告警 |
3.2 采集层
3.2.1 爬虫采集
┌─────────────────────────────────────────┐
│ 爬虫任务调度中心 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 站点配置表 │ │ 任务队列 │ │
│ │ (Redis) │ │ (Kafka) │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ ┌──────┴────────────────┴──────┐ │
│ │ 爬虫Worker集群 │ │
│ │ (Playwright无头浏览器) │ │
│ │ │ │
│ │ ├── 页面渲染 + JS执行 │ │
│ │ ├── 视频地址嗅探 │ │
│ │ │ (拦截m3u8/mp4/flv请求) │ │
│ │ ├── 反爬处理 │ │
│ │ │ (UA轮换/代理池/限速) │ │
│ │ └── 去重过滤 │ │
│ │ (URL指纹 + 内容指纹) │ │
│ └──────────┬────────────────────┘ │
│ │ │
│ ▼ │
│ 输出: {url, title, platform, stream_url, │
│ duration, upload_time, uploader} │
│ → Kafka topic: raw-video-tasks │
└─────────────────────────────────────────┘
站点分级策略:
| 级别 | 站点类型 | 轮巡频率 | 并发数 | 示例 |
|---|---|---|---|---|
| P0 | 头部视频平台 | 5分钟 | 20 | 爱奇艺/腾讯/优酷/B站 |
| P1 | 中型平台 | 30分钟 | 10 | 芒果/搜狐/西瓜视频 |
| P2 | 短视频平台 | 15分钟 | 15 | 抖音/快手/小红书 |
| P3 | 长尾站点 | 2小时 | 5 | 各类小视频站/论坛 |
| P4 | 境外平台 | 1小时 | 5 | YouTube等(通过代理) |
3.2.2 直播旁路录制
┌─────────────────────────────────────────┐
│ 直播旁路录制引擎 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 频道配置表 │ │ 录制Worker │ │
│ │ │ │ (FFmpeg) │ │
│ │ 卫星频道 │→ │ │ │
│ │ 有线频道 │→ │ ffmpeg -i │ │
│ │ 网络直播 │→ │ {url} │ │
│ │ │ │ -c copy │ │
│ │ │ │ -f segment│ │
│ │ │ │ -seg_time │ │
│ │ │ │ 300 │ │
│ └─────────────┘ └──────┬──────┘ │
│ │ │
│ 切片输出 │
│ (每5分钟一个mp4) │
│ │ │
│ ▼ │
│ Kafka topic: live-tasks │
└─────────────────────────────────────────┘
3.3 检测层
3.3.1 三级检测流水线
输入视频
│
├─────────────────────────────────────────────┐
▼ ▼
路径A:快速检测(CPU,毫秒级) 路径B:深度检测(GPU,秒级)
│ │
├── 第1步:元数据提取 ├── 第2步:水印提取
│ ffprobe提取CC码元数据 │ DCT频域水印提取
│ (moov box / EXT-X-CC-CODE) │ 多帧冗余提取 + 多数投票
│ 时延:100ms │ 时延:2~5秒/30秒片段
│ │
├── 找到CC码? ├── 找到CC码?
│ ├── 是 → 验证码合法性 → 判定 │ ├── 是 → 验证 → 判定
│ └── 否 → 进入路径B │ └── 否 → 进入第3步
│ │
│ ├── 第3步:内容指纹匹配
│ │ pHash + DTW时序对齐
│ │ 时延:50ms
│ │
│ ├── 指纹匹配?
│ │ ├── 是 → 关联CC码 → 判定
│ │ └── 否 → 进入第4步
│ │
│ └── 第4步:AI语义匹配(兜底)
│ CLIP特征 + 向量检索
│ 时延:30秒/分钟视频
│
▼ ▼
决策层(合并A/B路径结果)
3.3.2 水印提取算法
class WatermarkExtractor:
"""
DCT频域水印提取器
嵌入位置:8x8 DCT块的中频系数
嵌入方式:QIM (Quantization Index Modulation)
冗余度:同一CC码在视频中重复嵌入,每30帧一个嵌入周期
"""
def __init__(self, secret_key: bytes):
self.key = secret_key # 监管方持有的水印密钥
self.block_size = 8
self.sample_interval = 30 # 每30帧采样
self.embed_positions = self._derive_positions() # 密钥派生嵌入位置
def extract(self, video_path: str) -> Optional[str]:
# 1. 解码为YUV帧序列
frames = self._decode_video(video_path)
# 2. 采样帧
sampled = frames[::self.sample_interval]
# 3. 逐帧提取水印比特
bit_accumulator = defaultdict(list)
for frame in sampled:
y_channel = frame[:, :, 0] # 亮度通道
# 分块DCT
for block in self._split_blocks(y_channel):
dct_block = cv2.dct(block.astype(np.float32))
# 从中频系数提取比特
for pos in self.embed_positions:
bit = self._extract_bit_qim(dct_block[pos[0], pos[1]])
bit_accumulator[pos].append(bit)
# 4. 多数投票解码
raw_bits = self._majority_vote(bit_accumulator)
# 5. ECC纠错解码
decoded = self._ecc_decode(raw_bits)
# 6. CRC校验
if not self._crc_check(decoded):
return None # 水印损坏或不存在
# 7. HMAC验证
cc_code = self._parse_cc_code(decoded)
if not self._hmac_verify(cc_code, self.key):
return None # 伪造水印
return cc_code
3.3.3 内容指纹匹配
class VideoFingerprintMatcher:
"""
视频内容指纹匹配器
指纹:关键帧pHash序列
匹配:汉明距离初筛 + DTW时序对齐
"""
def fingerprint(self, video_path: str) -> dict:
# 1. 降采样
frames = self._decode_downsample(video_path, size=(64, 64), gray=True)
# 2. 关键帧检测(场景切换点)
keyframe_indices = self._detect_keyframes(frames)
# 3. 计算关键帧pHash
keyframe_hashes = []
for idx in keyframe_indices:
phash = self._compute_phash(frames[idx])
keyframe_hashes.append(phash)
# 4. 计算视频级聚合哈希
avg_hash = self._compute_avg_hash(frames)
return {
'keyframe_hashes': keyframe_hashes,
'avg_hash': avg_hash,
'duration': self._get_duration(video_path),
'keyframe_count': len(keyframe_hashes)
}
def match(self, video_fp: dict, database) -> Optional[dict]:
# 1. avg_hash初筛(汉明距离<12)
candidates = database.search_by_avg_hash(
video_fp['avg_hash'],
hamming_threshold=12
)
if not candidates:
return None
# 2. 关键帧序列DTW对齐
best_match = None
best_score = 0
for candidate in candidates:
score = self._dtw_align(
video_fp['keyframe_hashes'],
candidate['keyframe_hashes']
)
if score > best_score:
best_score = score
best_match = candidate
# 3. 阈值判定
if best_score > 0.85:
return {
'cc_code': best_match['cc_code'],
'similarity': best_score,
'matched_title': best_match['title']
}
return None
3.4 决策与告警层
3.4.1 决策矩阵
| 检测路径 | 结果 | 判定 | 动作 | 时效 |
|---|---|---|---|---|
| 元数据 | CC码合法 | 正版传播 | 记录备案 | 秒级 |
| 元数据 | CC码不合法 | 伪造/篡改 | 告警+取证 | 秒级 |
| 水印 | CC码合法 | 正版传播 | 记录备案 | 秒级 |
| 水印 | CC码不合法 | 伪造CC码 | 告警+取证+行政通知 | 秒级 |
| 水印 | 无水印 | 疑似未登记 | 进入指纹匹配 | 秒级 |
| 指纹 | 匹配已登记CC码 | 疑似去水印传播 | 告警+取证+行政通知 | 毫秒级 |
| 指纹 | 未匹配 | 进入AI匹配 | - | 毫秒级 |
| AI语义 | 匹配 | 疑似深度篡改/混剪 | 告警+人工审核 | 分钟级 |
| AI语义 | 未匹配 | 未登记内容 | 进入备案审核流程 | 分钟级 |
3.4.2 告警分级
| 级别 | 判定 | 通知方式 | 响应时效 |
|---|---|---|---|
| P0-紧急 | 伪造CC码 + 大规模传播 | 电话+短信+API推送 | 立即 |
| P1-高危 | 去水印传播 + 已登记内容 | 短信+API推送 | 5分钟内 |
| P2-中危 | 未登记内容 + 疑似违规 | API推送+邮件 | 30分钟内 |
| P3-低危 | 未登记内容 + 无明显违规 | 邮件+日报 | 24小时内 |
3.4.3 证据固化
{
"alert_id": "ALT-20260720-001234",
"level": "P1",
"timestamp": "2026-07-20T20:15:00Z",
"source": {
"type": "web_crawler",
"platform": "example.com",
"url": "https://example.com/video/12345",
"crawler_node": "crawler-03"
},
"video_info": {
"title": "xxx",
"duration": 3600,
"resolution": "1920x1080",
"format": "mp4"
},
"detection_result": {
"metadata_cc_code": null,
"watermark_cc_code": null,
"fingerprint_match": {
"matched": true,
"cc_code": "MA.156.8531.6101/WD/20260000001",
"similarity": 0.92,
"matched_title": "原始登记标题"
},
"ai_match": "skipped"
},
"verdict": "SUSPECTED_WATERMARK_REMOVAL",
"evidence": {
"video_clip": "/evidence/ALT-20260720-001234/clip.mp4",
"screenshot": "/evidence/ALT-20260720-001234/screenshot.jpg",
"fingerprint_diff": "/evidence/ALT-20260720-001234/diff.json",
"detection_log": "/evidence/ALT-20260720-001234/log.txt"
},
"actions": [
{ "action": "notify_platform", "status": "sent", "timestamp": "..." },
{ "action": "notify_regulator", "status": "sent", "timestamp": "..." },
{ "action": "preserve_evidence", "status": "done", "timestamp": "..." }
]
}
四、两层协同机制
4.1 正常流程(第一层生效)
CP上传内容 → 关卡1验证CC码 → 通过 → 平台审核 → 关卡2播出校验 → CDN注入校验 → 用户播放
↓
终端抽检(关卡4)
↓
一切正常,无需第二层介入
4.2 绕过场景(第二层兜底)
场景A:平台未对接API
内容上传 → 平台未验证CC码 → 内容上线
↓
第二层爬虫发现 → 检测 → 告警 → 行政通知平台下架
场景B:持证平台绕过API
内容上传 → 平台跳过CC码验证 → 内容上线
↓
第二层爬虫发现 → 检测 → 告警 → 追责平台
场景C:UGC二次创作
用户剪辑正版内容 → 上传到短视频平台 → 内容上线
↓
第二层爬虫发现 → 指纹匹配 → 判定是否侵权
场景D:水印被去除
内容被去水印处理 → 上传 → 平台无法验证CC码
↓
第二层爬虫发现 → 指纹匹配 → 告警
4.3 下架指令协同
监管方下发下架指令
│
├── 第一层:秒级同步
│ ├── WebSocket推送 → 持证平台自动下架(秒级)
│ ├── CDN Purge API → CDN缓存清除(秒级)
│ ├── Redis状态更新 → 播出校验自动拦截(实时)
│ └── CDN黑名单推送 → 全局URL拦截(秒级)
│
└── 第二层:验证下架效果
├── 爬虫轮巡目标URL → 确认是否已下架
├── 已下架 → 记录确认
├── 未下架 → 升级告警(平台未执行指令)
└── 持续监控 → 防止重新上架
4.4 数据回流
第二层检测发现的内容
│
├── 已登记CC码但未在平台备案 → 回流到TCS-IPTV → 补登记
├── 未登记内容 → 进入备案审核流程 → 补发CC码
├── 伪造CC码 → 回流到TCS → 标记伪造 → 追查来源
└── 去水印传播 → 回流到TCS → 记录侵权证据 → 追责
五、技术架构
5.1 系统部署架构
┌─────────────────────────────────────────────────────────────┐
│ TCS-IPTV 核心(已有) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │
│ │ 标识服务 │ │ 验真服务 │ │ MA管理 │ │ 可信数据空间│ │
│ └──────────┘ └──────────┘ └──────────┘ └────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 监管API网关(第一层) │ │
│ │ /verify/upload /verify/playback /verify/cdn-inject │ │
│ │ /takedown/issue /blacklist/push ws:/events │ │
│ └──────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 独立监控系统(第二层,新增) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 爬虫集群 │ │ 录制引擎 │ │ 检测集群 │ │ │
│ │ │ (K8s) │ │ (K8s) │ │ (GPU K8s)│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 告警引擎 │ │ 证据存储 │ │ 下架验证 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 基础设施层 │ │
│ │ │ │
│ │ PostgreSQL │ Redis │ Kafka │ Elasticsearch │ │
│ │ Milvus(向量) │ MinIO(视频/证据) │ K8s集群 │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
5.2 第一层资源需求(增量)
| 组件 | 规格 | 数量 | 说明 |
|---|---|---|---|
| API网关 | 4核8GB | 3节点 | 高可用,负载均衡 |
| Redis | 8核32GB | 3节点 | CC码状态缓存,主从+哨兵 |
| WebSocket推送 | 2核4GB | 2节点 | 长连接管理 |
| 合计 | ~20核/40GB增量 |
第一层资源需求很小,因为验证逻辑轻量,主要依赖已有的TCS-IPTV核心系统。
5.3 第二层资源需求(分阶段)
| 阶段 | GPU | CPU | 内存 | 存储 | 带宽 | 月成本 |
|---|---|---|---|---|---|---|
| MVP | 0 | 64核 | 128GB | 20TB | 200Mbps | ¥2~3万 |
| 中等 | 10×T4 | 128核 | 256GB | 50TB | 500Mbps | ¥6~8万 |
| 全量 | 30×T4 | 256核 | 512GB | 150TB | 1Gbps | ¥12~15万 |
第二层通过智能调度(粗筛先行、夜间批量、弹性伸缩)可降低40%资源消耗。
六、分阶段实施计划
第一阶段:平台侧API预防(对已有TCS-IPTV扩展)
| 任务 | 周期 | 依赖 |
|---|---|---|
| 监管API网关开发 | 4周 | TCS-IPTV核心 |
| 上传验证接口 | 2周 | API网关 |
| 播出校验接口 | 2周 | API网关 |
| WebSocket实时推送 | 2周 | API网关 |
| 应急下架指令链路 | 3周 | WebSocket + CDN API |
| 平台对接(1~2家试点) | 4周 | 接口就绪 |
| 小计 | ~12周 |
第二阶段:独立监控MVP
| 任务 | 周期 | 依赖 |
|---|---|---|
| 爬虫采集管线 | 4周 | K8s + Kafka |
| 水印嵌入/提取原型 | 6周 | 水印算法选型 |
| 指纹匹配引擎 | 3周 | Milvus部署 |
| 检测流水线编排 | 2周 | 爬虫 + 水印 + 指纹 |
| 告警+证据固化 | 2周 | 检测流水线 |
| 小计 | ~12周 |
第三阶段:检测规模化
| 任务 | 周期 | 依赖 |
|---|---|---|
| GPU集群部署 | 2周 | MVP验证通过 |
| 直播旁路录制 | 3周 | FFmpeg + K8s |
| AI语义匹配 | 4周 | CLIP模型 + Milvus |
| 对抗加固测试 | 4周 | 全检测链路 |
| 下架验证回路 | 2周 | 第一层 + 第二层 |
| 小计 | ~12周 |
第四阶段:全量上线
| 任务 | 周期 | 依赖 |
|---|---|---|
| 全平台对接推广 | 8周 | 行政要求下发 |
| 弹性伸缩调优 | 2周 | 全量负载 |
| 监管大屏集成 | 3周 | 已有需求10 |
| 运营体系建设 | 4周 | 全系统 |
| 小计 | ~12周 |
总周期约12个月,第一层可在3个月内上线,第二层MVP在6个月内跑通。
七、与已有TCS-IPTV需求的对应关系
| 已有需求 | 本方案对应模块 | 增强点 |
|---|---|---|
| 需求3:CC码生成签发 | 第一层验证基础 | CC码作为验证主键 |
| 需求4:送审文件验真 | 第一层关卡1(上传拦截) | 从送审扩展到平台上传 |
| 需求7:CDN注入校验 | 第一层关卡3 | 已有,无需改动 |
| 需求8:终端播放抽检 | 第一层关卡4 | 已有,无需改动 |
| 需求11:违规应急下架 | 第一层下架指令链路 | 增加WebSocket实时推送+CDN黑名单 |
| 需求10:全生命周期监管 | 第二层独立监控 | 新增外部监控维度 |
| 需求9:统一维度数据上报 | 第二层数据回流 | 检测数据回流到TCS |
八、关键风险与应对
| 风险 | 影响 | 应对 |
|---|---|---|
| 持证平台不配合对接API | 第一层失效 | 行政强制要求 + 第二层兜底 |
| 水印被AI去除 | 第二层检测失效 | 多算法混合嵌入 + 指纹匹配兜底 + AI语义兜底 |
| 爬虫被反爬阻挡 | 第二层采集缺失 | 代理池 + 多策略 + 举报通道补充 |
| CDN厂商不配合黑名单 | 下架不彻底 | 行政处罚 + DNS封锁兜底 |
| 误判率过高 | 正常内容被拦截 | 人工审核兜底 + 阈值可调 + 申诉通道 |
| 资源成本超预算 | 系统无法全量运行 | 分阶段建设 + 智能调度降本 |