Serverless 音视频转码 —— 芒果 TV 落地实践(上)

Stella981
• 阅读 578

本文整理自芒果 TV 吴坚强在 Techo 大会的分享。下面,让我们一起回顾下吴老师在 Techo 大会的精彩演讲内容。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

原文作者:吴坚强 整理编辑:王天云;@Aceyclee

大家好,我叫吴坚强,来自芒果 TV,非常荣幸收到腾讯云的邀请来和大家分享芒果 TV 在腾讯云 Serverless 上的落地探索及实践。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

今天的分享,主要从目前 Serverless 的易用性以及出于对资源的消耗和成本的考虑,希望能为做类似业务落地的同学提供一定的参考。

我本次的分享主要分四个部分,第一个是芒果TV简单介绍;第二个是音视频编解码业务的简述及发展现状;第三是引入Serverless结合以后,我们在此期间做的事情;第四是规划及展望。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

芒果TV,在座各位都比较熟悉,它是湖南广电下的视频平台。大家熟知的《快乐大本营》、《明星大侦探》、《歌手》、《爸爸去哪儿》等等这些节目,尤其是在今年推出的自制节目《乘风破浪的姐姐》,非常火爆。

芒果 TV 作为湖南广电双核驱动的战略主体之一,是国内 A 股首家国有控股的视频平台。经过这么多年的发展,获得非常多的荣耀。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

芒果音视频编解码业务

下面我简单介绍下我们团队承担的业务,主要有以下几个方面:

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

在自有内容的音视频播出里,每天有海量视频的生产,消耗我们很大的计算资源。每天处理的量从 240P 到 4K 等不同清晰度、超 50 余种格式,包含 AVC、HEVC、MPEG等多种编码格式。

而在 UGC 方面,我们需要快速将创作者的内容呈现给用户,给创造者带来收益。这一块目前我们有一部分还是在用腾讯云的点播服务,后期逐步往 Serverless 上面迁移。

主观感兴趣视频编码的研究

下面我分享一下主观感兴趣视频编码的研究,它是基于视觉冗余原理和对编码器引擎深度优化,相对原生 X264、X265 编码软件同等主观画质降低码率 40% 以上。

第一,我们进行前期的预处理,通过分析这个视频动态复杂度、场景、镜头等,自适应匹配到RDO编码曲线最佳性价比码率,从而实现在不降低主观画质的体验上,去降低码率达到 30% 以上。

第二,主观感兴趣的区域编码。图二,是我们人眼聚焦的点在小汽车上面,可以看到一个人开着车的动作,利用人眼视觉感兴趣区域关注特点,通过芒果自研基于 AI 的主观感兴趣区域预测模型,指导编码器在不同区域的编码质量权重分配,同等主观体验降低码率15%以上。

第三,视频编码图像增强技术,自主研发的系列编码图像优化技术,在不增加码率前提下,达到超越源片画质的体验提升。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

我们在前面看到的是编码的算法研究,而在庞大的音视频处理平台的版本迭代过程中,我们还有很多的研究。

芒果音视频转码平台产品迭代

从2015年起开始第一代,基于 Hadoop 的 MapReduce 计算实现,它处理量比较少,随着业务的快速发展,后期我们发现该架构扩展比较困难。

第二代,是基于mesos的分布式资源管理框架,这个时候我们的业务已经有所增加,日处理量得到提升,尤其是 2016 年芒果提出独播的战略,音视频内容需要快速生产上线,在此基础上实现了视频分段转码。

第三代,是在2019年的时候,由于引进AI技术和我们图像优化技术,引入这些方法后,因此采用K8S来实现资源的调度,自研调度及工作流编排。而到今年因受到疫情的影响,我们视频的量增长的非常快速,尤其是在UGC,超过以前十倍以上的量,引入了Serverless的后,快速的实现了集群的扩容,快速去提供我们所需要的计算资源。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

Serverless 的价值

第一个场景,我们为什么要去用这个Serverless,在此之前,前面的几位大咖已经分享过。从下图我们可以看到,从左到右云端计算的发展,云计算一直在进步的。

左边是我们早期是物理机托管,到云主机到容器的出现,到现在Serverless的出现,已经得到非常的发展。

早期的物理机和云主机和容器的特点,决定了30%的时间是处于低负载的情况。而芒果早期视频的转码,大概有上百台服务器,在本地IDC机房。白天资源严重不足,但到凌晨则处于低负载,服务器资源无法合理使用,而如今采用 Serverless 以后,能够保证我们资源得到合理利用。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

Serverless 能够给我们带来哪些价值呢?

  1. 快速部署、弹性伸缩灵活的按量使用,降低业务使用瓶颈。
  2. 按使用场景实现任务的多地域调度能力,根据用户来源去调用每个区域资源合理使用。
  3. 云上备份容灾机制,实现业务的不间断运行。
  4. 在确保性能的基础上省钱省事的目的。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

芒果 Serverless 落地实践

下面介绍下我们在引入 Serverless 以后的落地实践。总体来讲,我们在 Serverless 落地的实践包括以下几个方面:

第一、音视频转码

刚刚做了简单介绍了,我们在云端利用 Serverless 实现音视频转码, 它只需要简单的三步就可以达到:

第一步,创建函数,部署自研编码器资源包、部署转码逻辑。

第二步,配置 COS Bucket 触发器,对源视频实时处理加工;旁路生成日志和监控、支持告警。

第三步,对转码后的视频回传 COS,并分发到自建 CDN 或腾讯 CDN 节点。

它的核心优势主要是在于凭借云函数强大的联动能力,能够将我们视频上传以及视频处理和加工,还有视频提取还有存储场景能够有机结合为一体。

第二、支持灵活处理

能支持自定义转码函数,自身编码器能够快速部署上去,弥补单独服务,云服务的盲点。

第三、平滑迁移

线上 UPGC 内容采用的云厂家的点播服务,编码器处于不可控的状态。而采用 Serverless 后能够平滑迁移我们自己的转码系统,把自研的编码器迁移上去,可自由调节所需参数,达到优化视频质量的目的。

第四、降本增效

这是最大的优点,能够大量降低我们成本,我们在上线以后,计算资源的成本降低了百分之四五十以上

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

我们原有的音视频转码架构,需要自己监控各项指标,比如说 CPU 和内存,还有网络带宽。我们通过触发器,去调动云服务器的安装镜像去接入计算平台,这个有一个比较大的问题,它这里延时比较高。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

第二,我们启动以后,什么时候释放资源也存在很大的问题,造成大量计算资源的浪费。而所以采用 SCF 以后,就可以运用云函数自动扩容的方式去应对大量用户请求,同时腾讯云实现了实时监控,比如说内存、并发,网络带宽。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

芒果业务场景:自研的 DAG 工作引擎支持函数编排

目前我们在使用云函数过程当中,一个比较困难的点,我们编排了十几个函数或者是几十个函数后,发现把函数串联起来的时候,有一点困难。

因此后期我们通过自研的 DAG 工作引擎来实现,它支持我们本地任务调度的同时,去支持SCF的编排,解决了函数之间的联动调用,可以从图片看到,一个视频进来我们要提出它的水印,提取音频,或者是后面要做视频的封装,而不同的封装格式,为了节省这个资源,会将转码出来的文件做不同的转封装输出。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

芒果业务场景:视频魔术手

另外一个业务场景,就是视频魔术手。在使用芒果 TV APP 的时候,用户看到一个精彩片段或者是自己喜欢的明星片段,想把片段分享出去,需要对视频做裁剪。

实现的方案有两个,第一个从客户端去实现,第二个从服务端实现。

我们在调研的过程当中发现,在客户端实现的时候,考虑用户设备的计算资源,还有他可能有一个弱网环境下,导致内容上传出现问题,因此我们从服务端去实现,采用云函数SCF处理来解决。客户端、浏览器或者是 APP 小程序请求生成片段时,利用 SCF 处理后将视频地址返回给用户播放,再分享出去。传统服务端实现需要考虑负载均衡,但是这次我们采用 SCF 后能够动态去扩缩容,成本低,而且用户没有任何请求的时候,不要支付费用任何费用。

我们考虑视频处理的场景非常消耗资源,用户一次请求需要消耗 4 个核心 CPU,64 核传统的服务器,同时能够处理16个用户的请求,如果我们 QPS 达到 100 的时候,需要大量的服务器去支撑,而在采用SCF后,这是目前我们做的收益非常大的一个面。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

最后,我再总结下我们在使用云函数以后的实际感受

  • 高易用性,我们只需要实现业务代码的逻辑,无需关心非功能开发以外的问题,免运维。

  • 稳定性,目前稳定性还是非常高的。但是有一个问题,是实时处理的重试处理。

  • 快迭代,支持版本号,API 流量自由分配,快速实现灰度方案。

  • 快启动能力,每次在一秒钟之内实现,20 秒以内能完成,现在目前能满足我们需求。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

芒果TV 音视频转码团队下一步业务规划

Serverless 的架构下用户不用再去关心运维所需要的资源,我们直接关注业务代码逻辑,按照时间消耗支付费用。随着 Serverless 出现,云函数计算才真正到来了。

考虑到我们未来建设能力,可以将 4K、CPU、AI 能力往上去迁移,目前来说 GPU 在 Serverless 上面未能实现,但未来可期待。其次是我们转码架构升级,未来我们将本地的系统往上面迁移,可以帮助我们把研发效能提升。第三个是降低运维复杂度,优化转码成本。虽然 Serverless 还有不足的地方,需要去完善。但是凭借 Serverless 自身强大的优势,无论是对企业还是开发者来说,它还是具有非常大的吸引力的。

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

相信随着未来技术飞速的发展,Serverless在未来有无限想象的空间。谢谢大家!

Serverless 音视频转码 —— 芒果 TV 落地实践(上)

One More Thing

立即体验腾讯云 Serverless Demo,领取 Serverless 新用户礼包 👉 serverless/start

欢迎访问:Serverless 中文网

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Serverless 音视频转码 —— 芒果 TV 落地实践(下)
在《Serverless音视频转码——芒果TV落地实践(上)》(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fserverlesscloud.cn%2Fbestpractice%2F20210108serverlessmangguo)中,我们回顾了芒果TV吴坚强老
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Serveless 助力新零售 —— 乐凯撒新餐饮服务落地实践
本文整理自乐凯撒黄道泳在Techo大会的分享,文字部分约5100字。!(https://oscimg.oschina.net/oscnet/upf1f0282c831b3eb60bda2fc19b55d7a5839.JPEG)下面,让我们一起回顾下黄老师在Techo大会的精彩演讲内容:大家好!我是黄道泳。非常荣幸收到腾讯云的邀请
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这