背景
目前QQ直播的观众用户众多,在不同网络环境等客观因素下,特别是在移动网络中,观看体验还有很多细分项有待提升。在移动网络、弱网、不稳定网络等情况下,直播播放出首帧的速度非常慢,观看直播过程非常卡顿,不流畅,用户体验差。网络波动,会造成视频帧接收不及时,直播时延增大,造成多人连麦等互动性强的玩法体验大大下降。基于这些现状,开展了QQ直播观看端播放体验优化专项,针对首帧、卡顿等问题,逐个分析解决,提升用户体验。
测试发现在正常网络下,QQ直播和竞品APP的播放体验效果一致。但是在弱网环境下有很大差距,QQ直播播放质量有很大的提升空间。
测试方法:
播放5分钟,统计首帧时长、卡顿次数与卡顿总时长。
优化目标:
提升在弱网下首帧速度、流畅度等指标。
降低播放卡顿率,卡时间占比。
名词解释:
首帧耗时 = 首帧渲染时间戳 - 点击进房时间戳
卡时间占比% = 卡顿时长 / 播放时长
卡顿率% = 卡顿次数 / 播放次数
注:1Mbps网络下测试播放卡顿效果示意图
注:弱网优化前数据,弱网播放QQ893版本的播放性能数据表(2022-08-01)
注:弱网优化后QQ898版本的播放性能数据表(2022-08-26)
使用网络损伤仪设备,搭建了弱网环境,对QQ直播、多款竞品直播APP等产品的首帧、卡顿情况进行测试;
设置弱网环境:1Mbps 延时85ms
操作前开启手机录屏,点击进入直播间,等待直播播放出首帧,在直播间观看5分钟。通过对录屏的视频,进行逐帧分析点击时间点、首帧时间点、卡顿时间点。
测试方法:从大厅页点击进房,测试首帧播放速度,播放5分钟,测试5分钟内视频的卡顿次数与卡顿时间。最后从9组测试数据中求平均得出。
(虽然卡顿次数数倍于QQ直播,但很多播放卡顿时间远小于1s,卡顿感知不强),整体播放体验还是优于QQ直播
经过上述流程分析,我们发现播放卡顿的问题点可能出现在以下环节。
推流端存在多种推流方式,各个推流方式的上行码率不一致,我们配置了统一转码模块,将不同码率的直播流转码为统一码流。
注:红框中标记的“LiveAuth正常返回”,“首次” 两个步骤处理时间超过900ms,正常情况耗时小于100ms
注:回源耗时超过10秒,这个是CDN内核偶现问题导致的异常
注:回源耗时超过1700ms,由于主播数据不稳定导致首帧慢
为排查这类问题,在客户端增加了播放流量上报,每2秒采样一次,30秒上报一次当前周期内的流量开销,协助排查首帧慢的问题。
注:某现网用户访问直播房间的网络采样图,通过上图可以发现网速是逐步攀升上去的,看着有些不太正常。
在ThumbPlayer 收流模块中获取到播放器“当前缓冲大小”,通过计算单位时间内的缓冲增量,可以得到“当前网速”,最终按照一定频率上报到服务器,上报格式如下。
字段 | 含义 |
time | 起始时间戳 |
freq | 频率(实例中2秒采用一个,可配置) |
net_data | 网速数据数组KB/s |
cache_data | 缓存数据数组KB |
cache_duration | 缓存的可播放时长ms |
report_time | 采样30秒个点(可配置) |
经过反复测试验证,在播放器参数和策略方面存在以下差异点
名词解释:
分辨率自适应:不同网络状态下,播放器自动播放对应档位的清晰度,保证直播流畅度。
首缓策略:首次播放时拉取的直播流大小。
二缓策略:出现卡顿时,播放器需要拉取的数据大小,才开始播放。
预加载策略:为加快直播间的首帧速度,提前使用播放器拉取直播流数据,准备首次播放需要的数据。
点击进房时,开始播放当前直播间,会同时启动下一个直播间的预加载,会预加载12秒的视频数据(由播放器的首缓策略决定)。此时会同时拉取两条直播流,每条流的码率都是4Mpbs,导致在开始播放时的带宽要求在8Mbps以上。
上下切房时,开始播放当前直播间,会同时启动上下两个直播间的预加载,上下两个直播间预加载12秒的视频数据(12秒数据由首缓策略决定)。此时同时拉取三条直播流,每条流的码率都是4Mpbs,导致在开始阶段的网络带宽要求是12Mbps以上。
从上图可以看出以下问题:
目前QQ直播的直播流都是H264编码格式,秀场直播间是20FPS帧率,游戏直播间是30FPS帧率。
通过抓网络包等方式,分析视频流的编码信息、帧率、码率等信息。
root过的手机:tcpdump -i wlan0 -w 1.pcap
抓取播放过程的网络包:
找到网络包中的FLV直播流数据,FLV视频流是以“FLV”开头
将数据回包保存为FLV文件,将该文件放至到flvAnalyser中进行解析,即可得到媒体信息
其它直播1和其它直播2,都有H265编码格式。
从对比的媒体数据来看,其它直播1和其它直播2,都使用了H265编码格式,同分辨率下,码率更低。因此QQ直播也可以通过下发H265直播流,来进一步降低直播流的码率。
2. 根据网络状态、判断当前网络是否支持大厅页自动播放,弱网下关闭播放可以提高收发业务信令的速度。
3. 根据网络状态选择对应的清晰度,以及是否支持房间内的预加载。
4. 整体的弱网策略根据Toggle动态下发,根据灰度效果调试出最优的配置参数。
5. 预加载数据过长处理方案,在开始预加载时,启动定时器查询缓存的数据大小,在预加载数据大于4秒(4秒可以配置),暂停下载。等用户播放该直播间时,再恢复下载。
6. CDN回源慢问题监控,对播放器解析连接CDN的IP地址进行上报,开启CDN的异步鉴权功能。对异常CASE实时提醒,实时跟进。
7. 竞品直播都支持H265视频下发预加载,因此QQ直播也进行H265解码验证与测试,灰度测试H265直播流。下发H265的编码视频流,蓝光的码率下降了35%,标清码率下降37.5%。整体码率大幅度下降,在弱网下播放的流畅度更高,同时也节省带宽成本。同时验证了在各个业务场景下的H265解码情况,目前各个场景都是解码正常的。
整体数据对比:
IOS端部分测试数据:
Android端部分测试数据:
作者:fangguozeng
来源:微信公众号:腾讯VATeam
出处:https://mp.weixin.qq.com/s/az3tP8SRMq3pxJ_7FS317A
页面更新:2024-06-15
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号