作为直播传输的第一步,推流调度对于直播链路的影响非常大。本篇文章将针对这个话题,从传输的角度,讲一讲网易云信直播是如何做好推流调度的。
推荐阅读
直播推流是什么
首先,直播推流,即主播将自己的本地客户端采集编码后的视频数据“推”出去。推流会涉及到两个问题:视频推到哪里去了以及观众从哪里将流拉到播放端观看。
主播推流是推到了直播接流服务器,由接流服务器负责分发到更高一层的传输层去将视频流推往全球的观众处。直播接流服务器是视频流从客户端出发后的第一站,也是对传输质量影响最大的一站。直播上行调度处理的问题就是给推流客户端选取一个合适的接流服务器。
直播接流服务器的调度和部署
直播接流服务器的调度和部署大有讲究:
首先,国内由于网络运营商的复杂性,存在众多运营商,小运营商借大运营网络等各种问题。对直播上行调度来说,第一步的挑战就是需要识别出客户具体的地域和网络类型。这一步通常是通过一个网络IP库来处理。虽然网络上存在着各种各样的IP网络库,但准确性并无法保证。网易云信基于20年的互联网经验,积累了大量的IP信息,拥有自己的IP库,相对于网络上通用的IP库能更精准地识别出各地区及运营商问题。
其次,则是调度本身了,即按客户的来源,分配给推流端对应的接流服务器。最常见的系统,是基于DNS的调度。网易云信当然也支持这种调度方式。即给定一个域名,通过网易的DNS权威服务器解析,按照相应的规则,结合客户的运营商和地域信息,分配对应运营商和相近地域的接流服务器给推流客户端。比如,杭州的用户使用域名xx.live.126.net推流,在不考虑DNS缓存的情况下,它会先走到DNS服务器进行域名解析,网易的DNS权威服务器会最终接到这个解析请求,并按IP库查出的对应地区和运营商,给予一个合适的接流服务器的IP地址,返回给客户端。客户端的推流即可以推到这台接流服务器了。
DNS系统是个通用的解决方案,优点即不需要额外的环节介入,直接基于DNS即可实现调度。但它的缺点也相当突出:DNS系统为性能考虑,做了缓存。如果某台接流服务器由于各种原因宕机不可用了,而客户端还会通过缓存取到这台机器作为接流服务器,这样会导致客户端推流不可用。客户端就需要等到对应的DNS缓存失效后,才能使用业务,而这个缓存的失效时间也很复杂,国内的运营商可能会对DNS缓存做额外的延长,这时直播业务可用性就无法保证了。另一方面,DNS系统看到的“客户IP”并不一定是客户视频流出口的IP,而是本地DNS出口的IP,这可能会导致一些DNS系统的误判。
网易云信如何做好推流调度
网易云信拥有自己的直播调度系统。当用户使用网易云信直播SDK进行直播时,SDK会联系网易云信的调度系统直接获取接流服务器地址。由于网易云信调度系统部署选取了多线BGP,与众多小运营商之间都拉了专线,因此小运营商用户在联系网易云调度系统时,不会走第三方大运营商的出口,而是直接走专线出口,这样可以最大程度上降低调度系统对于用户网络运营商的误判。网易云信调度系统在海外也会有对应的调度节点存在,即在海外,客户端同样可以取到合适的接流服务器地址。
另一方面,网易云信的调度系统与全球各边缘上行接流服务器之间有着紧密的联络,会实时监控各接流服务器的实时CPU、内存、网络等资源使用状况,从而最终给出一个最合理的调度结果。
网易云信的用户,可以通过使用网易视频SDK而跳过上述DNS可能存在的问题,而进行更精确的调度,得到更佳的直播体验。
直播系统的上行调度,很大程度上影响着整个直播的质量。如果上行接流服务器调度的不够好,比如客户端运营商识别错误导致客户端将视频流进行了跨运营商的传输,那么网络就很容易不稳定而产生网顿等现象。网易云信直播服务通过以上各种手段,最大程度保证了调度的准确性。
想要获取更多产品干货、技术干货,记得关注网易云信博客。