背景

作为公有云重要组成部分,媒体处理体系,为我们提供了广泛而强大的工具,极大地拓展了数字媒体处理的领域。通过将图片和视频处理移至云端,我们能够享受到更高效、灵活、可扩展的服务,能够方便、快捷、高效地服务个人用户、企业和开发者。

业界调研

公有云 缩写 产品名称 备注
阿里云 MPS 媒体处理
腾讯云 MPS 媒体处理
华为云 MPC 媒体处理
音视频处理 MCP 音视频处理
七牛云 智能多媒体服务
又拍云 云处理

其实,无论叫啥名字,它们的本质做的事情是一样的。其整体流程图如下:

怎么搭建

经过抽象,想要搭建一套媒体处理,包括以下模块,如下图所示:

说明:
1、上述图展示的是:包括了多少个功能模块,并非调用顺序,各个模块的调用顺序,得根据实际功能来定,会有专门的模块来分析。
2、暂时先忽略:图里的颜色,目前并未想清楚:应该用哪些颜色来表示具体含义。

功能

云处理的功能,用公式来表达:媒体s = fn (媒体s,参数),有以下特点:
1、媒体,只是狭义上的媒体,单纯地指:图片 + 视频 + 音频。
2、带上s,证明可以是:多个,也可以是0个,入参 + 出参均是如此。
3、fn:函数,特指:对入参媒体s做的动作。
4、出参:媒体s,可以是文本,例如:包括了meta的json文本、xml文本 或者:其他格式的载体。

举些例子:
例子1:视频截帧,入参是:一个视频,出参:一坨的图片,fn:截帧。
例子2:视频加logo水印:入参:1个视频 + 1张logo图片 + 一些文字,出参:一个视频,fn:拼接。
例子3:图片meta信息,入参:一张图片,出参:文本:json串,fn:计算。
例子4:文生图:入参:文本,出参:图片,fn:模型计算。
例如5:文生视频:入参:文本,出参:视频,fn:模型计算。

网关域

详见:网关域

状态域

对于运营 or 产品 or 技术等各方角色,都需要有一后台系统管理,能够查询到:用户在什么时间,用了什么样的设备,用了哪张图片 or
哪个视频,触发了什么动作,最终输出了什么样的结果?这个系统,应该包括以下功能:

功能 优先级 功能说明 备注
meta信息 T0 1、记录图片:宽、高、文件大小、色域等meta信息
2、记录视频的宽、高、文件大小、视频时长、音频时长等meta信息
刚需,业务侧经常使用,对获取meta信息的接口性能也有要求。建议:缓存到redis or mysql or local cache等地方
索引信息 T0 记录图片、视频的处理前后的索引信息。包括:输入媒体是哪些?经过了哪些处理?输出媒体有哪些?方便运营侧分析运营数据
优化计算 T1 详见:优化计算
碎片 T1 详见:碎片
cdn成本 T0 详见:cdn成本
播放体验 T0 详见:播放体验

优化计算

云处理,用公式来表达:媒体s = fn (媒体s,参数),它有一特点:
只要媒体s+参数+fn是固定的,无论何时、何地,再次发起计算,对于用户而言,它的结果都应该是一样的。假设不一样,则对于用户而言,属于bug。因此,可以利用这一点,缓存一段时间的计算结果
相关流程如下:

说明:
1、好处:一方面:能够加速处理速度,提升用户体验,另外一方面:能够节约cpu or gpu计算成本。
2、将结果缓存起来,可以选择:关系型数据库:mysql 或者:非关系型数据库:redis,根据实际情况来定。

碎片

所谓碎片,顾名思义:业务系统因某种原因,未能及时追踪到的文件。日积月累后,该部分成本相关可观。如下图所示:

碎片产生的原因,一般有以下几种:
1、业务操作不当,导致引用的内容被删除后,相对应的文件,没有正常删除。
2、小文件存储系统都有分片上传功能,当分片上传完成后,一般只有一个结果文件存在。因此,中间过程文件需要及时清理掉。
3、切片加速,所产生的中间结果文件。
4、加水印过程中,有可能会产生水印图片这样的中间文件。
5、桶中不完整的数据也称之为碎片,例如:采用了分片上传后,因各种各样异常情况,导致文件上传失败,而桶中不完全的碎片数据,也会产生成本。

如何检测是否有碎片文件产生?
1、业务侧通过记录:业务期许的媒体文件信息大小 跟小文件存储系统做一个对比,能够大致知道:是否有碎片的产生。
2、梳理业务的全过程。

如何处理?

若检测到有碎片产生,则跟小文件存储的人员,商讨技术优化方案,例如:桶拆分,并配置生命周期规则 or 立即删除碎片 or 延时删除碎片等等。

cdn成本

对于一个短视频社区而言,整体成本而言(不谈人力成本)中,cdn成本 >> 转码成本 >> 服务器成本 >> 小文件存储系统的成本。其中,
跟字节跳动、快手等相关技术人员的沟通上看,转码的cpu成本 = cdn成本 * 10%。其中,cdn成本优化策略:

策略 功能说明 备注
缓存策略优化 合理配置缓存规则,确保只有必要的内容被缓存,并设置适当的缓存时长。对于静态内容,可以使用较长的缓存时间,而对于动态内容,可以使用较短的缓存时间或者禁用缓存
编解码压缩算法 深入研究:264、265、266等压缩算法,提高视频、图片的压缩效率
内容分级 将网站内容分级,对于核心业务内容使用高性能的CDN节点,而对于次要内容使用成本更低的节点,更精细地控制成本
合理选择CDN 定期评估网站的流量和各家CDN套餐情况,根据实际需求调整配置

备注:
1、当然了,像播放量不高的短视频社区(其:转码成本 = cdn成本),此时,再去研究编解码压缩算法,就意义不太大了,甚至引入:公有云的265算法,意义也不大。

媒体分发

以下是某个社区的视频分发流程:

备注:
1、在图中未显示出来:多码率自适应流:提供多个不同比特率的视频流,以便根据用户的网络速度和设备性能自动选择最佳的视频质量,以保持流畅的播放。

编排域

详见:任务编排

画质管理

如何才能决策:一个算法 or 模型具备上线的资格呢?或者说:如何评价一个算法 or 模型计算后的图片、视频的效果呢?参考流程如下:

备注:
1、画质评测,业界标准分为:主观评测 + 客观评测,但是,据了解,客观评测目前更多的还是为:以节约人力为目标,为主观评测服务的,最终决定权:还在人身上。
2、多策略跑图、跑视频,最终让人去决策:某一个版本是否可以上线,其实:也挺费算力资源 + 人力资源。

多云元数据服务

详见:多云元数据服务

仿真中心

ToDo 待补充

视频切片加速

详见:视频切片加速

计算域

强烈建议:存算一体

算法、模型工程化

详见:算法、模型工程化

资源调度

详见:资源调度

算法编排

详见:任务编排

存储域

本文不探讨:如何落地小文件存储体系?这也是一个相当复杂的体系,仅探讨:基于媒体处理体系的背景下,如何使用业界的小文件存储系统?

业界调研

业界产品 所属云 说明 单价(目录价) 备注
OBS 华为云 0.099元/GB/月
OSS 阿里云 0.12元/GB/月
TOS 字节跳动 0.15元/GiB/月

备注:
1、以上价格都是从官网上收集的目录价,非:商务谈判的价格。
2、不少云:上传免费,存储:月均价格比较低(大客户,单价更低),但是:下载(播放):带宽很贵,触发cpu计算,贵。

上传方式

内网产生的流入和流出流量均免费,但是请求次数仍会计费。

大文件上传:分片上传,

下载方式

大文件下载:分片下载,

s3协议

转存

1、直接使用所属云的sdk,直接触发对象copy
2、先下载,后上传,类似:七牛云的fetch接口

生命周期

不建议:直接调用sdk,删除对象,而是:事先规划好“文件夹”,通过各大小文件存储提供的,当前文件夹的生命周期规则。

存储类型