乐趣区

关于直播:得物直播秒开体验提升

在视频直播中,有几个要害的体验指标,如卡顿率,清晰度,延迟时间,秒开速度等,本文介绍的就是得物直播在秒开体验上做的一些优化措施。

直播和视频秒开有很大不同,难度也更高。比方视频能够预下载对应的视频列表,而直播是动静、实时的流,不是动态的,所以就没方法去 prepare 以及预下载去做缓存。缓存这一大利器是用不了了,那么咱们是如何进步其秒开速度的呢?

统计口径

要做指标优化,首先确定通过数据作为撑持来优化指标,那么就须要客户端埋点,明确统计口径是什么,只有这样埋点数据才是有参考价值的。对于时长的统计那么咱们须要明确的就是开始工夫,完结工夫,其差值就是咱们须要上报的秒开工夫了。

开始工夫:页面被选中时(在 android 中对应 ViewPager 的 onPageSelected)

完结工夫:播放器首帧回调;

秒开工夫:完结工夫 – 开始工夫

直播链路过程剖析

晋升秒开体验,首先要梳理下直播链路:

简略来看,首先是生产端,即主播推流到流媒体服务器,而后流媒体服务器散发到各地的 CDN,用户通过播放器拉流生产,主播端推流 -> 流媒体服务器 -> CDN 边缘节点 -> 终端设备。

咱们能够依据不同的端大抵分为三个局部,推流 局部 流服务局部 拉流局部

这里留神一下,咱们实际上统计的秒开数据只是拉流局部的,推流并不间接影响拉流端的优化策略,然而会间接影响秒开数据,比方同等条件下,推 H264 还是 H265 必定 H265 的秒开更好一些,所以为了说分明一整个直播的链路,这里将推流端做的一些影响秒开优化和设置也一并提了一下。

拉流端优化

httpDNS IP 直联

播放器拉流能够大抵分为如下流程:

DNS 解析 -> CDN 节点建设连贯 -> 收到 GOP 包 -> 解码第一帧 -> 渲染第一帧

其中耗时最长的就是 DNS 解析的缓解,因而要升高首屏工夫,必须先升高 DNS 解析工夫。

传统的 DNS 解析的过程很简略,业界统称 localDNS 计划,APP 向所在网络运营商的 DNS Server 发动域名解析的申请,而运营商 DNS Server 会向 CDN 的 GSLB 零碎发动递归查问,GSLB 通过经营 DNS Server 所属 IP 地址判断查问来自于哪个运营商和地理位置,而后返回若干适合的 CDN 边缘节点 IP 给它。

HttpDNS 应用 HTTP 协定进行域名解析,代替现有基于 UDP 的 DNS 协定,域名解析申请间接发送到阿里云的 HttpDNS 服务器,从而绕过运营商的 Local DNS,可能防止 Local DNS 造成的域名劫持问题和调度不精准问题。

其原理其实比 localDNS 还要简略,就是 APP 通过 HTTP 协定间接调用 CDN 提供的 httpsDNS API,获取一组适合的边缘节点 IP。因为两头少了一条链路,所以这部分的耗时大抵能够 省却几十毫秒。通过节点优选后的 IP 咱们要留神避免大量用户都汇集在大量节点,导致节点负载不平衡

上下滑多播放器逻辑革新

上下滑是咱们直播间切换的一个比拟重要的形式,咱们能够通过一些解决,让上下滑的秒开更快一些。

认真看下这个视频会发现,当咱们滑动直播间的时候下一个直播间的视频画面曾经显示进去了,并且松手后判断如果没有来到以后直播间,也不会从新加载以后直播间的数据。

从用户的视觉来看,在滑动到下个直播间的霎时就看到下个直播间的画面了,这实际上是充分利用了用户从开始滑动到手指来到屏幕的这段时间去拉流。

外围逻辑就是多个播放器,以后直播间一个,高低各保留一个,当用户滑动直播间卡片时,就能够依据 position 和以后直播的 position 去判断咱们是上滑还是下滑,让对应的直播间 Fragment 去执行播放器的 start 即可。

从数据上能够看出,通过这一层优化之后,上下滑秒开率曾经十分高了,并且 65%+ 的数据做到了 0 s 开。

UI 模块懒加载

直播间的 UI 布局比较复杂,那咱们可不可以让布局不一次性全副加载进来,渐进式的去加载呢?

简略来说,渐进式加载就是一部分一部分加载,以后帧加载实现之后,再去加载下一帧。

这样设计的益处是能够减缓同一时刻,加载 View 带来的压力。这样咱们就能够先加载外围局部的 View,再逐渐去加载其余 View。比方在咱们直播间就能够先加载咱们的视频控件,而后再顺次加载其余的布局控件。察看抖音直播的实现也是这样渐进式加载的,视频先进去,而后才是交互的 UI。

目前咱们直播间的 Fragment 除了外围的父布局以及播放器控件间接通过 xml 加载,其余的都通过 ViewStub 机制进行渐进式加载。

因为秒开的工夫是从页面 UI 加载实现之后开始算的,所以这个优化的数据没有反映到秒开数据上,但从观感上的确优化了秒开工夫。

收益: UI 布局首帧加载工夫晋升 90+%

自研播放器首帧优化

直播对播放器体验要求比拟高,直播播放的整体框架是,cdn 建连、媒体文件下载、文件解析、音视频解码、音视频渲染,而后从整体播放链路下来优化首帧的秒开,整个链路上能够优化比拟多的是,文件解析之前的这 3 个环节。秒开从实现策略上来讲,能够从两个维度思考,能够称为缓冲配置和缓冲治理。

缓冲配置,尽量保障直播在失常播放的时候,尽可能去优化链路上的起播。

缓冲治理,尽量保障直播在播放的时候,能够跟进到以后直播点。

在 cdn 建连的过程中,自研播放器增加了反对 IP 直连的逻辑,能够通过给播放器设置已知服务器域名的模式,在外部间接通过 IP 直连 CDN 服务器;

在媒体文件下载的过程中,自研播放器调整了起播的 buffer,不会额定设置起播的条件,只保障有足够时长的视频被解析。

在文件解析层面,当播放器大略有大量的数据下下来的时候,才开始去起播。

通过版本迭代测试,批改了播放器各个环节的外部 buffer、缓冲量的大小、追帧策略,失去较为理想的秒开成果。目前和三方播放器放弃持平状态。

推流端设置和优化

推流协定抉择

目前咱们应用的 RTMP 推流HTTP-FLV 拉流。

RTMP 协定为流媒体而设计,在推流中用的比拟多,同时大多 CDN 厂商反对 RTMP 协定。

HTTP-FLV 应用相似 RTMP 流式的 HTTP 长连贯,由特定流媒体服务器散发,兼顾两者的长处。以及能够复用现有 HTTP 散发资源的流式协定。它的实时性和 RTMP 相等,与 RTMP 相比又省去了局部协定交互工夫,首屏工夫更短,可拓展的性能也更多。HLS 作为苹果提出的直播协定,在 iOS 端占据了不可撼动的位置,Android 端也同时提供相应的反对,然而咱们作为实时互动直播,这个延时是不可承受的,所以不思考。

动态码率

推流端能够本人抉择不同的画质进行推流,同时会依据网络情况动静设置码率和分辨率,所以秒开数据就要上报码率、分辨率的参数去比照剖析,比方去看 720P 的秒开率,1080P 的秒开率。

画质 视频 分辨率 H.264 转码 码率 H.265 转码 码率 (比 H.264 降落 30%)
晦涩(360P) 640*360 400Kbps 280Kbps
标清(480P) 854*480 600Kbps 420Kbps
高清(720P) 1280*720 1000Kbps 700Kbps
超清(1080P) 1920*1080 2000Kbps 1400Kbps
2K 2560*1440 7000Kbps 4900Kbps
4K 3840*2160 8000Kbps 5600Kbps

H265

H.265 旨在在无限带宽下传输更高质量的网络视频,仅需 H.264 的一半带宽即可播放雷同品质的视频。 比起 H.264/AVC,H.265/HEVC 提供了更多不同的工具来降低码率,以编码单位来说,H.264 中每个宏块 (macroblock/MB) 大小都是固定的 16×16 像素,而 H.265 的编码单位能够抉择从

最小的 8 ×8 到最大的 64×64。同时,H.265 的帧内预测模式反对 33 种方向(H.264 只反对 8 种),并且提供了更好的静止弥补解决和矢量预测办法。

品质比拟测试表明,在雷同的图象品质下,相比于 H.264,通过 H.265 编码的视频大小将缩小大概 39-44%。在码率缩小 51-74% 的状况下,H.265 编码视频的品质还能与 H.264 编码视频近似甚至更好,其本质上说是比预期的信噪比(PSNR) 要好。

和动态码率一样,咱们将拉流是 H264 还是 H265 作为埋点参数上报,而后比照同码率分辨率下 H264 H265 的秒开比。

流媒体服务器优化

缓存 GOP

除了客户端业务侧的优化外,咱们还能够从流媒体服务器侧进行优化。

直播流中的图像帧分为:I 帧、P 帧、B 帧,其中只有 I 帧是能不依赖其余帧独立实现解码的,这就意味着当播放器接管到 I 帧它能马上渲染进去,而接管到 P 帧、B 帧则须要期待依赖的帧而不能立刻实现解码和渲染,这个期间就是「黑屏」了。

所以,在服务器端能够通过 缓存 GOP(在 H.264 中,GOP 是关闭的,是以 I 帧结尾的一组图像帧序列),保障播放端在接入直播时能先获取到 I 帧马上渲染出画面来,从而优化首屏加载的体验。

这是流媒体服务器的根底性能,所以理论并不需要咱们做什么。

混合云(进行中)

混合云介绍:混合云交融了私有云和公有云,是近年来云计算的次要模式和倒退方向。咱们曾经晓得公有云次要是面向企业用户,出于平安思考,企业更违心将数据寄存在公有云中,然而同时又心愿能够取得私有云的计算资源,在这种状况下混合云被越来越多的采纳,它将私有云和公有云进行混合和匹配,以获得最佳的成果,这种个性化的解决方案,达到了既省钱又平安的目标。

因为不同的云服务平台 CDN 散布不一,比方阿里云可能杭州的 CDN 节点比拟多,速度较快,七牛可能上海的 CDN 节点比拟多(只是比方哈),速度较快,咱们便能够整合多家云服务平台,评测出用户以后最快的通道,从而进步用户连贯的速度。同时不光是速度的晋升,也是多云多活架构、容灾备份业务的落地。目前咱们在对接的平台有阿里云,网宿,金山,七牛,华为等。

优化收益

得物直播在历经一个 Q 的治理后,整体秒开率由 60% 左右达到 85%+:

瞻望

  • QUIC(Quick UDP Internet Connection)是谷歌公司研发的基于 UDP 协定的下一代高质量传输协定,自 2018 年开始,IETF 将 QUIC 协定确定为 HTTP/3.0 网络协议标准进行推广,QUIC 协定绝对于 TCP 协定,更适宜弱网络和高丢包场景下的数据传输。
  • 窄带高清

    在雷同品质下,场景静止迟缓的视频比场景静止激烈的视频,所需码率少很多,另外在高码率的时候,码率减少对视频品质的晋升比拟少,因而只有找到适合码率,那么视频低码率下的品质和高码率下的品质是相差无几的,因而咱们须要对视频进行内容复杂度剖析,获取场景信息,获得视频空间域的复杂度和工夫域的复杂度,而后取得视频序列最终的复杂度,最终确定视频编码场景,这就是场景划分的意义所在。

参考资料:

http://www.52im.net/thread-10…

http://www.52im.net/thread-20…

文 / 子辰

关注得物技术,做最潮技术人!

退出移动版