前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云函数在音视频转码压缩场景应用案例

云函数在音视频转码压缩场景应用案例

原创
作者头像
haimingli
修改2021-01-07 21:22:42
1.3K0
修改2021-01-07 21:22:42
举报

背景

在社交应用,视频应用等领域,后端系统会收到用户上传的大量音视频文件,以及各种渠道商提供的音视频资料。这些数据的数据量大,频率高,质量参差不起,对系统的实时处理要求比较高,也给系统带来很大的压力。对于前端用户,也有自己不同的需求,比如流量不足的情况下,用户想选择清晰度没那么高的视频。对于后端系统,为了节省带宽,也会选择一定程度上的降低视频的清晰度。对于这种情况,我们可以使用云函数对这些视频文件处理,对应产生不同清晰度的视频,比如1080p,720p等,以满足不同场景下用户的需求,适应用户宽带小,流量少,网络不稳定的情况。

方案设计

整体数据流转如图所示:

详细步骤:

1.在云函数控制台创建云函数,代码如下:

/************************************************************************* ***** ***** ***** 使用教程/readme : ***** ***** https://cloud.tencent.com/document/product/583/47071 ***** ***** ***** **************************************************************************/ const COS = require('cos-nodejs-sdk-v5'); const fs = require('fs') const child_process = require('child_process') const util = require('util'); exports.main_handler = async (event, context) => { try { let downloadPath = '' let key = '' if (event.hasOwnProperty('body')) { downloadPath = event.body key = downloadPath.split('/').pop() } else if (event.hasOwnProperty('Records')) { key = event['Records'][0]['cos']['cosObject']['key'].split("/").pop() downloadPath = event['Records'][0]['cos']['cosObject']['url'] } else { return {"code": 410, "errorMsg": "event does not come from COS or APIGW"} } key = `new-${key}` const uploadPath = `/tmp/${key}` const region = process.env.region const targetBucket = process.env['target_bucket'] const targetPath = process.env['target_path'] || '' const secretId = process.env['TENCENTCLOUD_SECRETID'] const secretKey = process.env['TENCENTCLOUD_SECRETKEY'] const token = process.env['TENCENTCLOUD_SESSIONTOKEN'] const cos = new COS({ SecretId: secretId, SecretKey: secretKey, XCosSecurityToken: token }) child_process.execSync('cp ./ffmpeg /tmp/ffmpeg') child_process.execSync('chmod 755 /tmp/ffmpeg') child_process.execSync(`./ffmpeg -i ${downloadPath} -r 10 -b:a 32k ${uploadPath}`, { cwd: "/tmp" }) const putObjectAync = util.promisify(cos.putObject.bind(cos)) await putObjectAync({ Bucket: targetBucket, Region: region, Key: `${targetPath}/${key}`, Body: fs.readFileSync(uploadPath) }) fs.unlinkSync(uploadPath) return 'success' } catch (err) { console.log(err) return 'failed' } }

2.创建COS触发器。上传音视频文件后立刻触发云函数的处理逻辑。

3.配置挂在CFS,由于音视频文件一般较大,所以需要挂在额外的文件系统。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 方案设计
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档