本文以具体的示例展示一个基于函数计算和Serverless工作流打造的弹性高可用的Serverless音视频处理系统,并与传统方案进行性能、成本和工程效率方面的对比,介绍本方案的优势及适用的场景。

音视频处理新需求

在视频点播解决方案中,视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在以下情况下,您会选择自己搭建转码服务:

  • 您已经在虚拟机或容器平台上基于FFmpeg部署了一套视频处理服务,想在此基础上让它更弹性,具有更高的可用性。
  • 您有并发处理大量视频的需求,希望同时并行处理多个文件。
  • 您有很多超大的视频需要批量快速处理完,例如每周五定期产生几百个4 GB以上的1080P大视频,但是希望当天几个小时后全部处理完。
  • 您有更高级的自定义处理需求,例如视频转码完成后,需要记录转码详情到数据库。或者在转码完成后,自动将热度很高的视频预热到CDN上,从而缓解源站压力。
  • 自定义视频处理流程中可能会有多种操作组合,例如转码、加水印和生成视频首页GIF。后续又需要为视频处理系统增加新需求时,例如调整转码参数等,希望新功能发布上线时对在线服务无影响。
  • 您的需求只是简单的转码需求,或是一些极其轻量的需求,例如获取OSS上视频前几帧的GIF、获取视频或者音频的时长,自己搭建成本更低。
  • 各种格式的音频转换或者各种采样率自定义、音频降噪等功能。
  • 您的视频源文件存放在NAS或者ECS云盘上,自建服务可以直接读取源文件处理,而不需要将它们再迁移到OSS上。

如果您的视频处理系统有上述需求,或者您期望实现一个弹性、高可用、低成本、免运维、灵活支持任意处理逻辑的视频处理系统,那么本文则是您期待的最佳实践方案。

典型解决方案

随着计算机技术和网络的发展,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐。当前云计算平台厂商的产品线不断成熟完善,如果想要搭建视频点播类应用,直接上云会扫清硬件采购、技术等各种障碍。以阿里云为例,典型的解决方案如下。 flow chart

在该解决方案中,对象存储OSS可以支持海量视频存储,采集上传的视频被转码以适配各种终端、CDN加速终端设备播放视频的速度。此外还有一些内容安全审查需求,例如鉴黄、鉴恐等。

Simple视频处理系统

假如您需要对视频进行简单的处理,方案架构图如下。 structure

当您上传一个视频到OSS时,OSS触发器自动触发函数执行,函数调用FFmpeg进行视频转码,并且将转码后的视频保存回OSS。关于Simple视频处理系统的Demo及部署步骤,请参见Simple视频处理系统。OSS触发器的具体信息,请参见OSS触发器概述

当您想要处理超大视频或者对小视频进行多种组合操作时,由于函数计算的执行环境的最大执行时间为10分钟。若超过执行时间的限制,函数会执行失败。如果最大的10分钟不能满足您的需求,您可以执行以下操作:
  • 对视频进行分片、转码、合成处理。更多信息,请参见fc-fnf-video-processing
  • 搜索钉钉群号11721331或扫描文末的二维码联系函数计算团队,或者提交工单,完成以下操作:
    • 适当放宽执行时长限制。
    • 使用性能实例, 执行环境可达8核16 GB, 执行时长可达2小时。更多信息,请参见实例规格及使用模式

视频处理工作流系统

为了突破函数计算执行环境的限制,或者加快大视频的转码速度,完成各种复杂的组合操作,您可以通过 Serverless工作流去编排函数实现一个功能强大的视频处理工作流系统。方案架构图如下。 flow chart
假如您上传一个MOV格式的视频到OSS,OSS触发器自动触发函数执行,函数调用 Serverless工作流,会同时进行一种或者多种格式的转码,转码的目标格式由您触发的函数环境变量 DST_FORMATS参数控制。因此您可以实现如下需求:
  • 一个视频文件可以同时被转码成各种格式以及做其他各种自定义处理,例如增加水印或者在处理后更新信息到数据库等。
  • 当有多个文件同时上传到OSS时,函数计算会自动伸缩,并行处理多个文件。同时并行将文件转码成多种格式。
  • 结合NAS和视频切片,可以解决超大视频,例如超过3 GB的视频的转码。对于每一个视频,先进行切片处理,然后并行转码切片,最后合成。通过设置合理的切片时间,可以提高较大视频的转码速度。
    说明 视频切片是指将视频流按指定的时间间隔,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息。

方案的部署步骤,请参见视频处理工作流

Serverless方案优势

工程效率卓越

内容项 Serverless(函数计算+Serverless工作流 自建服务
基础设施 需要您采购和管理。
开发效率 只需要专注业务逻辑的开发,配合Funcraft工具一键资源编排和部署。 除了必要的业务逻辑开发,需要您自己建立相同线上运行环境,包括相关软件的安装、服务配置、安全更新等一系列问题。
并行和分布式视频处理 通过Serverless工作流资源编排即可实现多个视频的并行处理以及单个大视频的分布式处理,稳定性和监控交由云平台。 需要很强的开发能力和完善的监控系统来保证稳定性。
学习上手成本 会编写对应的语言的函数代码和熟悉FFmpeg使用即可。 除了编程语言开发能力和熟悉FFmpeg以外,可能使用K8s或弹性伸缩ESS,需要了解更多的产品、名词和参数的意义。
项目上线周期 预计3人天(开发调试2人天+压测观察1人天)。 在具体业务逻辑外耗费大量的时间和人力成本,保守估计大约30人天,包括硬件采购、软件和环境配置、系统开发、测试、监控报警、灰度发布系统等。

弹性伸缩免运维

内容项 Serverless(函数计算+Serverless工作流 自建服务
弹性高可用 函数计算系统具有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维,转码性能优异。 需要自建负载均衡SLB,弹性伸缩、扩容缩容速度较函数计算慢。
监控报警查询 提供更细粒度的Serverless工作流流程执行以及函数执行情况,同时可以查询每次函数执行的Latency和日志等,更加完善的报警监控机制。 ECS或者容器级别的Metrics。

转码性能优异

性能加速百分比计算公式如下:

假设视频为89s的MOV格式的文件,云服务将MOV转为MP4的普通转码需要消耗的时间为188s,将这个参考时间记为T。

性能加速百分比=T÷函数计算转码耗时

视频切片时间(s) 函数计算转码耗时(s) 性能加速百分比(%)
45 160 117.5
25 100 188
15 70 268.6
10 45 417.8
5 35 537.1

成本低

  • 对于具有明显波峰波谷的视频处理场景,例如只有部分时间段有视频处理请求,其他时间很少甚至没有视频处理请求,您可以选择按需付费,只需为实际使用的计算资源付费。
  • 对于没有明显波峰波谷的视频处理场景,您可以使用预付费(包年包月),成本仍然具有竞争力。

关于计费详情,请参见计费概述

假如您有一个基于ECS搭建的视频转码服务,由于是CPU密集型计算,因此本文中将平均CPU使用率作为核心参考指标评估成本。以一个月为周期,10台C5 ECS的总计算力为例,总的计算量约为30%场景下,两个解决方案CPU资源利用率使用情况示意图如下。 result

由上图预估出如下计费模型:

  • 函数计算预付费(3 GB每月):246.27元,计算能力等价于ECS计算型C5。
  • ECS计算型C5(2 vCPU 4 GB)+云盘:包月219元。
  • 函数计算按量付费在整个计算量中的占比≤10%,费用约为3×864×10%=259.2元

    3G规格的函数满负载跑满一个月费用:0.00011108×3×30×24×3600=863.8元

ITEM 平均CPU使用率 计算费用 总计
函数计算组合付费 ≥80% 998(246.27×3+259.2) ≤998
按峰值预留ECS ≤30% 2190(10×219) ≥2190

在这个模型预估里面,您可以看出函数计算方案具有很强的成本竞争力,在实际场景中,基于ECS自建的视频转码服务CPU利用很难达到20%,理由如下:

  • 可能只有部分时间段有视频转码请求。
  • 为了用户体验,视频转码速度有一定的要求,可能一个视频转码就需要10台ECS并行处理来转码,因此只能预备很多ECS。

因此,在实际场景中,函数计算在视频处理上的成本竞争力远强于上述模型。即使和云厂商视频转码服务单价对比,本方案仍有很强的成本竞争力。

本文中选用点播视频中最常用的两个格式MP4和FLV之间进行相互转换,经实验验证,函数内存设置为3 GB,基于该方案从MP4转码为FLV的费用概览表如下。

表 1. MP4转FLV
分辨率 速率 帧率 函数计算转码耗费时间 函数计算转码费用 某云视频处理费用 成本下降百分比
标清640*480 889 KB/s 24 11.2s 0.003732288 0.032 88.3%
高清1280*720 1963 KB/s 24 20.5s 0.00683142 0.065 89.5%
超清1920*1080 3689 KB/s 24 40s 0.0133296 0.126 89.4%
4K 3840*2160 11185 KB/s 24 142s 0.04732008 0.556 91.5%
表 2. FLV转MP4
分辨率 速率 帧率 函数计算转码耗费时间 函数计算转码费用 某云视频处理费用 成本下降百分比
标清640*480 712 KB/s 24 34.5s 0.01149678 0.032 64.1%
高清1280*720 1806 KB/s 24 100.3s 0.033424 0.065 48.6%
超清1920*1080 3911 KB/s 24 226.4s 0.0754455 0.126 40.1%
4K 3840*2160 15109 KB/s 24 912s 0.30391488 0.556 45.3%

成本下降百分比=(某云视频处理费用-函数计算转码费用)÷某云视频处理费用

某云视频处理计费使用普通转码,转码时长不足一分钟,按照一分钟计算,这里计费采用的是2分钟,即使采用1.5分钟计算,成本下降百分比基本在10%以内浮动。

从上表可以看出,基于函数计算+Serverless工作流的方案在计算资源成本上对于计算复杂度较高的FLV格式转MP4格式还是计算复杂度较低的MP转FLV,都具有很强的成本竞争力。根据实际经验,往往成本下降比上表列出来的更加明显,理由如下:

  • 测试视频的码率较高,实际上很多场景绝大部分都是标清或者流畅视频的转码场景,码率也比测试视频低,这个时候计算量变小,函数计算执行时间短,费用会降低,但是通用的云转码服务计费是不变的。
  • 很多视频分辨率在通用的云转码服务是计费是有很大损失的,例如转码的视频是856*480或者1368*768,都会进入云转码服务的下一档计费单价,例如856*480进入1280*720高清转码计费档,1368*768进入1920*1080超清转码计费档,单价基本是跨越式上升,但是实际真正的计算量增加可能还不到30%,而函数计算则是真正能做到按计算量付费。

操作部署

前提条件

操作步骤

方案优点

方案天然继承函数计算和Serverless工作流这两个产品的优点

  • 无需采购和管理服务器等基础设施,只需专注视频处理业务逻辑的开发,大幅缩短项目交付时间和人力成本。
  • 提供日志查询、性能监控、报警等功能快速排查故障。
  • 以事件驱动的方式触发响应用户请求。
  • 免运维,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,性能优异。
  • 成本极具竞争力。

相比于通用的转码处理服务的优点

  • 超强自定义,对用户透明,基于FFmpeg或者其他音视频处理工具命令快速开发相应的音视频处理逻辑。
  • 原有基于FFmpeg自建的音视频处理服务可以一键迁移。
  • 弹性更强,可以保证有充足的计算资源为转码服务,例如每周五定期产生几百个4 G以上的1080P大视频,但是希望当天几个小时后全部处理完。
  • 各种格式的音频转换或者各种采样率自定义、音频降噪等功能,例如专业音频处理工具aacgain和mp3gain。
  • 可以和Serverless工作流完成更加复杂、自定义的任务编排。例如视频转码完成后,记录转码详情到数据库,同时自动将热度很高的视频预热到CDN上,从而缓解源站压力。
  • 更多的方式的事件驱动,例如可以选择OSS自动触发,也可以根据业务选择MNS消息触发。
  • 在大部分场景下具有很强的成本竞争力。

相比于其他自建服务额优点

  • 毫秒级弹性伸缩,弹性能力超强,支持大规模资源调用,可弹性支持几万核的计算力,例如1万节课半个小时完成转码。
  • 只需要专注业务逻辑代码即可,原生自带事件驱动模式,简化开发编程模型,同时可以达到消息,即音视频任务,处理的优先级,可大大提高开发运维效率。
  • 函数计算采用3AZ部署,安全性高,计算资源也是多AZ获取,能保证每个用户需要的算力峰值。
  • 开箱即用的监控系统,可以多维度监控函数的执行情况,根据监控快速定位问题,同时给您提供分析能力,例如视频的格式分布、Size分布等。
  • 在大部分场景下具有很强的成本竞争力,因为在函数计算是真正的按量付费,计费粒度在百毫秒,可以理解为CPU的利用率为100%。

常见问题

  • 如果已经在虚拟机或容器平台上基于FFmpeg部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性?

    如本文所示,在虚拟机或容器平台上基FFmpeg的服务可以轻松切换到函数计算,FFmpeg相关命令可以直接移值到函数计算,改造成本较低,同时天然继承了函数计算弹性高可用性特性。

  • 有并发处理大量视频的需求时,如何操作?

    部署方案,请参见视频处理工作流系统。当有多个文件同时上传到OSS时,函数计算会自动伸缩,并行处理多个文件。更多信息,请参见视频处理工作流系统压测

  • 有很多超大的视频需要批量快速处理完,例如每周五定期产生几百个4 G以上的1080P大视频,但是希望当天几个小时后全部处理完时,如何操作?

    可以通过控制分片的大小,使每个大视频都有足够多的计算资源参与转码计算,大大提高转码速度。部署方案,请参见视频处理工作流系统压测

  • 有更高级的自定义处理需求,例如视频转码完成后,需要记录转码详情到数据库,或者在转码完成后,自动将热度很高的视频预热到CDN上,从而缓解源站压力时,如何操作?

    部署方案,请参见视频处理工作流系统。处理中可以做一些自定义的操作,或者基于此流程再做一些额外处理等,例如再增加后续流程,或者最开始增加预处理等。

  • 自定义视频处理流程中可能会有多种操作组合,例如转码、加水印和生成视频首页GIF。如果希望后续为视频处理系统增加新需求,例如调整转码参数,并且希望新功能发布上线对在线服务无影响时,如何操作?

    部署方案,请参见视频处理工作流系统Serverless工作流只负责编排调用函数,因此只需要更新相应的处理函数即可,同时函数有版本和别名功能,更好地控制灰度上线。更多信息,请参见版本简介

  • 只有简单的转码需求,或是一些极其轻量的需求,例如获取OSS上视频前几帧的GIF、获取视频或者音频的时长,自己搭建成本更低时,如何操作?

    函数计算可以解决自定义问题,只需要在代码中快速执行几个FFmpeg的命令即可完成需求。典型示例工程,请参见fc-oss-ffmpeg

  • 视频源文件存放在NAS或者ECS云盘上,希望自建服务可以直接读取源文件处理,而不需要将它们再迁移到OSS上时,如何操作?

    函数计算可以挂载NAS,直接处理NAS中的文件。更多信息,请参见配置NAS