最近特别火的几个竞答直播平台被用户诟病技术卡顿频繁、画质略渣、背景声音low 的情况。特别是由于技术故障,奖金作废的问题,更是令参与用户唏嘘不已。
作者:曾小伟。PP云技术副总监,图像编解码、高性能计算出身,辅修AI(NLP方向),10年以上流媒体服务端开发及架构设计经验。
竞答直播再火也避免不了“技术故障”的吐槽
开年最火的无疑当属直播竞答平台的撒币大战。
当很多人感叹,知识终于能改变命运的时候,才上线到现在不过短短十几天,直播竞答APP们却经常bug不断。有用户反映冲顶大会经常直接在第一题便卡住不动了,在后续就是技术故障页面了。芝士超人的视频虽然看起来比较正常,但是题目弹出时还是出现了延时,一度被用户吐槽。
自上线以来,冲顶大会官微经常因为技术故障“跪榴莲”,至今为止,微博的道歉次数比有些用户的复活次数还多。关于如何解决卡顿的技术问题,各大竞答平台目前还未给出官方的解决方案。
为此,PP云的工程狮们特别为了获得奖金后就能“走向人生巅峰、出任CEO、赢取白富美”的我们,连夜抓包分析,整理出了全网首发、史上最详细技术难点解惑以及解决方案,希望跪榴莲的程序猿们可以通过此文向撒币的老板们领鸡腿!
关于直播竞答方案的一些技术简析
想要了解直播竞答技术问题频出的原因,还得先了解一下该程序的架构。通过对冲顶大会竞答APP的使用和抓包分析,可推测该程序使用的技术架构大致如下:
>>>题目的获取和答题
获取题目、答题,都是客户端通过HTTP接口访问APP Server进行的。
获取题目的API抓包如下:
我们从这个抓包请求中,可以看出,请求的URL和Response中都带有UTC时间信息(Unix timestamp),其中的回复消息报文中,带有showTime字段,应该就是该题目在客户端展示的时间了。
这个时间翻译成北京时间就是:
>>>题目和画面的同步
我们知道,直播竞答中的题目显示时间,和主持人画面需要做同步,如果题目展示时间与主持的念出题目的声音画面展示一致,那么体验就会很好。
题目的展示时间(UTC时间),可以选择与某个基准时钟做比较后同步,可以选的方案如下:
- APP所在手机本地时间
- APP从服务端同步的基准时间
- RTMP码流中的时间戳
- IM消息流中带的时间戳
经过对直播竞答的RTMP码流抓包分析后,发现同步的基准时钟应该不会是RTMP,而可能是手机本地时间或APP服务端时间,通过这两种时间做同步,必然会导致题目显示与画面时差较大的情况,这个时间差的大小完全取决于RTMP直播的端到端延时了,中间的任何一个链路不稳定,都会加大延时。
下图是RTMP抓包的时间戳详情:
>>>播放主持人画面
主持人画面的播放已经是相当成熟的技术,经过互动直播行业的洗礼,使用cdn推流和转发已经不存在任何技术门槛。
从下图可以看到直播时的拉流URL等细节:
在此需要注意的是,导播可能使用OBS等推流工具,或是硬件导播方案,实现推流时的转场等操作。
>>>题库的设计与使用
题库通过数据库+缓存存储题目,可能的访问路径是用户客户端通过APP server代理访问题库,或是APP server告知用户客户端题库地址,用户去访问。
这两种方案均可实现,差异不大。
最近直播竞答的故障频发的原因分析
最近的直播竞答中,经常出现的一些问题是:
- 直播卡顿
- 画面花屏
- 题目与画面不同步
- 题目获取失败
- 答题提交失败
针对这些问题,下面分别来针对性分析下可能的原因:
直播卡顿
直播播放卡顿通常是视频CDN到用户终端的链路质量不好造成的,例如用户在弱网环境中,或者服务方采购了劣质CDN服务。如果是CDN服务质量较差,那么弹幕上会有一部分人吐槽卡顿了。
另外一种可能性是主持人的推流链路质量较差造成的卡顿,这种场景下,弹幕上所有的人都会吐槽卡顿。
画面花屏
画面花屏的根本原因是,客户端播放器拿到的码流数据包出了问题。当码流的传输链路中出现丢包或数据损坏时,客户的解码器用这些有问题的数据去解码,轻则出现花屏或卡住,重则(解码容错性做的不好时)APP闪退。
最终分析下来,还是主播端/客户端到CDN网络太差,或是CDN服务质量较差。另外,还有一种概率非常低的可能性,主播端的编码器了出现问题。
题目与画面不同步
前面介绍过题目与画面同步的原理。在直播竞答这个场景中,题目显示与画面内容有较大不同步时,是会非常影响体验。
我们知道对于RTMP直播,经常会出现延迟的累积。大家之前可能有这样的经验,在某些互动直播平台看直播一段时间后,刷新下页面,主播的画面会前进1~2分钟,这就是RTMP累积延迟的表现。
题目画面不同步的原因,无外乎三点:
- 播放的时间不对
- 题目获取的时间不对(比如请求题目)
- APP端展示的逻辑出错
题目获取失败、答题提交失败
这两者都是调用了APP Server的相关接口来取得,当HTTP 请求获取不到正确的数据时,这些接口就会失效,导致用户不能看题或者答题。
具体的原因分为以下几种:
- 获取题目或者答题的接口程序不堪重负,不能服务更多
获取题目的操作,是静态资源获取,可以通过CDN加速,风险稍小,但是答题的请求是不好通过CDN缓存的,APP server需要真实的判断每个用户的答题情况,这时,如果接口程序的处理能力不足,就需要杀程序猿祭天了,再展开来讲,也可能是数据库或者缓存性能的问题,DBA的脖子也需要洗洗干净。
- 服务机房的带宽或其他硬件能力不足
运维人员不能正确预估业务访问对机房硬件和带宽的压力,使得这里成为瓶颈,大量的并发访问会以5xx告终
关于直播竞答解决方案我们是这样做的
高质量自建+商业混合视频CDN保证直播流畅
PP云全国自建的CDN 节点约400 个,约有10Tb 带宽储备,节点几乎覆盖全国所有省市及运营商。PP云集视频云直播、云点播、云上传、云转码、云存储、云统计等功能于一体,多平台全方位支持客户各种视频场景的业务需求。
海量并发直播运维保障经验
PP云凭借PP视频十年媒体技术和服务经验,融合流媒体技术、P2P、CDN 分发、海量存储、安全策略等,可应对像竞答直播这样上百万人的高并发。
独创的画面题目同步方案
基于目前同步方案的缺点,PP云设计出独创的视频流与题目同步显示方案,让竞答参与者得到最好的答题体验。
业内领先的IM方案保证弹幕实时性
对系统CPU资源占用更好,更少卡顿的IM方案,更有利于保证弹幕实时性,降噪处理,抗丢包,在竞答参与时体验更好。
领先的题目获取与答案提交方案
通过加密的HTTPS 通道和IM长连接通道混合使用,传输题目与提交答题内容,保证可用性、安全性、及时性。WebCDN对题目获取进行一定的加速,可减少AppServer的压力。
苏宁旗下子品牌PP云已累计服务客户超过2000个;PP云凭借PPTV 十年媒体技术和服务经验,融合流媒体技术、P2P、CDN 分发、海量存储、安全策略等构建的专注视频领域的一站式SaaS 服务平台。PP云集视频云直播、云点播、云上传、云转码、云存储、云统计等功能于一体,多平台全方位支持客户各种视频场景的业务需求。
http://weixin.qq.com/r/HTkMFALEnV-irUZ392wP (二维码自动识别)
原文链接:https://zhuanlan.zhihu.com/p/33057702
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/16347