共计 6052 个字符,预计需要花费 16 分钟才能阅读完成。
作者 | 西流 阿里云技术专家
前言
随着计算机技术和 Internet 的突飞猛进,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青眼,而在以后,云计算平台厂商的产品线一直成熟欠缺,如果想要搭建视频点播类利用,辞别刀耕火种,间接上云会扫清硬件洽购、技术等各种阻碍,以阿里云为例:
这是一个十分典型的解决方案,对象存储 OSS 能够反对海量视频存储,采集上传的视频被转码以适配各种终端,CDN 减速终端设备播放视频的速度。此外还有一些内容平安审查需要,比方鉴黄、鉴恐等。
而在视频点播解决方案中,视频转码是最耗费计算力的一个子系统,尽管您能够应用云上专门的转码服务,但在很多状况下,您会抉择本人搭建转码服务。比方:
- 您曾经在虚拟机 / 容器平台上基于 FFmpeg 部署了一套视频解决服务,是否在此基础上让它更弹性,更高的可用性?
- 您有并发解决大量视频的需要;
- 您有很多超大的视频须要批量疾速解决完,比方每周五定期产生几百个 4G 以上的 1080P 大视频,然而心愿当天几个小时后全副解决完;
- 您有更高级的自定义解决需要,比方视频转码实现后,须要记录转码详情到数据库,或者在转码实现后,主动将热度很高的视频预热到 CDN 上,从而缓解源站压力;
- 自定义视频解决流程中可能会有多种操作组合,比方转码、加水印和生成视频首页 GIF。后续为视频解决零碎减少新需要,比方调整转码参数,心愿新性能公布上线对在线服务无影响;
- 您的需要只是简略的转码需要,或是一些极其轻量的需要,比方获取 OSS 上视频前几帧的 GIF、获取视频或者音频的时长,本人搭建老本更低;
- 各种格局的音频转换或者各种采样率自定义、音频降噪等性能;
- 您的视频源文件寄存在 NAS 或者 ECS 云盘上,自建服务能够间接读取源文件解决,而不须要将它们再迁徙到 OSS 上。
如果您的视频解决零碎有上述需要,或者您冀望实现一个 弹性、高可用、低成本、免运维、灵便反对任意解决逻辑 的视频解决零碎,那么本文则是您期待的最佳实际计划。
Serverless 自定义音视频解决
在介绍具体计划之前,先介绍两款产品:
- 函数计算:阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需治理服务器等基础设施,只需编写代码并上传。函数计算会为您筹备好计算资源,以弹性、牢靠的形式运行您的代码,并提供日志查问、性能监控、报警等性能。
- 函数工作流:函数工作流(Function Flow,以下简称 FnF)是一个用来协调多个分布式工作执行的全托管云服务。您能够用程序,分支,并行等形式来编排分布式工作,FnF 会依照设定好的步骤牢靠地协调工作执行,跟踪每个工作的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。
收费开明函数计算,按量付费,函数计算有很大的收费额度。
收费开明函数工作流,按量付费,函数工作流有很大的收费额度。
函数计算牢靠的执行任意逻辑,逻辑能够是利用 FFmpeg 对视频任何解决操作,也能够更新视频 meta 数据到数据库等。
函数工作流对相应的函数进行编排,比方第一步的函数是转码,第二步的函数是转码胜利后,将相应 meta 数据库写入数据库等。
至此,您应该初步了解了函数计算的自定义解决能力 + 函数工作流编排能力简直满足您任何自定义解决的需要,接下来,本文以一个具体的示例展现基于函数计算和函数工作流打造的一个弹性高可用的 Serverless 视频解决零碎,并与传统计划进行性能、老本和工程效率的比照。
1. Simple 视频解决零碎
假如您是对视频进行单纯的解决,架构计划图如下:
如上图所示,用户上传一个视频到 OSS,OSS 触发器主动触发函数执行,函数调用 FFmpeg 进行视频转码,并且将转码后的视频保留回 OSS。
OSS 事件触发器,阿里云对象存储和函数计算无缝集成。您能够为各种类型的事件设置处理函数,当 OSS 零碎捕捉到指定类型的事件后,会主动调用函数解决。例如,您能够设置函数来解决 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会主动触发来解决该视频。
Simple 视频解决零碎示例工程地址
弱小的监控零碎:
您能够间接基于示例工程部署您的 Simple 音视频解决零碎服务,然而当您想要解决大视频(比方 test_huge.mov)或者对小视频进行多种组合操作的时候,您会发现函数会执行失败,起因是函数计算的执行环境有最大执行工夫为 10 分钟的限度,如果最大的 10 分钟不能满足您的需要,您能够抉择:
- 对视频进行分片 -> 转码 -> 合成解决,详情参考:fc-fnf-video-processing,下文会具体介绍;
- 分割函数计算团队(钉钉群号: 11721331)或者提工单:
- 适当放宽执行时长限度
- 申请应用更高的函数内存 12G(8vCPU)
为了冲破函数计算执行环境的限度(或者说放慢大视频的转码速度),进行各种简单的组合操作,此时引入函数工作流 FnF 去编排函数实现一个功能强大的视频解决工作流零碎是一个很好的计划。
2. 视频解决工作流零碎
如上图所示,假如用户上传一个 mov 格局的视频到 OSS,OSS 触发器主动触发函数执行,函数调用 FnF,会同时进行 1 种或者多种格局的转码(由您触发的函数环境变量 DST_FORMATS 参数管制)。所以您能够实现如下需要:
- 一个视频文件能够同时被转码成各种格局以及其余各种自定义解决,比方减少水印解决或者在 after-process 更新信息到数据库等。
- 当有多个文件同时上传到 OSS,函数计算会主动伸缩,并行处理多个文件,同时每次文件转码成多种格局也是并行。
- 联合 NAS + 视频切片,能够解决超大视频(大于 3G)的转码,对于每一个视频,先进行切片解决,而后并行转码切片,最初合成,通过设置正当的切片工夫,能够大大减速较大视频的转码速度。
所谓的视频切片,是将视频流按指定的工夫距离,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息。
视频解决工作流零碎示例工程地址
示例成果:
3. 函数计算 + 函数工作流 Serverless 计划 VS 传统计划
1)卓越的工程效率
2)弹性伸缩免运维,性能优异
函数计算 + 函数工作流 Serverless 计划转码性能表:
试验视频为是 89s 的 mov 文件 4K 视频:4K.mov,云服务进行 mov -> mp4 一般转码须要耗费的工夫为 188s,将这个参考工夫记为 T。
性能减速百分比 = T / FC 转码耗时
从上表能够看出,设置的视频切片工夫越短,视频转码工夫越短,函数计算能够主动刹时调度出更多的计算资源来一起实现这个视频的转码, 转码性能优异。
3)更低的老本
- 具备显著波峰波谷的视频解决场景(比方只有局部时间段有视频解决申请,其余工夫很少甚至没有视频解决申请),抉择按需付费,只需为理论应用的计算资源付费。
- 没有显著波峰波谷的视频解决场景,能够应用预付费(包年包月),老本依然极具竞争力。
函数计算成本优化最佳实际文档
假如有一个基于 ECS 搭建的视频转码服务,因为是 CPU 密集型计算,因而在这里将均匀 CPU 利用率作为外围参考指标对评估老本,以一个月为周期,10 台 C5 ECS 的总计算力为例,总的计算量约为 30% 场景下, 两个解决方案 CPU 资源利用率应用状况示意图大抵如下:
由上图预估出如下计费模型:
- 函数计算预付费 3CU 一个月:246.27 元,计算能力等价于 ECS 计算型 C5;
- ECS 计算型 C5 (2vCPU,4GB)+ 云盘:包月 219 元;
- 函数计算按量付费占整个计算量的占比 <= 10%,费用约为 3×864×10% = 259.2 元,(3G 规格的函数满负载跑满一个月费用为:0.00011108×3×30×24×3600 = 863.8,详情查看计费)
在这个模型预估外面,能够看出 FC 计划具备很强的老本竞争力,在理论场景中, 基于 ECS 自建的视频转码服务 CPU 利用甚至很难达到 20%,理由如下:
- 可能只有局部时间段有视频转码申请;
- 为了用户体验,视频转码速度有肯定的要求,可能一个视频转码就须要 10 台 ECS 并行处理来转码,因而只能准备很多 ECS。
因而,在理论场景中,FC 在视频解决上的老本竞争力远强于上述模型。
- 即便和云厂商视频转码服务单价 PK, 该计划仍有很强的老本竞争力。
咱们这边选用点播视频中最罕用的两个格局(mp4、flv)之间进行互相转换,经试验验证,函数内存设置为 3G,基于该计划从 mp4 转码为 flv 的费用概览表:
试验视频为是 89s 的 mp4 和 flv 格局的文件视频,测试视频地址:
480P.mp4、720P.mp4、1080P.mp4、4K.mp4
480P.flv、720P.flv、1080P.flv、4K.flv
测试命令:
ffmpeg -i test.flv test.mp4
和ffmpeg -i test.flv test.mp4
mp4 转 flv:
flv 转 mp4:
老本降落百分比 =(腾讯云视频解决费用 – FC 转码费用)/ 腾讯云视频解决费用
腾讯云视频解决,计费应用一般转码,转码时长有余一分钟,依照一分钟计算,这里计费采纳的是 2 min,即便采纳 1.5 min 计算,老本降落百分比根本在 10% 以内浮动。
从上表能够看出,基于函数计算 + 函数工作流的计划在计算资源老本上对于计算复杂度较高的 flv 转 mp4
还是计算复杂度较低的 mp4 转 flv
,都具备很强的老本竞争力。依据理论教训,往往老本降落比上表列出来的更加显著,理由如下:
- 测试视频的码率较高,实际上很多场景绝大部分都是标清或者晦涩视频的转码场景,码率也比测试视频低,这个时候计算质变小,FC 执行工夫短,费用会升高,然而通用的云转码服务计费是不变的;
- 很多视频分辨率在通用的云转码服务是很吃亏的,比方转码的视频是
856*480
或者1368*768
,都会进入云转码服务的下一档计费单价,比方856*480
进入1280*720
高清转码计费档,1368*768
进入1920*1080
超清转码计费档,单价根本是跨越式回升,然而理论真正的计算量减少可能还不到 30%,而函数计算则是真正能做到按计算量付费; - 比方一些转码需要就是单纯转封装(不波及音视频的编解码),或者只转音频,这个计算量根本降落 95% 以上。
操作部署
收费开明函数计算,按量付费,函数计算有很大的收费额度。
收费开明函数工作流,按量付费,函数工作流有很大的收费额度。
收费开明文件存储服务 NAS,按量付费。
详情见各自示例工程的 README:
- Simple 视频解决零碎示例工程地址
- 视频解决工作流零碎示例工程地址
总结
基于函数计算 FC 和函数工作流 FnF 的弹性高可用视频解决零碎人造继承了这两个产品的长处:
- 无需洽购和治理服务器等基础设施,只需专一视频解决业务逻辑的开发,大幅缩短我的项目交付工夫和人力老本;
- 提供日志查问、性能监控、报警等性能疾速排查故障;
- 以事件驱动的形式触发响应用户申请;
- 免运维,毫秒级别弹性伸缩,疾速实现底层扩容以应答峰值压力,性能优异;
- 老本极具竞争力。
1. 相比于通用的转码解决服务:
- 超强自定义,对用户通明,基于 FFmpeg 或者其余音视频解决工具命令疾速开发相应的音视频解决逻辑;
- 原有基于 FFmpeg 自建的音视频解决服务能够一键迁徙;
- 弹性更强,能够保障有短缺的计算资源为转码服务,比方每周五定期产生几百个 4G 以上的 1080P 大视频,然而心愿当天几个小时后全副解决完;
- 各种格局的音频转换或者各种采样率自定义、音频降噪等性能,比方业余音频解决工具 aacgain 和 mp3gain;
- 能够和 serverless 工作流实现更加简单、自定义的工作编排,比方视频转码实现后,记录转码详情到数据库,同时主动将热度很高的视频预热到 CDN 上,从而缓解源站压力;
- 更多的形式的事件驱动,比方能够抉择 OSS 主动触发(丰盛的触发规定),也能够依据业务抉择 MNS 音讯(反对 tag 过滤)触发;
- 在大部分场景下具备很强的老本竞争力。
2. 相比于其余自建服务:
- 毫秒级弹性伸缩,弹性能力超强,反对大规模资源调用,可弹性反对几万核. 小时的计算力,比方 1 万节课半个小时实现转码;
- 只须要专一业务逻辑代码即可,原生自带事件驱动模式,简化开发编程模型,同时能够达到音讯 (即音视频工作) 解决的优先级,可大大提高开发运维效率;
- 函数计算采纳 3AZ 部署,安全性高,计算资源也是多 AZ 获取,能保障每个用户须要的算力峰值;
- 开箱即用的监控零碎,如下面 gif 动图所示,能够多维度监控函数的执行状况,依据监控疾速定位问题,同时给用户提供剖析能力,比方视频的格局散布,size 散布等;
- 在大部分场景下具备很强的老本竞争力,因为在函数计算是真正的按量付费(计费粒度在百毫秒),能够了解为 CPU 的利用率为 100%。
最初一一答复一下之前列出的问题:
Q1: 您曾经在虚拟机 / 容器平台上基于 FFmpeg 部署了一套视频解决服务,是否在此基础上让它更弹性,更高的可用性?
A1:如工程示例所示,在虚拟机 / 容器平台上基于 FFmpeg 的服务能够轻松切换到函数计算,FFmpeg 相干命令能够间接移值到函数计算,革新老本较低,同时人造继承了函数计算弹性高可用性个性。
Q2:您的需要只是简略的转码需要,或是一些极其轻量的需要,比方获取 OSS 上视频前几帧的 GIF 等。本人搭建老本更低。
A2:函数计算天生就是解决这些自定义问题,你的代码你做主, 代码中疾速执行几个 FFmpeg 的命令即可实现需要。
典型示例:fc-oss-ffmpeg
Q3: 您有更高级的自定义解决需要,比方视频转码实现后,须要记录转码详情到数据库,或者在转码实现后,主动将热度很高的视频预热到 CDN 上,从而缓解源站压力。
A3:详情见视频解决工作流零碎(函数计算 + 函数工作流计划),after-process 中能够做一些自定义的操作,您还能够基于此流程再做一些额定解决等,比方:
- 再减少后续流程
- 最开始减少 pre-process
Q4: 您有并发同时解决大量视频的需要。
A4:详情见视频解决工作流零碎(函数计算 + 函数工作流计划), 当有多个文件同时上传到 OSS,函数计算会主动伸缩,并行处理多个文件。详情能够参考 视频解决工作流零碎 (FnF + FC) 压测
Q5:您有很多超大的视频须要批量疾速解决完,比方每周五定期产生几百个 4G 以上的 1080P 大视频,然而心愿当天几个小时后全副解决完。
A5:详情能够参考 视频解决工作流零碎 (FnF + FC) 压测,能够通过管制分片的大小,能够使得每个大视频都有足够多的计算资源参加转码计算,大大提高转码速度。
Q6: 自定义视频解决流程中可能会有多种操作组合,比方转码、加水印和生成视频首页 GIF,后续为视频解决零碎减少新需要,比方调整转码参数,心愿新性能公布上线对在线服务无影响。
A6:详情见视频解决工作流零碎(函数计算 + 函数工作流计划), FnF 只负责编排调用函数,因而只须要更新相应的处理函数即可,同时函数有 version 和 alias 性能,更好地管制灰度上线,函数计算版本治理。
Q7: 您的视频源文件寄存在 NAS 或者 ECS 云盘上,自建服务能够间接读取源文件解决,而不须要将他们再迁徙到 OSS 上。
A7:函数计算能够挂载 NAS,间接对 NAS 中的文件进行解决。