2017年我国直播市场营收达到304.5亿元,相比2016年的218.5亿元,同比增长39%。在众多玩家争抢赛道的时候,你是否思考过到底是什么在推动其前行?手机的普及、流量资费的下降、网络环境不断改善……除了这些客观因素之外,直播技术的发展沉淀也是很重要的原因。
发展至今,直播平台中普遍存在着哪些问题?如何从技术层面来解决这些问题?想要入坑直播技术领域的初学者应该做好哪些技术储备……带着疑问,我们采访了SACC 2018视频直播平台的架构设计实践专场出品人、OnVideo联合创始人刘岐。
刘歧,OnVideo联合创始人、ChinaUnix资深版主、FFmpeg Maintainer。2007年开始做图形图像处理,之后接触了云存储开发、云转码系统设计与开发,并从此转战音视频技术领域。先后任职于蓝汛,高升,金山云等公司,目前是创业公司OnVideo的联合创始人,主要负责新技术的调研以及FFmpeg源代码的维护。
直播最怕卡顿?解决卡顿死结要从这12个方面入手
看直播最怕的是什么呀?当然是卡顿了,卡一秒,你就只能无奈得对着满屏幕的“666”和“233333”,完全不知道发生了什么事。为什么直播会发生卡顿呢?难道仅仅是因为网不好吗?对此,刘岐表示导致卡顿的因素有很多,比较典型的是以下12种:
-
图像采集耗时超过预期
-
编码耗时超过预期
-
封装也就是mux耗时超过预期
-
传输发送耗时超过预期
-
网络质量低于预期
-
传输接收耗时超过预期
-
解封装也就是demux耗时超过预期
-
解码耗时超过预期
-
图像render超过预期
-
时间戳异常
-
播放端接收,解封装,解码buffer过小
-
封装不标准
既然已经找到了直播卡顿的因素,接下来就是解决卡顿问题了。“解决直播系统卡顿问题最关键的不是经验,也不是既有技术,而是处理问题的逻辑。” 刘岐这样认为,“首先要排除程序异常,判断时间戳是否异常,接着判断是否网络丢包或者拥塞导致卡顿,然后对采集、编码、封装、发送逐级排查,如果发送端没有问题,接下来就是从接收端的接收、解封装、解码、render逐级排查。”
秒开、延迟、花屏……直播技术的门道可不少
对于用户来说,可能觉得直播平台最直观的痛点就是卡顿,但是站在开发者的角度,想要建立一个好的直播系统,遇到的难题可远不止卡顿,例如秒开问题、累积延迟问题、花屏问题,如果是双向实时直播的话,还会涉及到回声问题、啸叫问题、空音问题等。
秒开已经成为了直播界的标配,我们以秒开为例来一窥直播技术中的门道。想要做到秒开,端到端的每个节点都不能疏忽,推流端的编码参数设置,例如控制帧率、关键帧间隔、帧排列情况等;服务器端对音视频包的控制,时间戳的控制,buffer的控制,GOP的控制,预缓存GOP;播放器显示首画的因素,例如根据buffer阀值显示,根据帧数阀值,关键帧阀值,音视频数据包对齐等。
除了考虑流媒体方面的因素,秒开还要考虑其它方面的因素,如果使用了域名服务,要考虑域名解析耗时(预解析域名,刷新域名热度);如果有调度系统,要考虑调度系统耗时(尽量避免多次调度);同时还要考虑播放器访问到的服务器节点的网络质量。
目前直播平台还没有一个比较通用的技术架构,但受GitHub的影响以及ffmpeg、gstreamer、JavaCV、 OpenGL等技术的发展成熟,只要有一家公司推出了新功能,其它家就能立马跟上,所以从整个行业发展来看,想要获得竞争优势,就必须要有业务创新,而且不能只是快速的“微创新”,“微差异化”,而是要持续创新。
写给初学者,直播技术真的只是看起来门槛低
直播产业三百多亿的市场规模不仅让创业者心动,也深深的吸引着技术人,他们认为直播技术没啥难的,做直播server就是在做直播技术了,但事实真是如此吗?
“直播技术真的只是看起来门槛低,一旦你实际去做了,就会发现其中有各种各样的坑。”刘岐表示,直播要求技术全面,调度系统、日志系统、网络、安全、存储、编解码等相关技术都要信手拈来,尤其是有些系统无法使用SRS/NginxRTMP/BIND9/ELK轻易搭出来,还需要自己去开发的。
坑这么多,如何去填呢?别急,2018年10月17日~19日,由IT168旗下ITPUB企业社区平台主办的第十届中国系统架构师大会(SACC2018)将推出“视频直播平台的架构设计实践”专场。作为该专场的出品人,刘岐也透露:“这次专场涵盖了从整体的架构设计、业务设计到具体的细节优化和某个问题解决,相信每个参会者都能从中有所收获。”
视频直播平台的架构设计实践专场日程如下,快速报名!
抢票入口: http://sacc.it168.com/goupiao.html
大会官网: http://sacc.it168.com
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31137683/viewspace-2212802/,如需转载,请注明出处,否则将追究法律责任。