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
联系我们
词汇表
文档云函数实践教程云点播 VOD SCF + VOD 实现接收事件通知

SCF + VOD 实现接收事件通知

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

使用须知

Demo 功能介绍

本文以一个视频的上传、转码流程为例,向开发者展示云点播(VOD)事件通知机制 的使用方法。

架构和流程

Demo 基于云函数(SCF) 搭建了一个 HTTP 服务,用于接收来自 VOD 的事件通知请求。该服务通过对 NewFileUpload(视频上传完成事件通知)和 ProcedureStateChanged(任务流状态变更)的处理,实现发起视频转码和获取转码结果。
系统主要涉及四个组成部分:控制台、API 网关、云函数和云点播,其中 API 网关和云函数即是本 Demo 的部署对象。
具体业务流程为:
1. 在控制台上传一个视频到 VOD。
2. VOD 后台发起 NewFileUpload 事件通知请求给 Demo。
3. Demo 解析事件通知内容,调用 VOD 的 ProcessMedia 接口对刚上传的视频发起转码,使用的转码模版为 系统预置模版 100010和100020。
4. VOD 完成转码任务后,发起 ProcedureStateChanged 事件通知请求给 Demo。
5. Demo 解析事件通知内容,将转码输出文件的 URL 打印到 SCF 日志中。
说明:
Demo 中的 SCF 代码使用 Python3.6 进行开发,此外 SCF 还支持 Python2.7、Node.js、Golang、PHP 和 Java 等多种编程语言,开发者可以根据情况自由选择,具体请参考 SCF 开发指南

费用

本文提供的云点播事件通知接收服务 Demo 是免费开源的,但在搭建和使用的过程中可能会产生以下费用:
购买腾讯云云服务器(CVM)用于执行服务部署脚本,详见 CVM 计费
使用 SCF 提供签名派发服务,详见 SCF 计费SCF 免费额度
使用腾讯云 API 网关为 SCF 提供外网接口,详见 API 网关计费
消耗 VOD 存储用于存储上传的视频,详见 存储计费
消耗 VOD 转码时长用于对视频进行转码,详见 转码计费

避免影响生产环境

事件通知接收服务 Demo 的业务逻辑使用到 VOD 事件通知机制,因此部署过程中需要开发者配置事件通知地址。如果该账号已有基于 VOD 的生产环境,那么变更事件通知地址可能造成业务异常。操作前请务必确认不会影响生产环境,如果您无法确定,请更换一个全新账号来部署 Demo

快速部署事件通知接收服务

步骤1:准备腾讯云 CVM

部署脚本需要运行在一台腾讯云 CVM 上,要求如下:
地域:任意。
机型:官网最低配置(1核1GB)即可。
公网:需要拥有公网 IP,带宽1Mbps或以上。
操作系统:官网公共镜像Ubuntu Server 16.04.1 LTS 64位Ubuntu Server 18.04.1 LTS 64位
购买 CVM 的方法请参见 操作指南 - 创建实例。重装系统的方法请参见 操作指南 - 重装系统
注意:
事件通知接收服务 Demo 本身并不依赖于 CVM,仅使用 CVM 来执行部署脚本。
如果您没有符合上述条件的腾讯云 CVM,也可以在其它带外网的 Linux(如 CentOS、Debian 等)或 Mac 机器上执行部署脚本,但需根据操作系统的区别修改脚本中的个别命令,具体修改方式请开发者自行搜索。

步骤2:开通云点播

请参考 快速入门 - 步骤1 开通云点播服务。

步骤3:获取 API 密钥和 APPID

事件通知接收服务 Demo 的部署和运行过程需要使用到开发者的 API 密钥(即 SecretId 和 SecretKey)和 APPID。
如果还未创建过密钥,请参见 创建密钥文档 生成新的 API 密钥;如果已创建过密钥,请参见 查看密钥文档 获取 API 密钥。
在控制台 账号信息 页面可以查看 APPID,如下图所示:



步骤4:部署事件通知接收服务

登录 步骤1准备的 CVM(登录方法详见 操作指南 - 登录 Linux),在远程终端输入以下命令并运行:
ubuntu@VM-69-2-ubuntu:~$ export SECRET_ID=AKxxxxxxxxxxxxxxxxxxxxxxx; export SECRET_KEY=xxxxxxxxxxxxxxxxxxxxx;export APPID=125xxxxxxx;git clone https://github.com/tencentyun/vod-server-demo.git ~/vod-server-demo; bash ~/vod-server-demo/installer/callback_scf.sh
说明:
请将命令中的 SECRET_ID、SECRET_KEY 和 APPID 赋值为 步骤3 中获取到的内容。
该命令将从 Github 下载 Demo 源码并自动执行安装脚本。安装过程需几分钟(具体取决于 CVM 网络状况),期间远程终端会打印如下示例的信息:
[2020-06-05 17:16:08]开始安装 pip3。
[2020-06-05 17:16:12]pip3 安装成功。
[2020-06-05 17:16:12]开始安装腾讯云 SCF 工具。
[2020-06-05 17:16:13]scf 安装成功。
[2020-06-05 17:16:13]开始配置 scf。
[2020-06-05 17:16:14]scf 配置完成。
[2020-06-05 17:16:14]开始部署云点播事件通知接收服务。
[2020-06-05 17:16:24]云点播事件通知接收服务部署完成。
[2020-06-05 17:16:26]服务地址:https://service-xxxxxxxx-125xxxxxxx.gz.apigw.tencentcs.com/release/callback
复制输出日志中的事件通知接收服务地址(示例中的https://service-xxxxxxxx-125xxxxxxx.gz.apigw.tencentcs.com/release/callback)。
注意:
如果输出日志中出现如下所示的警告,一般是由于 CVM 无法立即解析刚部署好的服务域名,可尝试忽略该警告。
[2020-04-25 17:18:44]警告:事件通知接收服务测试不通过。

步骤5:配置事件通知地址

避免影响生产环境 一节所述,操作之前请先确认您的线上业务不依赖于 VOD 事件通知。
登录 云点播控制台,单击设置,回调模式选择普通回调,回调 URL 填写 步骤4 中获得的事件通知接收服务地址,回调事件全部勾选,然后单击确定。如下图所示:


注意:
如果您在控制台同时看到两个回调 URL 设置(2.0版本格式和3.0版本格式),请填写3.0版本。

步骤6:测试 Demo

按照 上传视频 - 本地上传步骤 的说明,上传一个测试视频到云点播,注意上传过程选择默认的只上传,暂不进行视频处理。上传完成后,在“已上传”标签页可以看到该视频的状态为“处理中”,说明 Demo 接收到了 NewFileUpload 事件通知并发起了转码请求。


等待视频处理完成(状态变为“正常”)后,单击快捷查看,在页面右侧可以看到该视频有两个转码视频。如下图所示:


登录 SCF 控制台日志页面 查看 SCF 日志记录,在最新的一条日志中,可以看到两个转码文件的 URL 已经打印出来,在实际应用场景中,开发者可以通过 SCF 将 URL 记录在自己的数据库,或者通过其它渠道发布给观众。


说明:
SCF 日志可能会有些许延迟,如果在页面上没有看到日志,请耐心等待一两分钟,然后单击重置刷新。

系统设计说明

接口协议

事件通知接收云函数通过 API 网关对外提供接口,具体接口协议请参考文档 视频上传完成事件通知任务流状态变更

事件通知接收服务代码解读

1. main_handler()为入口函数。
2. 调用parse_conf_file(),从config.json文件中读取配置信息。配置项说明如下:
字段
数据类型
功能
secret_id
String
API 密钥
secret_key
String
API 密钥
region
String
云 API 请求地域,对于 VOD 可随意填写
definitions
Array of Integer
转码模板
subappid
Integer
事件通知是否来自 云点播子应用
3. 针对 NewFileUpload 类型的事件通知,调用deal_new_file_event()解析请求,从中取出新上传视频的 FileId:
if event_type == "NewFileUpload":
fileid = deal_new_file_event(body)
if fileid is None:
return ERR_RETURN
4. 调用trans_media()发起转码,输出云 API 的回包到 SCF 日志,并回包给 VOD 的事件通知服务:
rsp = trans_media(configuration, fileid)
if rsp is None:
return ERR_RETURN
print(rsp)
5. trans_media()中,调用云 API SDK 发起 ProcessMedia 请求:
cred = credential.Credential(conf["secret_id"], conf["secret_key"])
client = vod_client.VodClient(cred, conf["region"])

method = getattr(models, API_NAME + "Request")
req = method()
req.from_json_string(json.dumps(params))

method = getattr(client, API_NAME)
rsp = method(req)
return rsp
6. 针对 ProcedureStateChanged 类型的事件通知,调用deal_procedure_event()解析请求,从中取出转码输出视频的 URL 并打印到 SCF 日志:
elif event_type == "ProcedureStateChanged":
rsp = deal_procedure_event(body)
if rsp is None:
return ERR_RETURN


帮助和支持

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

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

文档反馈