随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类应用,告别刀耕火种, 直接上云会扫清硬件采购、 技术等各种障碍,以阿里云为例:
这是一个非常典型的解决方案, 对象存储 OSS 可以支持海量视频存储,采集上传的视频被转码以适配各种终端,CDN 加速终端设备播放视频的速度。此外还有一些 内容安全 审查需求, 比如鉴黄、鉴恐等。
而在视频点播解决方案中,视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在很多情况下,您会选择自己搭建转码服务。比如:
如果您的视频处理系统有上述需求,或者您期望实现一个 弹性 、 高可用 、 低成本 、 免运维 、 灵活支持任意处理逻辑 的视频处理系统,那么本文则是您期待的最佳实践方案。
在介绍具体方案之前, 先介绍两款产品:
免费开通函数计算 ,按量付费,函数计算有很大的免费额度。
免费开通函数工作流 ,按量付费,函数工作流有很大的免费额度。
函数计算可靠的执行任意逻辑, 逻辑可以是利用 FFmpeg 对视频任何处理操作, 也可以更新视频 meta 数据到数据库等。
函数工作流对相应的函数进行编排, 比如第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。
至此,您应该初步理解了函数计算的自定义处理能力 + 函数工作流编排能力几乎满足您任何自定义处理的需求,接下来,本文以一个具体的示例展示基于函数计算和函数工作流打造的一个弹性高可用的 Serverless 视频处理系统,并与传统方案进行性能、成本和工程效率的对比。
假设您是对短视频进行简单的处理, 架构方案图如下:
如上图所示, 用户上传一个视频到 OSS, OSS 触发器自动触发函数执行, 函数调用 FFmpeg 进行视频转码, 并且将转码后的视频保存回 OSS。
OSS 事件触发器 , 阿里云对象存储和函数计算无缝集成。您可以为各种类型的事件设置处理函数,当 OSS 系统捕获到指定类型的事件后,会自动调用函数处理。例如,您可以设置函数来处理 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会自动触发来处理该视频。
简单视频处理系统示例工程地址
您可以直接基于示例工程部署您的简单音视频处理系统服务, 但是当您想要处理大视频(比如 test_huge.mov ) 或者对小视频进行多种组合操作的时候, 您会发现函数很大概率会执行失败,原因是函数计算的执行环境存在一些限制, 比如最大执行时间为 10 分钟, 最大内存为 3G。
为了突破函数计算执行环境的限制,引入函数工作流 FnF 去编排函数实现一个功能强大的全功能视频处理系统。
如上图所示, 假设用户上传一个 mov 格式的视频到 OSS,OSS 触发器自动触发函数执行, 函数调用 FnF,并行进行提取音频文件,同时进行 avi,mp4,flv 格式的转码。 所以您可以实现如下需求:
对于每一个视频,先进行切片处理,然后并行转码切片,最后合成,通过设置合理的切片时间,可以大大加速较大视频的转码速度。
所谓的视频切片,是将视频流按指定的时间间隔,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息
结合 NAS + 视频切片, 可以解决超大视频(大于 3G )的转码。
全功能视频处理系统示例工程地址
示例效果:
自建服务 | 函数计算 + 函数工作流 Serverless | |
---|---|---|
基础设施 | 需要用户采购和管理 | 无 |
开发效率 | 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 | 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署 |
并行&分布式视频处理 | 需要很强的开发能力和完善的监控系统来保证稳定性 | 通过 FnF 资源编排即可实现多个视频的并行处理以及单个大视频的分布式处理,稳定性和监控交由云平台 |
学习上手成本 | 除了编程语言开发能力和熟悉 FFmpeg 以外,可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 | 会编写对应的语言的函数代码和熟悉 FFmpeg 使用即可 |
项目上线周期 | 在具体业务逻辑外耗费大量的时间和人力成本,保守估计大约 30 人天,包括硬件采购、软件和环境配置、系统开发、测试、监控报警、灰度发布系统等 | 预计 3 人天, 开发调试(2人天)+ 压测观察(1 人天) |
自建服务 | 函数计算 + 函数工作流 Serverless | |
---|---|---|
弹性高可用 | 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 | FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维, 全功能视频处理系统 (FnF + FC) 压测 ;性能优异, 详情见下面的转码性能表 |
监控报警查询 | ECS 或者容器级别的 metrics | 提供更细粒度的 FnF 流程执行以及函数执行情况, 同时可以查询每次函数执行的 latency 和日志等, 更加完善的报警监控机制 |
实验视频为是 89s 的 mov 文件 4K 视频: 4K.mov ,云服务进行 mov -> mp4 普通转码需要消耗的时间为 188s, 将这个参考时间记为 T
视频切片时间 | FC转码耗时 | 性能加速百分比 |
---|---|---|
45s | 160s | 117.5% |
25s | 100s | 188% |
15s | 70s | 268.6% |
10s | 45s | 417.8% |
5s | 35s | 537.1% |
性能加速百分比 = T / FC转码耗时
从上表可以看出,设置的视频切片时间越短, 视频转码时间越短, 函数计算可以自动瞬时调度出更多的计算资源来一起完成这个视频的转码, 转码性能优异。
没有明显波峰波谷的视频处理场景,可以使用预付费(包年包月),成本仍然极具竞争力。
函数计算成本优化最佳实践文档 。
假设有一个基于 ECS 搭建的视频转码服务,由于是 CPU 密集型计算, 因此在这里将平均 CPU 利用率作为核心参考指标对评估成本,以一个月为周期,10 台 C5 ECS 的总计算力为例, 总的计算量约为 30% 场景下, 两个解决方案 CPU 资源利用率使用情况示意图大致如下:
由上图预估出如下计费模型:
ITEM | 平均CPU利用率 | 计算费用 | 总计 |
---|---|---|---|
函数计算组合付费 | >=80% | 998(246.27×3+259.2) | <= 998 |
按峰值预留ECS | <=30% | 2190(10*219) | >=2190 |
在这个模型预估里面,可以看出 FC 方案具有很强的成本竞争力,在实际场景中, 基于 ECS 自建的视频转码服务 CPU 利用甚至很难达到 20%, 理由如下:
因此,在实际场景中, FC 在视频处理上的成本竞争力远强于上述模型。
即使和云厂商视频转码服务单价 PK, 该方案仍有很强的成本竞争力
经实验验证, 函数内存设置为3G,基于该方案从 mov 转码为 mp4 的费用概览表:
实验视频为是 89s 的 mov 文件视频, 测试视频地址:
480P.mov 720P.mov 1080P.mov 4K.mov
测试命令: ffmpeg -i test.mov -preset superfast test.mp4
分辨率 | bitrate | 帧率 | FC 转码耗费时间 | FC 转码费用 | 腾讯云视频处理费用 | 成本下降百分比 |
---|---|---|---|---|---|---|
标清 640*480 | 618 kb/s | 24 | 11s | 0.00366564 | 0.032 | 88.5% |
高清 1280*720 | 1120 kb/s | 24 | 31s | 0.01033044 | 0.065 | 84.1% |
超清 1920*1080 | 1942 kb/s | 24 | 66s | 0.02199384 | 0.126 | 82.5% |
4K 3840*2160 | 5250 kb/s | 24 | 260s | 0.0866424 | 0.556 | 84.4% |
成本下降百分比 = (腾讯云视频处理费用 - FC 转码费用)/ 腾讯云视频处理费用
腾讯云视频处理 ,计费使用普通转码,转码时长不足一分钟,按照一分钟计算,这里计费采用的是 2 min,即使采用 1.5 min 计算, 成本下降百分比也在 80% 左右
免费开通函数计算 ,按量付费,函数计算有很大的免费额度。
免费开通函数工作流 ,按量付费,函数工作流有很大的免费额度。
免费开通文件存储服务NAS , 按量付费
详情见各自示例工程的 README
最后一一回答一下之前列出的问题:
A: 如工程示例所示,在虚拟机/容器平台上基于 FFmpeg 的服务可以轻松切换到函数计算, FFmpeg 相关命令可以直接移值到函数计算,改造成本较低, 同时天然继承了函数计算弹性高可用性特性。
A: 函数计算天生就是解决这些自定义问题, 你的代码你做主, 代码中快速执行几个 FFmpeg 的命令即可完成需求。
典型示例: fc-oss-ffmpeg
A: 详情见全功能视频处理系统(函数计算 + 函数工作流方案),after-process 中可以做一些自定义的操作, 您还可以基于此流程再做一些额外处理等, 比如:
A: 详情见全功能视频处理系统(函数计算 + 函数工作流方案), 当有多个文件同时上传到 OSS, 函数计算会自动伸缩, 并行处理多个文件。详情可以参考 全功能视频处理系统 (FnF + FC) 压测
A: 详情见全功能视频处理系统(函数计算 + 函数工作流方案), FnF 只负责编排调用函数, 因此只需要更新相应的处理函数即可,同时函数有 version 和 alias 功能, 更好地控制灰度上线, 函数计算版本管理
A: 函数计算可以挂载 NAS , 直接对 NAS 中的文件进行处理
“ 阿里巴巴云原生 关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”