在现代 Web 开发中,音视频处理和传输已经成为了必不可少的一部分。然而,对于许多初学者来说,搭建音视频处理服务往往需要大量的工作,需要协调不同层次的网络架构和服务器代码,付出不必要的时间和精力。针对这一问题,Serverless 技术提供了一种全新的解决方案。本文将详细介绍如何基于 Serverless 架构来搭建优秀的音视频处理服务,并提供了一些示例代码,期望能够给读者带来启发和指导。
Serverless 技术介绍
Serverless,顾名思义,即“无服务器”架构。简单来说,就是将软件的运行环境从传统服务器上转移到云服务供应商的云平台上,将项目的扩展,高可用和负载均衡等问题交给云平台的自动化和工具化服务来处理,使得开发者只需要关注编写核心业务代码,从而快速构建高可用、低成本的服务。
Serverless 在音视频处理方面的优势主要表现在以下方面:
- 节约成本:通过分布式架构,在不使用的时候,只需付少量的存储空间和网络带宽费用。
- 水平扩展:Serverless 的弹性计算资源,可以根据当前负载量自动调整计算资源,提供无缝水平扩展。
- 非常规使用:Serverless 的无限横向扩展,可以使用它来开发不同类型的应用,如聊天,机器学习,事件处理等。
实现方案
架构设计
Serverless 通过将传统应用程序架构中的应用程序的状态、触发处理和代码安装的主机从开发者管理和维护中分离,提供了一种从计算资源的管理这一繁琐基础工作中解放开发者手头的设计方式。本项目中我们使用 AWS Lambda, S3 和 Elastic Transcoder 这三个服务分别完成状态、触发和代码托管的工作。
技术选择
- AWS Lambda:Serverless 计算服务。
- S3:储存音视频文件。
- Elastic Transcoder:音视频转码、截图等。
工作流程
首先需要将音视频文件上传到 S3 存储桶中,Lambda 会根据 S3 的上传事件触发内部逻辑,使用 Elastic Transcoder 进行音视频转码或截取图片等处理,处理后的结果可以直接上传到相应的存储桶中,或者储存在动态分配的 EBS 存储中供用户直接下载。
下图展示了整个工作流程及其组成要素:
Lambda 函数
为了触发 S3 响应事件,我们需要在 AWS Lambda 中创建相应的函数:
-- -------------------- ---- ------- ------ ---- ------ ----- ------ ------- --- --------------------- --------- ------ - ------------------- ----------------------------- ---------------------------- ------------------------------ -- - -------------------- -------- - -------------- -- - --------------------------------------------------------------------- -- - --------------------------------- -------- - -------------- ---------------------------------- -------- - ------ ------------ - -- --------- - ------ ------------- ------------ ---------------------- - - - ------ --------
这段代码实例中,使用 boto3
类库实例化了一个 S3 对象,同时使用 elastictranscoder
客户端来初始化转码工作。
S3 存储
S3 存储背后的核心音视频处理服务:
- Elastic Transcoder 服务支持视频输入格式:.3g2, .3gp, .asf, .avi, .divx, .flv, .m4v, .mkv, .mov, .mp4, .mpeg, .mpeg-ps, .mpeg-ts, .mxf, .ogg, .vob, .wmv
- Elastic Transcoder 服务支持音频输入格式:.3gp, .aa, .aac, .aax, .act, .aiff, .amr, .ape, .au, .awb, .dct, .dss, .dvf, .flac, .gsm, .iklax, .ivs, .m4a, .m4b, .m4p, .mmf, .mp3, .mpc, .msv, .ogg, .opus, .ra, .rm, .sln, .tta, .vct, .vox, .wav, .wma, .wv
Elastic Transcoder 计算资源
Elastic Transcoder 核心的转码工作会在 AWS 实例上进行,不过这并不是开发者需要关注的问题。你所需要做的,就是向 Elastic Transcoder 服务提交任务。
应用示例
我们这里通过一个具体的视频转码例子来说明此方案的实现方法,此处假设有一个名为 sample.mp4 的视频文件可以上传到 S3 存储桶。
- 设置 Lambda 转码服务
我们在 AWS Lambda 中新建一个基于 Python 2.7 的 Lambda 函数,命名为 transcoder-pdf
,并把前面提到的前端代码复制到编辑器中,需要调整的参数分别是管道 ID 和转码预设 ID。
- 创建 S3 存储桶
创建一个名为 YOUR_ICON_BUCKET_NAME
的 S3 存储桶,保存 sample.mp4 视频文件。在 S3 服务中找到此存储桶,点击它的属性和事件,配置事件触发。将其设置为事件类型“对象创建(所有)”、“触发前缀(可选)”和“触发后缀(可选)”为 .mp4。
- 设置 Elastic Transcoder 服务
在 Elastic Transcoder 中,创建一个新管道并将其与转码存储桶关联。在分类中添加媒体类型,此处选择 “MP4 files” 文件类型。
最后可以在 S3 存储桶内找到新生成的转码后的视频文件,随意地使用它们。
总结
本文介绍了如何使用 Serverless 技术来搭建优秀的音视频处理服务,通过 AWS Lambda,S3,Elastic Transcoder 等服务组件,实现了一个完整的音视频处理方案。 Serverless 的弹性计算服务和自动化管理,使得开发者可以更专注于业务逻辑的实现,提高了 Web 应用的开发效率和可靠性,也可以拓展到机器学习和事件处理等不同类型的应用场景。本文的示例代码在实际操作过程中可进行调整,适应相应的服务器需求,相关指导意义也供读者参考。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645b4cba968c7c53b0da623d