“
导语:腾讯音视频实验室直播SDK基于QQ音视频多年在音视频技术领域的积累而搭建,广泛应用于公司内外部产品中,如坐拥大量草根网红的快手,电商类头部应用蘑菇街、聚美优品,金融类头部应用大智慧、富途,以及腾讯旗下的NOW直播、QQ空间直播、全民K歌直播、QQ音乐直播、企鹅FM直播等。
该直播SDK也是腾讯2016年下半年“技术突破奖”-新型多媒体业务全链路解决方案联合项目中重要的技术组成部分。
”
2016年是直播行业充满想象的一年,各类直播软件与平台如雨后春笋般冒了出来。同时伴随着传统直播向移动直播的转变,直播这种成本低廉、部署便捷、互动性高、移动型强的娱乐方式,也迅速地占据了网友大量的碎片上网时间。这不仅诞生了一批全新的、以直播为主业务的平台,同时也为很多垂直行业的APP插上了腾飞的翅膀。 在直播的技术研发上,大公司可以自己组建团队。但中小型公司做直播产品时,还是会遇到不少技术瓶颈,比如:
- 明星粉丝量大,同一时间涌进观看和互动,对服务器的冲击非常大;
- 连麦直播中对延时要求很高,数据量稍大就会影响互动体验;
- 连麦直播中外放状态下的回声问题,也需要长期的技术积累才能很好地解决。
所以,接入一个成熟、稳定、高质量的SDK直播服务方案就成为了中小型直播产品的最优选择。
目前,公司内外部许多平台和产品都采用了腾讯音视频实验室直播SDK。该直播SDK是基于QQ在音视频技术领域的多年积累所搭建的,拥有领先于业界的技术实力与质量保证。同时它也是腾讯2016年下半年“技术突破奖”-新型多媒体业务全链路解决方案联合项目中重要的技术组成部分。
那么,这个直播SDK方案的优势究竟在什么地方?实现了哪些技术创新呢?笔者将推出系列文章逐个来介绍。
我们先来了解下目前业界较为常见的直播音视频技术方案:RTMP/FLV、HLS以及基于RTP/UDP的方案。
从上表来看,似乎不存在一个完美的解决方案可以同时解决延时、抗性、通用性的问题。
鉴于此,腾讯音视频实验室联合腾讯SNG即通平台部一起,提出了一个基于“QQ音视频多人通话”建立的多方案融合的系统。它能够保证主播和连麦互动观众之间的低延时互动——将时延控制在300ms级别、接近于实时通话。同时它实现了一套旁路推流和录制系统,直接通过RTMP/FLV/HLS等格式实现推流,从而满足浏览器播放器和一些流媒体播放器的播放需求。此套方案达到了很好的兼容性。
接下来,我们来盘点一下这个系统在具体技术上的各个创新点。
1
秒开技术
大家可能会看到,市面上某些手机直播APP的打开速度非常快,几乎是一点就开。而某些手机直播APP,点击播放后要等好几秒才能播放。这是怎么回事呢?
这就不得不提到“首屏耗时”这个在直播中非常重要的指标。通俗地说,首屏耗时是从第一次点击播放到人的肉眼能够看到画面所耗费的时间,在技术上指的是播放器解码第一帧渲染显示画面的耗时。而通常我们说的“秒开”,是指点击播放后在一秒内即可看到播放画面,无需等待。
毫无疑问,首屏打开越快,用户的体验越好。
首屏耗时主要由两部分组成,一部分是进房时间,一部分是出画时间。
先看进房时间的优化。在进房时间方面,我们通过一系列的提前信令加载机制将信令尽可能的提前,并且将不能提前的部分与设备启动等耗时操作进行并行处理,同时与业务侧进行一系列的联动,通过这些措施把进房速度优化到最优的水平上。
接下来我们看出画时间的优化。
小科普:
一个视频(Video),其图像部分的数据是一组GOP的集合,而单个GOP则是一组I / P / B帧图像的集合。I帧是内部编码帧(也称为关键帧),P帧是前向预测帧(前向参考帧),B帧是双向内插帧(双向参考帧)。简单地讲,I帧是一个完整的画面,而P帧和B帧记录的是相对于I帧的变化。如果没有I帧,P帧和B帧就无法解码。
由此,我们很容易想到:如果直播服务器支持GOP缓存,那么客户端在和服务器建立连接后可立即拿到数据,这样可以避免要等到下一个I帧到来时才能出画。但是,这个方案的缺点在于拉取的时间较随机,会带来唇音不同步、播放端延时不稳定等多个问题。为此,我们采取了一套双GOP缓存方案。它能够根据拉取时机更加智能地选择拉取哪个GOP的数据。
做完这些,是不是就可以实现一个非常好的秒开体验了呢?
其实不然。
实测中我们发现,虽然首屏耗时在整体上有了明显的降低,但它非常地不稳定,偶尔会出现耗时非常大的情况。对其原因进行排查,我们发现,这主要是由于接通的瞬间产生了大量数据的推送,此时网络的负载会变得非常大,很容易丢失I帧数据,导致出画需要等到下一个GOP。基于此,我们又做了一系列的保障措施,包括推流速度的人为控制与推流数据的QoS保障机制等。
下图是我们与主要竞品在首屏耗时上的一个数据对比:
2
高音质连麦技术
连麦是互动直播中常见的需求,也是腾讯云互动直播方案中的核心竞争力。我们的方案不仅在直播时能够提供业界领先的音质,同时也能提供一系列支持伴奏、自定义音效、变声、自定义输入、耳返能力等,满足直播用户分享听歌、添加伴奏等需求。
在连麦直播的相关技术中,最困难的莫过于回声抵消技术。
回声一直以来都是语音实时处理中的难点。虽然有GOOGLE开源的WebRTC的AECM技术,但其有非常大的局限性。尤其是面对安卓这么复杂的机型环境与ROM实现,在很多场景下该技术都不能达到一个较好的回声效果。此外,尽管iOS的Audiounit自带了回声抵消能力,但系统自带的回声抵消是宽带的AEC,并不支持超宽带的处理——这在实时语音通话中效果还可以接受,但是在直播场景,由于音乐及伴奏较多,我们能够明显感觉到音乐的音质下降。
在高音质回声抵消上,腾讯音视频实验室有着丰厚的技术积累:
1、支持高音质回声抵消,在音乐场景下也不损伤音质,完美还原频带;
2、基于二进制信号谱线对齐法与音频指纹技术对齐法的双重作用,能够达到更好的信号对齐效果;
3、自研的双讲保护算法,在双讲场景中实现更少的剪切,即使两人同时讲话沟通也无障碍。该算法很好地改善了iOS系统对于部分机型剪切严重的体验;
4、基于OPENSLES与JAVA多套采集播放方案的机型适配选择,实现更稳定的采集播放与更低的采集播放延时,对于部分安卓手机也支持耳返的功能。
5、得益于QQ语音通话的海量数据,我们的技术积累了大量的算法参数,能够实现对不同机型的适配方案,适配超过5000款安卓手机。
基于上述技术,腾讯云互动直播方案在各种场景下的音质始终保持着领先优势。
3
领先的视频引擎
在视频编解码方面,业界目前通用的是X264的编码方案,可以实现相对好的性能,同时支持较多的profile。而腾讯音视频实验室多年来在实时视频中针对264有较多的优化,能够实现比X264更好的性能与效果:
1、低延时高画质的视频压缩质量调优(低延时码率控制、帧类型内核编码策略、灵活自适应的best/fast编码模式);
2、配合网络Qos的编码类型调优(适应网络类型的I/GF/SP/P帧组合机制);
3、arm32/64芯片级的内核性能优化,比开源更省CPU;
在硬件编解码方面,首先我们会有一个优选策略:在合适的分辨率和码率的情况下才会打开硬件编解码。其次,基于QQ视频积累的大量机型数据,我们可以在后台适配更合适的安卓机型去打开硬件编解码,规避安卓硬件编解码中的“编码耗时过长”、“编码码率异常”等兼容性问题,在最合适的场景和最符合的机型中去使用编解码。
4
实时质量监控与运营系统
质量监控是衡量一个SDK服务商服务能力的重要环节。大盘质量可分类别监控与个体质量可跟踪能力,是质量监控体系中的两个主要构成部分。大盘质量目前相对标准统一,各家都有提供。而腾讯云互动直播解决方案是基于云端来搭建的,调控策略都放在云端,不必捞取用户log,单例用户质量都可以通过下图中的Monitor监控系统来进行实时排查分析,大大提升了接入用户的使用效率。
本文主要介绍了腾讯音视频实验室在直播SDK方面的技术创新。由于篇幅有限,我们将在下篇系列文章中带来我们的另一个核心技术上的突破——低延时连麦与弱网优化技术,敬请期待!