构建基于CloudFlow的弹性高可用音视频处理系统

在音视频系统中,音视频转码是比较消耗计算力的一个子系统,您可以通过函数计算云工作流构建弹性高可用的Serverless音视频处理系统。本文会从工程效率、运维、性能和成本方面介绍Serverless音视频处理系统和传统方案的差异。同时介绍如何搭建并体验Serverless音视频处理系统。

背景信息

针对音视频转码,虽然您可以使用云上专门的转码服务,但在以下场景,您仍然会选择自己搭建转码服务。

  • 弹性伸缩诉求

    • 需要更弹性的视频处理服务。

      例如,您已经在虚拟机或容器平台上基于FFmpeg部署了一套视频处理服务,但想在此基础上实现更弹性、更高可用性的服务。

  • 工程效率诉求

    • 需要并行处理多个视频文件。

    • 需要批量快速处理多个超大的视频。

      例如,每周五定时产生几百个4 GB以上1080P的大视频,需要几小时内处理完。

  • 自定义处理诉求

    • 需要处理更高级的自定义处理需求。

      例如,视频转码完成后,需要记录转码详情到数据库,或自动将热度很高的视频预热到CDN上以缓解源站压力。

    • 需要转换音频格式、自定义采样率或音频降噪等。

    • 需要直接读取源文件进行处理。

      例如,当您的视频源文件存放在NAS或ECS云盘上时,您需要自建服务直接读取源文件进行处理,而不需要将其再次迁移至OSS。

    • 需要将视频转换为其他格式,然后在此基础上增加其他新的需求。

      例如,将视频进行转码、加水印和生成视频首页的GIF,然后在此基础上增加新的需求,例如调整转码参数、发布新功能时对在线服务无影响。

  • 成本诉求

    • 需要简单的转码或较轻量的需求时。

      例如,获取OSS上视频前几帧的GIF、获取音视频的时长,此时您自己搭建的成本会更低。

针对自己搭建转码服务的方案有传统自建方案和Serverless方案,本文会介绍这两类方案的差异及Serverless方案具体的操作流程。

解决方案

传统自建方案

随着计算机技术和网络的发展,云计算厂商的产品在不断成熟完善。如果想要搭建音视频处理系统,可以直接上云购买ECS服务器部署服务,通过OSS、CDN等技术完成音视频的存储和音视频的播放加速。

image

Serverless方案

视频处理工作流系统

如果您需要加快大视频的转码速度或者完成各种复杂的组合操作,可以通过云工作流编排函数实现功能强大的视频处理系统。方案架构图如下。

image

当用户上传一个MP4格式的视频到OSS,OSS自动触发云工作流流程执行,进行一种或多种格式的转码。通过该方案可以实现以下需求:

  • 一个视频文件可以同时被转码成各种格式和其他自定义处理,例如增加水印或在处理后更新信息到数据库等。

  • 当有多个文件同时上传到OSS时,函数计算会自动伸缩,并行处理多个文件,同时将文件并行转码成多种格式。

  • 结合NAS和视频切片,可以解决超大视频的转码。对于每个视频,都需先进行切片处理,然后并行转码切片,最后合成。通过设置合理的切片时间,可以提高较大视频的转码速度。

    说明

    视频切片是指将视频流按指定的时间间隔切分成一系列分片文件,并生成一个索引文件,记录分片文件的信息。

Serverless方案优势

提高工程效率

对比项

Serverless方案

传统自建方案

基础设施

需要您采购和管理。

开发效率

只需专注业务逻辑的开发,配合Serverless Devs编排和部署资源。

除了必要的业务逻辑开发,还需要您自己建立相同的线上运行环境,包括相关软件的安装、服务配置、安全更新等一系列问题。

并行和分布式视频处理

通过云工作流资源编排即可实现多个视频的并行处理和单个大视频的分布式处理,稳定性和监控交由云平台。

需要很强的开发能力和完善的监控系统来保证稳定性。

学习上手成本

会编写对应语言的函数代码和熟悉FFmpeg使用即可。

除了编程语言开发能力和熟悉FFmpeg外,可能还需要使用K8s和云服务器ECS,需要了解更多的产品、名词和参数意义。

项目上线周期

预计3人天(开发调试2人天和压测观察1人天)。

在具体业务逻辑外耗费大量的时间和人力成本,保守估计大约30人天,包括硬件采购、软件和环境配置、系统开发、测试、监控报警和灰度发布系统等。

弹性伸缩免运维

内容项

Serverless方案

传统自建方案

弹性高可用

函数计算系统具有毫秒级弹性伸缩,可以快速实现底层扩容以应对峰值压力,免运维,转码性能优异。

需要自建负载均衡SLB,弹性伸缩、扩容缩容速度较函数计算慢。

监控报警查询

提供更细粒度的云工作流流程执行和函数执行情况。同时,可以查询每次函数执行的Latency和日志等,更加完善的报警监控机制。

弹性伸缩或容器级别的Metrics。

视频处理工作流操作步骤

前提条件

操作步骤

该方案需要通过云工作流编排函数实现视频处理系统,涉及到多个函数代码和工作流的配置和编写。本文使用Serverless Devs部署该系统。

  1. 访问multimedia-process-flow模板

  2. 单击一键部署跳转到函数计算的应用中心,开始快速部署应用。image

  3. 创建应用页面,配置以下参数,然后单击创建并部署默认环境

    重点参数配置如下,其余参数保持默认值即可。

    参数名称

    参数说明

    基础信息

    部署类型

    选择直接部署

    角色名称

    • 如果您使用的是阿里云账号,第一次在应用中心创建应用,则需要单击前往授权,跳转至角色快捷创建页面,创建AliyunFCServerlessDevsRole角色,然后单击同意授权

      image.png

    • 如果您使用的是RAM用户,请根据页面提示,将复制的授权链接给到阿里云账号进行授权。授权完成后,单击已完成授权

      image.png

      说明

      如果页面提示无法获取角色,请联系对应的阿里云账号给当前RAM用户赋予AliRAMReadOnlyAccessAliyunFCFullAccess权限。具体操作,请参见通过阿里云账号给RAM用户授权

    高级配置

    地域

    选择应用部署的地域。

    工作流RAM角色的ARN

    工作流执行使用的服务角色。请提前创建角色,并为其授予AliyunFCInvocationAccess权限策略。

    函数计算Service角色

    函数计算访问其他云服务时使用的服务角色,如果没有特殊要求,建议使用函数计算提供的默认服务角色AliyunFCDefaultRole。

    对象存储存储桶名

    填写与工作流和函数相同地域下的Bucket名称。

    前缀

    存放原始视频的目录前缀,本文示例为src

    转码后的视频保存目录

    转码后视频存放目录,本文实例为dst

    OSS触发器RAM角色ARN

    推荐使用角色AliyunOSSEventNotificationRole,第一次使用的用户,需单击创建新的服务角色前往授权并创建该角色。

    等待1~2分钟后,应用部署成功,系统将自动创建5个函数以及对应的1个工作流multimedia-process-flow-3oih,您可以分别登录函数计算控制台云工作流控制台查看创建结果。5个函数的作用分别如下:

    • oss-trigger-workflow:配置对应的触发器,感知特定目录的新视频上传内容,触发工作流执行。

    • split:将特定视频按照分段长度,在工作目录中进行切分。

    • transcode:依照传入的视频格式,分别进行分段的视频转码。

    • merge:将分段转码后的视频拼接。

    • after-process:工作目录清理。

  4. 验证结果。

    1. 登录云工作流控制台,然后在顶部菜单栏,选择地域。

    1. 在工作流列表,单击目标工作流multimedia-process-flow-3oih,在工作流详情页面,单击启动执行执行工作流。在执行工作流面板,填写执行名称执行输入,输入示例如下。

      {
        "oss_bucket_name": "buckettestfnf",
        "video_key": "source/test.mov",
        "output_prefix": "outputs",
        "segment_time_seconds": 15,
        "dst_formats": [
          "mp4",
          "flv"
        ]
      }

      当执行状态为已成功时,表示执行完成。

    2. 登录对象存储OSS控制台,进入目标Bucket中,转码后视频存放目录/outputs,查看转码后的文件。

      当看到转码后的文件时,说明视频处理系统的服务已正常运行。可以看到目标视频格式已转码合并完成。

      image

常见问题

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

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

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

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

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

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

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

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