tencent cloud

云函数

动态与公告
产品动态
产品公告
新手指引
产品简介
产品概述
相关概念
工作原理
产品优势
应用场景
相关产品
购买指南
计费概述
计费方式
计费项与计费方式
函数算力支持
免费额度
产品定价
计费示例
欠费与停服说明
快速入门
使用控制台创建一个事件函数
操作指南
配额管理
函数管理
Web 函数管理
日志管理
并发管理
触发器管理
函数 URL
自定义域名
版本管理
别名管理
权限管理
运行实例管理
插件管理
监控与告警管理
网络配置
层管理
执行配置
扩展存储管理
DNS 缓存配置
资源托管模式管理
近离线资源托管模式
工作流
触发器
触发器概述
触发器事件消息结构汇总
API 网关触发器
COS 触发器
CLS 触发器
定时触发器
CKafka 触发器
Apache Kafka 触发器
MQTT 触发器
触发器配置描述
MPS 触发器
CLB 触发器说明
云 API 触发器
开发指南
基本概念
测试云函数
环境变量
依赖安装
使用容器镜像
使用 Docker 安装依赖
错误类型与重试策略
死信队列
云函数接入数据库
自动化部署
云函数状态码
常见错误码解决方法
开发者工具
Serverless Web IDE
函数间调用 SDK
第三方工具
代码开发
Python
Node.js
Golang
PHP
Java
Custom Runtime
使用镜像部署函数
Web 框架部署
通过命令行完成框架部署
快速部署 Egg 框架
快速部署 Express 框架
快速部署 Flask 框架
快速部署 Koa 框架
快速部署 Laravel 框架
快速部署 Nestjs 框架
快速部署 Nextjs 框架
快速部署 Nuxtjs 框架
快速部署 Django 框架
实践教程
最佳实践概述
云产品联合解决方案
业务开发相关实践
实时音视频 TRTC
对象存储 COS
消息队列 CKafka
日志服务CLS
负载均衡 CLB
视频处理 MPS
内容分发网络 CDN
云数据仓库 PostgreSQL
云点播 VOD
短信 SMS
Elasticsearch Service
定时任务
视频处理
客户案例
腾讯在线教育
在线教育行业案例
游戏聊天系统
腾讯互娱国际(IEGG)
API 文档
History
Introduction
API Category
Making API Requests
Other APIs
Namespace APIs
Layer Management APIs
Async Event Management APIs
Trigger APIs
Function APIs
函数和层的状态说明
Data Types
Error Codes
SDK文档
常见问题
通用问题
Web 函数相关问题
计费相关问题
网络相关问题
日志相关问题
SCF 工具相关问题
事件处理相关问题
API 网关触发器相关问题
相关协议
Service Level Agreement
联系我们
词汇表
文档云函数实践教程对象存储 COSSCF + COS 实现实时音视频转码

SCF + COS 实现实时音视频转码

PDF
聚焦模式
字号
最后更新时间: 2024-12-02 21:04:04

操作场景

在视频、社交应用等场景下,用户上传的图片、音视频的总量大、频率高,对处理系统的实时性和并发能力都有较高的要求。而上传的视频短片,可对应不同的清晰度使用多个云函数对其分别处理,以满足不同场景下用户的需求,同时适应移动网络带宽较小且不稳定的特性。

运行原理

使用云函数、ffmpeg 及对象存储 COS 联动实现音视频转码的运行原理图如下:

在云函数中,可基于不同的编程语言(Python、Node、PHP、JAVA 及 GO)撰写自定义业务逻辑。以转码为例,操作步骤如下:
1. 创建函数,并在其中部署 ffmpeg 资源包及转码逻辑。
2. 配置 COS Bucket 触发器,对源视频实时处理加工。旁路生成日志和监控、支持告警。
3. 对转码后的视频回传 COS,并触发自动预热。

与容器服务的对比

与容器服务对比,使用云函数及 ffmpeg 实现音视频转码服务的优势和不足如下表:
对比项
基于容器的实现
基于云函数的实现
分析
实现方法
在 docker 容器中运行 ffmpeg。
ffmpeg 进行了自定义处理,不同版本具备不同的 binary 依赖,均打包为镜像。
自主控制 docker 镜像版本,不同服务加载不同的 docker 镜像,其中包含不同的 ffmpeg。
不同的 ffmpeg 编译为不同的可执行文件,并部署到云函数“层”,和业务逻辑解耦。
编写不同的函数,分别和“层”中不同的 ffmpeg 绑定,提供不同的转码功能。
编写调度函数,分片视频和调度不同的转码服务。
实现方案差异不大。
开发/测试/部署体验
本地开发测试后,触发 CI/CD 流程,烧制镜像,完成部署。
需要维护灰度发布系统,容器服务集群每次更新速度较慢。
本地开发测试后,触发 CI/CD 流程,完成部署。
云函数提供灰度/发布/回滚功能,部署流程可以直接集成 API 接口实现全自动化流程。
个人子账号可以通过 CLI 工具,在测试环境实时开发及调试,效率更高。
在开发流程方面,云函数更加简单高效。
日志/监控/告警
需要在容器集群里启动 Agent,并对接日志平台、监控中心及告警平台。
自带日志/监控/告警能力,同时开放 API 接口,可以对接第三方日志/监控平台。支持运行时启动 Agent 进程,同步上报数据。
云函数自带能力较完善,但如需对接自建平台,启动 Agent 相比容器较复杂。
运维
需自主维护容器集群,弹性伸缩效率较低。
无需维护,云函数保障集群可用性、负载均衡及弹性伸缩。
云函数更加易用。
费用
需根据峰值预留容器资源,存在资源浪费可能性。
根据实际流量弹性伸缩、计费,费用节省30%以上。
云函数具有明显优势。

通过以上与容器的多维度对比,可得出以下结论: 优势
云函数提供标准运行环境,并且保障资源的高可用和弹性伸缩,无需专人维护。
云函数基于实际业务消耗收费,不存在资源浪费。
云函数的开发调试流程效率会更加高效,依赖和业务解耦,可以分别单独更新,支持实时热更新。
运行环境隔离,单次请求失败不影响其他请求的正常执行。
不足
云函数的引入,需要对接现有 CI/CD 流程,开发方式上有一定的转变。
现有业务代码需进行一定程度的改造,主要集中在 ffmpeg 编包上。云函数可以提供编包工具及相关研发协助改造。

前提条件

本文以广州地域为例:
前往 对象存储控制台 创建 COS Bucket,且 Bucket 权限设置为公有读私有写
(可选)当视频文件大于500M时,需前往文件存储控制台开通 CFS 服务,用于扩展云函数的本地存储空间。详情请参见 挂载 CFS 文件系统
前往访问管理控制台,创建云函数的运行角色,并授予该角色 COS、CFS 的读写权限,用于授权云函数访问相应服务。详情请参见 创建函数运行角色

操作步骤

创建云函数

1. 登录 云函数控制台,单击左侧导航栏的函数服务
2. 在“函数服务”上方选择期望创建函数的地域,并单击新建,进入函数创建流程。
3. 在“新建函数”页面根据以下信息选择函数模板。如下图所示:


创建方式:选择模板创建
模糊搜索:输入“转码”,并进行搜索,本文以运行环境 Python3.6 为例。 单击模板中的查看详情,即可在弹出的“模板详情”窗口中查看相关信息,支持下载操作。
4. 单击下一步,函数名称默认填充,可根据需要自行修改。按照引导配置环境变量和运行角色,如下图所示:


环境变量:填写可参考下表。


key
value
region
COS Bucket 所在地域。
target_bucket
转码后的视频,上传到已创建好的 COS Bucket 中。
target_path
转码后的视频,上传到 Bucket 的指定目录中。
运行角色:勾选“启用”,选择“配置并使用SCF模板运行角色”,将会自动创建并选择关联了 COS、CFS 全读写权限的 SCF 模板运行角色,或选择“使用已有角色”,在下拉列表中选择在 前提条件 中已创建的运行角色,本文以“配置并使用SCF模板运行角色”为例。 云函数在运行时,会使用运行角色换取临时密钥,操作读取和写入 COS Bucket 的资源。
5. 触发器配置中,参考以下信息创建 COS 触发器。如下图所示:

主要参数信息如下,其余选项请保持默认设置:
触发方式:选择“COS触发”。
COS Bucket:选择存储桶。若用的同一个 Bucket 存储源视频和转码后的视频,则需在触发器中配置前缀过滤规则/。例如 demo/。
6. 单击完成即可完成函数和触发器创建。

(可选)配置 CFS 挂载

说明:
若您开通了 CFS 挂载服务,则请参考以下步骤在云函数中同时启用私有网络和文件系统挂载能力。
1. 在的云函数“函数配置”页面,单击右上角编辑,参考以下信息进行配置。
私有网络:勾选“启动”,并选择私有网络及子网。
文件系统:勾选“启用”,选择选择在 前提条件 中已创建的文件系统。
2. 单击函数代码页签,进入函数代码编辑页面,修改文件上传路径。如下图所示:

注释第76行代码,并在77行添加以下代码。
upload_path = '/mnt/new-'+ key.split('/')[-1]

测试功能

登录 对象存储控制台 ,进入对应的 Bucket 目录下,上传视频文件,并到对应的转码目录下查看,是否生成压缩的视频文件。如下图所示:
说明:
根据视频大小不同,压缩时间也不同。如果视频过大,则压缩时间也会延长,需要较长的时间才能查看到新视频。

扩展能力

基于本文示例,您还可扩展自动化 CDN 刷新/预热的能力。例如,转码后的视频在回传 COS Bucket 时,可触发新函数执行 CDN 刷新/预热功能。详情请参见 CDN 缓存刷新
您还可借助云函数的高并发能力,实现快速转码或者切片功能。例如,函数 A 进行调度任务,函数 B 进行实际的转码/切片工作。可借助 CFS 挂载能力,轻松实现跨函数的文件共享功能。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈