微云视频转码架构介绍

1. 背景

微云日上传视频数达到140万个,每日播放视频次数达到1000w次,在线播放视频成为强烈的需求。但是在PC WEB、H5的播放体验并不好,原因有两个:

(1)播放组件支持的视频格式少,仅支持MP4、MOV等H.264编码的视频;

(2)部分视频(特别是UGC视频)码率过大,导致播放卡顿。

所以我们决定对微云的视频转码,提供流畅的视频在线播放体验。

2. 转码原理

原视频存放在架平仓库,转码视频时需要先下载视频到本地,再对下载好的视频转码得到新视频,最后再把新视频上传到云端。简单的转码流程如下:

为了能在各个客户端上流畅地播放视频,我们需要把原视频转码成H.264/AAC编码、低码率的MP4视频。视频文件主要由视频流和音频流等信息组成,其中视频流和音频流有着不同的编码格式。转码的过程如下图,先解封视频,分别提取视频流和音频流,把视频流转为H.264格式,把音频流转为AAC格式,然后再封装起来得到新视频。

我们这里选择FFmpeg作为视频转码组件。因为FFmpeg是一个成熟的开源、跨平台组件,支持多种格式的音视频转码,并提供了一套录制、转换以及流化音视频的完整解决方案。

3. 转码架构设计

3.1 哪些视频需要转码?

微云的存量视频达到40P,如果都转码这些视频,显然不太现实,也没有必要,因为存量视频的点击播放率较低,投入产出比太低。所以我们经过分析,发现用户一般是分享视频的场景下,更多的点击播放视频。好钢用在刀刃上,花钱花在跟节眼上,在机器资源有限的情况下,所以我们决定对分享的视频再进行转码。

3.2 转码后的新视频存在哪里?

原视频转码后会产生新视频,新视频的存放应该满足这几个条件:

(1)用户不感知。由于是后台自动转码,所以用户不应该感知到有新视频的存在,否则会引起用户误会,导致用户投诉或新视频被删。

(2)并发上传视频不冲突。由于多个视频在同时转码,所以上传新视频时相当于并发写操作,这里需要做到并发写无冲突。

(3)下载速度稳定。

经过讨论,我们最后选择了腾讯云COS存储系统来存放新视频。因为新视频不能存放在原视频的用户的目录下,否则会用户会感知到;也不能存在公共的FTN账号上,因为FTN底层做了对写排队保护,如果并发上传过多,容易导致队列满而失败。而COS系统满足上面三个条件,支持单目录并发写,不容易冲突。

3.3 下载、转码、上传操作流水线化

前面提到,转码视频时需要先下载视频到本地,再对下载好的视频转码得到新视频,最后再把新视频上传到云端。

举个例子,假如有A、B两个视频需要转码。在同步转码模式下,下载模块下载完原视频A的数据后,转码模块拿到视频A的数据开始转码,这时候下载模块就空闲,直到上传模块把视频上传到COS、结束视频A的完整转码过程,下载模块才会开始下一个转码任务:下载视频B的数据。在整个转码过程中,每个模块都在等待其他两个模块的操作完成而空闲着,这样的转码效率低下,白白浪费了很多时间。

显而易见,这三个模块都是后者依赖前者的输出结果,也就是说,一旦前者输出结果后,后续的模块的操作和前者就再无关系。根据这个特点,我们在每个模块之前加入队列,把下载、转码、上传操作异步化,各个模块之间不再同步等待转码结束,而是在完成本模块的任务后,继续从队列里面取下一个任务。这样就实现了转码的流水线化,极大地提高转码效率。简单流程如下:

这里我们使用Gearman组件来实现队列功能,Gearman是一个强大的分布式任务管理组件。详细介绍可以参见Gearman官网,这里先不展开详细介绍了。

3.4 总体架构

经过前面的推论,我们设计出了视频云播转码的总体架构。如下:

(1)由分享场景触发视频转码,云播逻辑server把待转码视频放到下载队列中,等待转码。

(2)用户播放已转码视频时,从公网直连COS边下边播,实现云播功能。

4. 运营部署

目前云播转码模块已经部署到外网环境,其中使用了40台V8机器来转码视频,目前已hold住业务分享场景的日常转码、云播需求。

5. 未来规划

由于资源有限,我们的转码方案只满足了分享场景的转码需求,并没有完成覆盖业务的所有场景。上述转码方案其实也是属于预转码,并不能保证所有转码过的视频都会被播放。后续我们计划实现实时转码功能,通过用户播放操作触发转码,这样能最大化利用机器资源,做到百分百覆盖云播场景。

原文发布于微信公众号 - IT技术精选文摘(ITHK01)

原文发表时间:2018-06-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PingCAP的专栏

云时代数据库的核心特点

最近几年,随着云计算相关技术的发展,各种不同类型的云层出不穷,服务越来越多不同类型的企业业务,传统企业也渐渐开始探索上云的道路。在云上,作为业务最核心的数据库,...

3050
来自专栏精讲JAVA

通过技术手段 “干掉” 视频APP里讨厌的广告之(腾讯视频)

KS Knowledge Sharing 知识分享 现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享 ...

1978
来自专栏北京马哥教育

20款开发运维必备的顶级工具

开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关。在整个开发生命周期涉及到一大批新旧工具,从规划、编码、测试、发布到监控。本文介绍你应该考...

3676
来自专栏腾讯云数据库(TencentDB)

强大互联网基因,深度揭秘腾讯云新一代企业级HTAP数据库TBase核心概念

腾讯云PostgreSQL-XZ(PGXZ)经过公司内部多年业务的打磨,在2017年改名为TBase后,正式对外推出,目前已在政务、医疗、公安、消防、电信、金融...

55812
来自专栏IT派

什么是 Native、Web App、Hybrid、React Native 和 Weex?

Native、Web App、Hybrid、React Native(后面以RN简称)、Weex 间的异同点,后期同步 小程序 和 PWA。

912
来自专栏数据和云

遇见未来 | PostgreSQL:一匹即将发力的黑马

在2017年的DB-Engine的年度数据库榜单上,PostgreSQL以其超过其他341个受监控数据库管理系统的受欢迎程度居于榜首,被评为年度DBMS。其总体...

4426
来自专栏知晓程序

详细测评!在微信里做问卷调查,哪个小程序更好用?| 晓 PK #6

在微信发放问卷,是一个不错的渠道,毕竟亲朋好友都乐于帮忙,而小程序分享的便利性,让它成为一个收集问卷的优选载体。

1643
来自专栏视频咖

从0到1搭建视频通话系统,我1天就搞定了

最近被老大分配了一个任务,他打开微信视频聊天,发起多人视频,指着功能界面说,“你看我们的产品也是有多人会议的场景,我们也加一个这样的功能,也不用很复杂,就仿照微...

2653
来自专栏黄锦章的专栏

微云视频转码架构介绍

目前云播转码模块已经部署到外网环境,其中使用了 40 台 V8 机器来转码视频,目前已 hold 住业务分享场景的日常转码、云播需求。

1.2K1
来自专栏Bug生活2048

.net core项目实战之回顾总结

项目需求其实很简单,类似于一个简单的审批+简单的任务管理系统,但需要同时有PC端和APP端。

1291

扫码关注云+社区