OpenVideoNet 是一个面向多内容平台协作场景的去中心化视频平台原型。我立项时关注的是传统视频产品中“内容管理、文件分发和流量推荐”高度耦合、难以独立演进的问题,因此将系统拆分为内容平台、视频存储、推荐平台、视频索引、流媒体服务和 Web 客户端六类角色,并允许内容平台与推荐平台独立部署、通过公开接口协作。
产品覆盖创作者与观看者的完整路径:用户可通过公钥完成注册和挑战—签名登录;创作者在客户端选择视频后,前端计算文件 SHA-256 摘要并使用本地私钥签名,存储服务负责将文件分片、保存分片哈希并生成 Manifest,内容平台校验作者证明后写入视频元数据、标签和审核状态,并同步到跨平台索引。观看者可以浏览、搜索、播放视频,进行评论、点赞、收藏、关注和举报;运营侧具备内容/评论审核、举报处理及用户禁用能力。
播放路径为“客户端请求视频信息 → 内容平台提供播放入口 → 流媒体服务按视频归属路由 → P2P 网关优先拉取分片、失败回源 → 顺序拼接并返回媒体流”。观看、点赞、收藏和关注等行为会回流到推荐平台,推荐平台再通过多源候选、去重过滤与多维评分生成个性化列表,形成内容消费闭环。
整体采用 Go + Gin 构建 HTTP 服务,前端采用原生 HTML、CSS、JavaScript,通过统一 API 层组合多个后端能力;用户、评论等需要关系查询的数据使用 SQLite,视频分片和 Manifest 采用本地文件存储。内容平台处理 Ed25519 公钥身份、JWT 会话、视频元数据、评论和审核;存储服务处理切片、哈希和 Manifest;视频索引服务支持跨平台汇聚与检索;推荐服务以可组合管线实现多源召回(网络关系、标签、图邻居、全量索引)、已看/时效/去重过滤,以及行为、热度、标签相似度、图距离、新鲜度等评分;流媒体服务实现跨平台路由、受限并发分片拉取、缓存、重试与 P2P 优先/中心存储回源兜底。
我独立完成从协议到前后端联调的核心实现,重点负责可信上传链路、内容与推荐服务拆分、分片播放及推荐管线设计。项目已拆分为 6 类可独立运行的模块,代码中包含 18 个 Go 自动化测试用例,覆盖文件切片、本地存储、Manifest、上传服务、视频仓库和端到端上传等关键路径。主要技术难点是既要让内容可以跨服务流转,又要避免仅凭服务端信任作者身份:方案是在客户端生成密钥对,私钥不离开浏览器;上传时对视频摘要和时间戳签名,服务端校验签名,存储层再以分片哈希和 Manifest 固化内容完整性。另一个难点是分片播放的可用性,因此采用分片顺序重排、并发上限、内存缓存、可配置超时与重试机制,并在 P2P 节点不可用时自动回源。