详情页标题前

腾讯云云函数(SCF)部署流式转码应用-云淘科技

详情页1

应用简介

通过使用 COS + 云函数 + CLS + FFmpeg,您可以快速构建高可用、并行处理、实时日志、高度自定义的视频转码服务。

架构原理

通过云函数创建 FFmpeg 任务进程,云函数进程与 FFmpeg 任务进程通过 pipe 和 FIFO 的方式进行数据传输。云函数进程中的两个任务线程分别接收 FFmpeg 任务进程向函数进程输出的 FFmpeg 日志流与转码后的文件流。实时日志线程将日志流输出,上传任务负责缓存文件流并上传至用户定义的输出 COS。 

腾讯云云函数(SCF)部署流式转码应用-云淘科技



应用优势

流式转码n采用流式拉取源视频文件,流式上传转码文件的工作方式,突破了本地存储的限制,且不需要额外部署 CFS 等产品。实时日志n视频转码过程中,可通过 CLS 日志实时查看转码进度。同时支持输出 FFmpeg 应用的完整日志。长时运行n利用云函数的 长时运行机制,支持 12h-24h 的运行时长,可覆盖大文件耗时较长的转码场景。自定义参数n支持用户自定义配置 FFmpeg 命令参数。

应用资源

转码应用部署后,将为您创建以下资源:云函数 : 流式读取 COS 文件,使用 FFmpeg 转码后流式输出回 COS 中,并将转码过程的实时日志输出到 CLS。CLS 日志 :存储转码过程的实时日志。CLS 日志可能会产生一定计费,详情参考 CLS 计费规则。

注意事项

转码应用需要依赖云函数长时运行能力,详情请参考 异步执行。转码输出桶与函数建议配置在同一区域,因为跨区域配置转码应用稳定性及效率都会降低,并且会产生跨区流量费用。需要为转码应用的云函数创建运行角色,并授权cos读写权限。详细配置参考 运行角色。FFmpeg 不同转码场景下指令配置参数不同,因此需要您具有一定的 FFmpeg 使用经验 。 本文中仅提供几个样例作为参考,更多 FFmpeg 指令参考 FFmpeg 官网。

前提条件

1. 安装 Serverlesss Cloud Framework。2. 配置部署账号权限。详情见 账号和权限配置。3. 配置 运行角色 权限。

操作步骤

1. 下载转码应用

scf init transcode-app

进入项目目录 transcode-app,将看到目录结构如下:

transcode-app|- .env  #环境配置|- serverless.yml # 应用配置|- log/ #log 日志配置|  └── serverless.yml└──transcode/  #转码函数配置       |- src/       |   |- ffmpeg   #转码 FFmpeg 工具       |   └── index.py       └── serverless.yml

log/serverless.yml 定义一个 CLS 日志集和主题,用于转码过程输出的日志保存,目前采用腾讯云 CLS 日志存储。每个转码应用将会根据配置的 CLS 日志集和主题去创建相关资源,CLS 的使用会产生计费,具体参考 CLS 计费规则。transcode/serverless.yml 定义函数的基础配置及转码参数配置。transcode/src/index.py 转码功能实现。transcode/src/ffmpeg 转码工具 FFmpeg。

2. 配置环境变量和应用参数

应用参数,文件 transcode-app/serverless.yml

#应用信息app: transcodeApp # 您需要配置成您的应用名称stage: dev # 环境名称,默认为dev

环境变量,文件transcode-app/.env

REGION=ap-shanghai  # 应用创建所在区TENCENT_SECRET_ID=xxxxxxxxxxxx # 您的腾讯云 sercretIdTENCENT_SECRET_KEY=xxxxxxxxxxxx # 您的腾讯云 sercretKey

说明您可以登录腾讯云控制台,可以在 API 密钥管理 中获取 SecretId 和 SecretKey。如果您的账号为主账号,或者子账号具有扫码权限,也可以不配置 SercretId 与 SercretKey,直接扫码部署应用。更多详情参考 账号和权限配置。

3. 配置转码需要的参数信息

CLS 日志定义,文件 transcode-app/log/serverless.yml

#组件信息全量配置参考 https://github.com/serverless-components/tencent-cls/blob/master/docs/configure.mdcomponent: cls # 引用 component 的名称name: cls-video # 创建的实例名称,请修改成您的实例名称
#组件参数inputs: name: cls-log # 您需要配置一个 name,作为您的 cls 日志集名称 topic: video-log # 您需要配置一个 topic,作为您的 cls 日志主题名称 region: ${env:REGION} # 区域,统一在环境变量中定义 period: 7 # 日志保存时间,单位天

云函数及转码配置,文件 transcode-app/transcode/serverless.yml

     #组件信息 全量配置参考https://github.com/serverless-components/tencent-scf/blob/master/docs/configure.md     component: scf # 引用 component 的名称     name: transcode-video # 创建的实例名称,请修改成您的实例名称

#组件参数 inputs: name: transcode-video-${app}-${stage} src: ./src handler: index.main_handler role: transcodeRole # 函数运行角色,已授予cos对应桶全读写权限 runtime: Python3.6 memorySize: 3072 # 内存大小,单位MB timeout: 43200 # 函数执行超时时间, 单位秒, 即本demo目前最大支持12h运行时长 region: ${env:REGION} # 函数区域,统一在环境变量中定义 asyncRunEnable: true # 开启长时运行 cls: # 函数日志 logsetId: ${output:${stage}:${app}:cls-video.logsetId} # cls日志集 cls-video为cls组件的实例名称 topicId: ${output:${stage}:${app}:cls-video.topicId} # cls日志主题 environment: variables: # 转码参数 REGION: ${env:REGION} # 输出桶区域 DST_BUCKET: test-123456789 # 输出桶名称 DST_PATH: video/outputs/ # 输出桶路径 DST_FORMAT: avi # 转码生成格式 FFMPEG_CMD: ffmpeg -i {input} -y -f {dst_format} {output} # 转码基础命令,您可自定义配置,但必须包含ffmpeg配置参数和格式化部分,否则会造成转码任务失败。 FFMPEG_DEBUG: 1 # 是否输出ffmpeg日志 0为不输出 1为输出 TZ: Asia/Shanghai # cls日志输出时间的时区 events: - cos: # cos触发器 t parameters: bucket: test-123456789.cos.ap-shanghai.myqcloud.com # 输入文件桶 filter: prefix: video/inputs/ # 桶内路径 events: 'cos:ObjectCreated:*' # 触发事件 enable: true

说明输出桶与函数建议配置在同一区域,跨区域配置应用稳定性及效率都会降低,并且会产生跨区流量费用。内存大小上限为3072MB,运行时长上限为43200s。如需调整,请通过 在线咨询 申请配额调整。转码应用必须开启函数长时运行 asyncRunEnable: true。运行角色请根据 运行角色 创建并授权。示例配置的 FFmpeg 指令仅适用于 AVI 转码场景,详细介绍参考 FFmpeg 指令。

4. 部署项目

transcode-app 项目目录下,执行 scf deploy 部署项目。

cd transcode-app && scf deploy

5. 上传视频文件

上传视频文件到已经配置好的cos桶指定路径,则会自动转码。本示例中是 COS 桶test-123456789.cos.ap-shanghai.myqcloud.com下的/video/inputs/转码成功后,文件将保存在您配置的输出桶路径中。本示例中是 COS 桶test-123456789.cos.ap-shanghai.myqcloud.com下的/video/outputs/

6. 重新部署

如果需要调整转码配置,修改文件 transcode/serverless.yml 后,重新部署云函数即可:

cd transcode && scf deploy

监控与日志

批量文件上传到 COS 会并行触发转码执行。1. 登录 Serverless 控制台的函数服务页面中,单击函数名进入函数管理页面。2. 单击日志查询,即可查看日志监控。3. 单击函数管理 > 函数配置,单击日志主题的链接,跳转至日志服务控制台。n

腾讯云云函数(SCF)部署流式转码应用-云淘科技

4. 在日志服务控制台的检索分析页面中,选择日志集合日志主题,即可查看日志检索分析 。n

腾讯云云函数(SCF)部署流式转码应用-云淘科技



FFmpeg 工具

FFmpeg 指令

yml 文件 transcode-app/transcode/serverless.ymlDST_FORMATFFMPEG_CMD 指定了转码应用的转码指令,您可根据应用场景自定义配置。例如:转码 MP4 格式视频,可以将 FFMPEG_CMD 配置如下:

DST_FORMAT: mp4FFMPEG_CMD: ffmpeg -i {input} -vcodec copy -y -f {dst_format} -movflags frag_keyframe+empty_moov {output}

说明FFMPEG_CMD 必须包含 FFmpeg 配置参数和格式化部分,否则会造成转码任务失败。FFmpeg 不同转码场景下指令配置参数不同,因此需要您具有一定的 FFmpeg 使用经验。以上提供的指令仅是针对这几个应用场景的指令。更多 FFmpeg 指令参考 FFmpeg 官网。

自定义 FFmpeg

转码应用场景中提供了默认的 FFmpeg 工具,如果您想自定义 FFmpeg,执行以下操作:1. 将样例中的 FFmpeg 替换成您自定义的 FFmpeg。2.transcode-app/transcode 目录下再次执行 scf deploy 部署更新。

 cd transcode && scf deploy

说明自行编译的 FFmpeg 环境与云函数运行环境如果不同,可能会导致 FFmpeg 权限问题。我们提供了云函数执行环境的官方镜像,请使用 官方镜像环境 编译您的 FFmpeg。

运行角色

转码函数运行时需要读取 COS 资源进行转码,并将转码后的资源写回 COS,因此需要给函数配置一个授权 COS 全读写的运行角色。更多参考 函数运行角色。1. 登录 访问管理控制台,单击新建角色。2. 角色载体选择腾讯云产品服务。3. 在“输入角色载体信息”步骤中勾选云函数(scf),并单击下一步。4. 在“配置角色策略”步骤中,您可以直接选择 QcloudCOSFullAccess 对象存储(COS)全读写访问权限,如果需要更细粒度的权限配置,请根据实际情况配置选择。单击下一步。5. 在“配置角色标签”步骤中,设置不同维度的标签,使用如职位、部门、籍贯等,标签对用户进行分类管理。6. 在“审阅”步骤中,输入角色名称,完成创建角色及授权。该角色将作为函数的运行角色,配置在文件 transcode-app/transcode/serverless.yml 中。说明由于运行角色密钥最长有效期为12小时,因此函数配置的超时时间不能大于12小时。如果您需要更长的函数执行时长,可以通过改造 transcode-app/transcode/src/index.py 中的访问 COS 方式,配置永久密钥去读写访问 COS。但这样会暴露您的密钥在代码中,请谨慎使用。
官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/149827.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云TDSQL-C MySQL版概述

    Serverless 服务是腾讯云自研的新一代云原生关系型数据库 TDSQL-C MySQL 版的无服务器架构版,是全 Serverless 架构的云原生数据库。Serverless 服务支持按实际计算和存储资源使用量收取费用,不用不付费,将腾讯云云原生技术普惠用户。 Serverless 服务架构 按需启动,不需要时可关闭。自动扩展/收缩。缩放对应用程序…

    2023年12月9日
  • 阿里云RDS数据库管理敏感数据-云淘科技

    如果您需要对RDS实例中的敏感数据进行管控和脱敏,可以使用数据管理DMS提供的敏感数据保护功能。 费用 请参见敏感数据保护功能定价。 功能介绍 数据管理DMS的敏感数据管理提供如下功能: 提供敏感数据资产大盘,解决企业敏感数据分布的统一纳管问题。 数据自动化扫描。 自定义数据扫描触发周期。 自动识别企业敏感数据和对敏感数据进行分类分级,及时发现、有效管理企业…

    2023年12月9日
  • 腾讯云对象存储盲水印

    简介 本文档提供关于盲水印相关的 API 概览以及 SDK 示例代码。 API 操作描述 盲水印 对本地图片添加或提取盲水印并上传至存储桶 添加盲水印 功能说明 盲水印支持在上传时添加以及下载时添加。 请求示例1: 上传时添加盲水印 opt := &cos.ObjectPutOptions{ nil, &cos.ObjectPutHeader…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云云函数(SCF)SCF + VOD 实现接收事件通知-云淘科技

    使用须知 Demo 功能介绍 本文以一个视频的上传、转码流程为例,向开发者展示云点播(VOD)事件通知机制 的使用方法。 架构和流程 Demo 基于云函数(SCF) 搭建了一个 HTTP 服务,用于接收来自 VOD 的事件通知请求。该服务通过对 NewFileUpload(视频上传完成事件通知)和 ProcedureStateChanged(任务流状态变更)…

    2023年12月9日
  • 腾讯云对象存储批量拉取任务

    功能描述 拉取批量数据处理任务列表。 授权说明 授权策略中 action 设置为 ci:DescribeInventoryTriggerJobs 。查看所有 action。 服务开通 使用该功能需提前开通数据万象,并绑定存储桶。详情请参见 绑定存储桶。 使用限制 使用该接口时,请先确认相关限制条件。详情请参见 使用限制。 请求 请求示例 GET /inve…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。