news 2026/9/2 0:37:05

视频平台架构决策:从存储到转码的选型逻辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
视频平台架构决策:从存储到转码的选型逻辑

架构决策没有最优解,只有适合当前阶段的方案。

一、对象存储:MinIO vs 公有云 OSS

对比项MinIO(自建)公有云 OSS
成本服务器硬盘按流量付费
上传速度局域网 1Gbps家庭上行 10Mbps
访问延迟<1ms(内网)50-200ms(公网)
维护成本自己搭、自己管零维护

决策:选 MinIO

原因:家庭集群所有设备在局域网内。上传 64MB 视频到 MinIO 只需 0.5 秒,到公有云 OSS 要 30 秒(10Mbps 上行限制)。

代价是外网访问要走内网穿透,延迟较高。但对于以局域网用户为主的演示场景,这个代价可以接受。

二、数据库:PostgreSQL vs MySQL

对比项PostgreSQLMySQL
数据类型丰富(JSONB、数组)基础类型
扩展生态pgvector、PostGIS有限
约束支持完整(外键/检查/排他)InnoDB 支持外键
并发模型MVCC 快照隔离MVCC RR 级别

决策:选 PostgreSQL

关键原因是用了pgvector做向量搜索,这是 PG 独有的扩展:

sql

CREATE EXTENSION vector; CREATE TABLE video_embeddings ( video_id INTEGER, embedding vector(768) ); -- 向量相似度检索 SELECT * FROM video_embeddings ORDER BY embedding <-> '[0.1, 0.2, ...]' LIMIT 5;

三、转码策略:多清晰度 vs 单清晰度

传统做法转三档:480p、720p、1080p,自适应切换。

决策:单档 720p,CRF37+ultrafast

原因:源文件码率已经极低(85-596kbps),是高度压缩的产物。转三档相当于“用不同分辨率展示同样的模糊”,体积翻三倍但画质没有实际提升。

方案体积存储画质
三档标准码率3x3x无明显提升
单档 CRF371x1x与源一致

核心原则:源文件糊了,转码只是把糊的放大。用 CRF 匹配源码率,而不是用固定码率强行转档。

四、流协议:HLS vs DASH

对比项HLSDASH
容器MPEG-TSfMP4
原生支持SafariChrome/Firefox
播放库hls.jsdash.js
切片格式.ts.m4s

决策:选 HLS

hls.js 兼容性好,所有浏览器都能播。dash.js 对非标准 fMP4 解析有问题,而 m3u8+ts 是更成熟稳定的方案。

五、播放方式:Range 代理 vs 完整下载

方案带宽消耗实现复杂度
完整下载每次全量
Range 流式按需传输
本地缓存 + Range首次后为 0中高

决策:Range 代理 + 本地缓存

首次播放通过 Range 请求从存储流式转发,同时落盘缓存;再次播放直接从本地缓存读取,带宽消耗为 0。

六、编码参数:CRF vs CBR

对比项CBR(恒定码率)CRF(恒定质量)
码率固定自适应
体积可控不可控
画质复杂场景不足均匀
适用场景直播推流VOD 点播

决策:CRF37

源文件本身码率极低,CBR 用标准码率转码只会膨胀体积。CRF37 自适应匹配源码率,输出体积与源基本一致。

七、上传事务性

问题:MinIO 有视频文件,数据库记录不全——上传文件后没有正确写入 DB。

解决方案:

python

# 上传后发消息异步写 DB minio_client.put_object(bucket, key, file) message_queue.publish("video.uploaded", {"key": key}) # 消费者保证写入 def on_video_uploaded(msg): try: db.execute("INSERT INTO videos (key, ...) VALUES (...)") except Exception: # 补偿:清理残留 minio_client.remove_object(bucket, msg["key"]) raise

用补偿事务或消息队列确保存储和数据库最终一致。

八、总结

决策点选择理由
对象存储MinIO内网传输快、零成本
数据库PostgreSQL需要 pgvector 向量扩展
转码档位单档 720p源已压糊,多档无意义
流协议HLShls.js 兼容性好
播放方式Range + 缓存省带宽、体验好
编码参数CRF37匹配源码率,不浪费空间

核心原则:架构选型没有标准答案,只有适合当前阶段的方案。家庭集群 + 有限上行带宽,本地存储 + 单档转码是合理的折中。等带宽和用户量上来了,再切换到更标准的方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 0:36:35

答辩季AI工具怎么选?我实测了一圈,给你一份实在清单

又到了一年两度的答辩季。 最近后台被问爆了&#xff1a;“论文写完了&#xff0c;PPT怎么做啊&#xff1f;”“有没有AI能直接把论文转成答辩PPT&#xff1f;”“导师会问什么完全没底怎么办&#xff1f;” 说实话&#xff0c;2026年了&#xff0c;AI工具早就不缺&#xff0c;…

作者头像 李华
网站建设 2026/9/2 0:34:46

【单片机课程设计/毕业设计】基于 STM32 或 51 单片机的蓝牙移动端饲喂管控系统设计 基于单片机的时钟驱动智能喂食加水设备设计与实现(023905)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/9/2 0:21:45

地府管理系统.zip:压缩包安全与业务建模的实战解析

简介&#xff1a;这是一套完整的以中国传统文化中地府概念为背景的模拟管理系统源码&#xff0c;面向前端、全栈开发者及管理类系统学习者&#xff0c;可帮助理解多层级业务系统的设计与实现。资源共131个文件&#xff0c;其中36个vue页面负责界面展示&#xff0c;32个js文件承…

作者头像 李华
网站建设 2026/9/2 0:07:02

GBase 8c 日常运维例行维护实践——来自一位DBA的每日工作清单

作为一个 DBA&#xff0c;我每天到公司的第一件事&#xff0c;不是先泡咖啡&#xff0c;而是打开终端&#xff0c;按部就班地完成一套巡检动作。这套流程我已经坚持了很久&#xff0c;它帮我在故障发生前拦截过多次潜在风险。一、每日巡检的整体思路日常运维不是等出了问题再去…

作者头像 李华