找回密码
 立即注册
LiveVideoStack 首页 资讯 查看内容
  • QQ空间
  • 回复
  • 收藏

微博短视频服务优化实践(1)

2018-6-27 08:00

本文来自新浪微博视频转码平台技术负责人李成亚在LiveVideoStackCon 2017上的分享,由LiveVideoStack整理成文。李成亚分享了微博短视频如何提升用户体验、降低成本的思路与实践,包括提升短视频发布速度,降低长视频转码时间,通过新的Codec减少带宽成本等。


文 / 李成亚

整理 / LiveVideoStack


概览:


我所在的团队主要负责微博短视频从客户端的转码上传到服务端的转码存储的整条服务链路。今天主要向大家分享我们团队在短视频方面有关视频编解码的实践与探索。



这是一个简单的交互图,表示典型的生产者、消费者和服务方之间的关系,其在平台中关心的重点也会有所不同,在这里需要强调的是,我们今天主要讨论通过技术手段改进优化服务并为消费者带来更加完善的产品体验,关于用户内容的部分并不在此次讨论的范畴。



简单总结了一下平台中每方关切的重点:生产者关心视频的发布速度,也就是用户通过微博客户端发布一段视频,从点击发布按钮开始到其他人能在微博上看到此视频所需要时间的长短;消费者关心视频的观看体验,例如是否卡顿,流量消耗等;服务方关心平台的服务质量。


1. 发布速度



1.1 发送流程与关键性问题


先来看发布速度。首先向大家简单介绍一下用户通过微博客户端发送视频的流程。



客户端是一个iOS或Android平台应用。首先,在客户端我们会对视频做一次压缩,其目的是缩小视频体积;接下来视频经过转码后会被作为一个整体文件单独上传至Web  Server, Web  Server接收后会将视频上传到存储服务,同时在服务端触发转码操作。


此服务端转码的目的是:

(1)视频规范化,统一输出格式,排查视频错误;

(2)视频标记处理,为视频添加水印或标识;

(3)自动截图。接下来服务端转码后也会把此视频文件上传至存储服务,最后提示用户视频发送成功。



我想大家可以很明显地看出来这里有三个关键性问题:

(1)整个视频发布是一个串行的过程。意味着一旦其中任何一个环节出现问题都会导致整个操作的失败;

(2)服务端转码慢。因为曾经的服务端转码是一次性转码,我们为了减小视频压缩的体积使用了一个比较复杂的算法。

(3)长视频发布的速度非常慢。曾经在微博上发布一段最长一小时的视频,其延时可达到好几个小时。


后来我们重写或者重构了每条链路上一些关键节点的服务代码。


1.2 关键技术优化



下面我来介绍一下几个关键的技术优化点。


(1)在客户端我们会将编码与上传合并到同一个流程里,我们在客户端中集成了一个监控编码器的线程以监测编码器完成Gop数据编码的数量;一旦此数量累计到一定阀值后会触发客户端的上传操作,客户端将这部分数据进行单独分片并上传至Web  Server,在Web  Server收到所有分片之后会进行Merge操作,最后上传至存储服务。



(2)我们在转码端集成了一个调度模块,此模块会在发布阶段为视频做一次低复杂度的编码以缩短视频的发布延迟;当完成这次低复杂度转码后调度器会进行一次更高复杂度的转码,此转码完成之后会原播放链接会被替换,整个操作流程对用户而言是无感知的。



(3)对长视频采取分片并进行转码。其大概过程是:首先一个输入的视频会被分离成音频轨和视频轨。



其次依据其GOP,视频轨会被切割成不同的分片,一个分片中可能包含多个GOP。但一个GOP不会被分在不同的分片中,以避免最终视频合并时出现丢帧而导致视频观看卡顿的问题。



最终分片完成后,每一片会被调度器分发到不同的转码器同时进行转码。



此时调度器会开启一个监听线程去监听此视频所有分片的转码任务,一旦调度器监测到最后一个分片已经处理完成便触发一次Merge操作,把视频流的所有分片合并成一个视频,最后再和音频轨合并为一个完整的输出视频。



1.3 总结与成果


上述流程中我们主要做了以下三点优化:

(1)客户端:将编码与上传合并为一个操作。

(2)服务端:分等级转码。在发布阶段只进行简单复杂度的快速编码。

(3)对长视频进行分片并行转码。这里的两个关键点:A:分离音视频。B:按GOP分割视频流。



通过上述这些优化,我们可以提升视频平均发布速度至原来的3倍,提升长视频发布速度至原来的10倍以上,以上就是我们在视频发布阶段主要进行的一些优化。



2. 观看体验



下面我想与大家分享一些关于观看体验的优化,分享之前先为大家介绍一下产品形态与观看场景:



(1)产品形态

这是目前微博上主流的两个视频类产品,左边是一个信息流中的视频,其默认播放尺寸比较小而且基本上都以横屏呈现;右边是微博于2017年初上线的一个新服务“微博故事”,这是一个全屏播放并可添加AR特效的视频产品,以上是微博视频业务的两种产品形态。



(2)观看场景

观看场景是指用户会在什么样的场景下观看微博视频。首先,在网络环境上可能是Wi-Fi或移动网络;在终端设备上可能是手机、Pad或PC;手机又可依据不同的操作系统、屏幕大小、硬件配置等等进行细分。如果我们只做一些发布阶段的工作,用户在不同场景下选择不同产品形态看到的都是同一份文件。这种方案可能在某些特定的场景下能够带来比较好的体验,但是我相信对于大多数场景这种方案的体验应该都不是最好的,甚至很糟糕。


2.1  服务端转码细化



第一项优化是在服务端进行转码的细化,简单地说就是从原来的一个输出变为多个输出,这些输出之间主要的差别大概是以下三个维度:


(1)分辨率从低到高。微博视频服务的分辨率最低是240P,最高目前是720P,在未来还可以更高一些。

(2)编码复杂度从简单编码到复杂编码。

(3)视频格式,例如MP4、HLS等等。

视频, 转码, 新浪微博, 李成亚, 优化

原作者: 李成亚 来自: LiveVideoStack
文章点评
相关文章