zoukankan      html  css  js  c++  java
  • 关于直播,所有的技术细节都在这里了(1)《转载》

    本文转载置顶:http://blog.ucloud.cn/archives/694

    感谢作者无私的奉献精神!

    网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调,视频直播被赋予了更多娱乐和社交的属性,人们享受随时随地进行直播和观看,主播不满足于单向的直播,观众则更渴望互动,直播的打开时间和延迟变成了影响产品功能发展重要指标。那么,问题来了: 如何实现低延迟、秒开的直播?

    先来看看视频直播的5个关键的流程:录制->编码->网络传输->解码->播放,每个环节对于直播的延迟都会产生不同程度的影响。这里重点分析移动设备的情况。受限于技术的成熟度、硬件环境等,我们针对移动场景简单总结出直播延迟优化的4个点:网络、协议、编解码、移动终端,并将分四期来一一解密UCloud直播云实现低延迟、秒开的技术细节。

    本文主要讲述UCloud直播云实现接入网络优化的技术细节。

    1)全局负载均衡-就近接入

    实现就近接入的技术比较广为人知,就是CDN即Content Delivery Network (内容分发网络)。CDN包含两大核心技术:负载均衡和分发网络,随着10多年的演进,对负载均衡和分发的实现方式已多种多样,分发网络的构建策略通常是经过日积月累的总结出一套最合适的分发路由,并且也不是一成不变,需时刻关注调整,动态运营。这里重点介绍下CDN的负载均衡技术。

    负载均衡是如何实现让用户就进访问的呢?比较普遍的实现方式:通过用户使用的DNS服务器来判断客户端所在的网络位置,从而返回对应的服务IP。如下图示例:

    广东电信用户IP:1.1.1.1 需要看一个直播http://www.ucloud.cn/helloworld.flv ,实现就近访问的过程是:

    1>用户向配置的DNS服务器1.1.1.0(通常是运营商指定,也称local DNS,后面简称Ldns)发起www.ucloud.cn 的查询;

    2> Ldns 上没有该域名的记录,则往顶级即Root NS上发起查询;

    3>Root NS返回告知Ldns该域名的权威解析记录在UCloud NS上;

    4>Ldns 向UCloud NS发起查询;

    5>UCloud NS 向UCloud GSLB服务发起查询,GSLB发现 Ldns1.1.1.0是属于广东电信;

    6>返回广东电信的就近节节点IP1.1.1.2;

    7>返回1.1.1.2给Ldns;

    8>返回给用户1.1.1.2,用户到1.1.1.2上去获取直播内容。

    链路很长,但是每个Ldns上都会对查询过的域名做合理的缓存,下一个广东电信的用户再来查询的时候就可以直接返回1.1.1.2。架构并不复杂,关键点是如何知道Ldns是位于广东电信,这就涉及一个IP地址库。有开源地址库,也有商业地址库,可以按需求采购即可,一般一年1万左右。这里不难看出来,调度的准确度是完全依赖用户配置的Ldns,而这些Ldns大多数是省级别的,即GLSB只知道用户是广东电信,但是常常分不出来是广东广州电信,还是广东深圳电信。 HTTPDNS就是实现更精准的调度一种方式:

    1>用户1.1.1.1通过HTTP协议直接向UCloud NS请求直播域名www.ucloud.cn

    2>UCloud NS发现用户IP1.1.1.1属于广东深圳电信;

    3>返回广东深圳电信节点1.1.1.11给UCloud NS;

    4>返回给用户。

    HTTPDNS的好处显而易见:一可精准获得用户端的IP,有效避免用户配错Ldns(有时是网络中心配错DNS)的情况,可更精准定位用户所在网络位置。二可避免DNS解析劫持。

    2)BGP中转架构-最短传输路径

    BGP即Border Gateway Protocol (边界网关协议),业内简称BGP。为什么BGP中转架构对直播加速和分发如此重要?不得不提国内复杂的网络状况,较广为人知的是“南电信北联通”的宽带用户分布。那一个简单的问题,电信主播发起了直播,联通的用户想看怎么办呢? 从结构上讲,肯定是有有限个电信联通两个运营商的交汇点,相当于信息桥梁。 这就会带来两个问题:1、路程要绕远,网络延迟高且不稳定;2、高峰期拥堵,导致直播流卡顿。

    BGP的技术原理往简单的说就是允许同一IP在不同网络中广播不同的路由信息,效果就是同一个IP,当电信用户来访问时走电信网内的路由,联通用户来访问时走的联通的路由。所以BGP技术对跨运营商的访问带来了巨大的便利,特别是直播场景。不同于传统的文件缓存场景,一个图片哪怕第一次是跨了遥远的距离从源站获取后,本地网络进行缓存,后面的访问都走本地网络。直播加速是流式的,并且当要做到低延迟的时候,中间的缓存要尽可能少。 BGP相当于给跨网的用户就近搭建了一坐桥梁,不必绕远路,延时和稳定性都大大提高了。

    技术原理部分介绍完了,那么多直播延迟影响有多少改善呢?首先这里的就近,不一定是物理距离近,不考虑瞬时负载情况下,更多是指测速延时最优的机房。在国内一般而言相同的接入运营商(电信、联通、移动)并且地理位置最近的情况网络延迟最优,小于15ms。跨省同运营商的网络延迟25~50ms,跨运营商情况更复杂一些,在50~100ms。总结起来,直播当中每个包的延时可以缩短100ms,由于网络的叠加效果,反射到上层是秒级的延迟缩减。

    以上就是直播云实现接入网络优化的技术细节。公开的直播协议众多,RTMP、HLS、HDL(HTTP-FLV)、RTP,直播平台应该怎样选择合适的协议?请参考《关于直播,所有的技术细节都在这里了(二)》。

    -------------------------

    转载地址:http://blog.ucloud.cn/archives/694

  • 相关阅读:
    【转】sublime text 2中Emmet插件8个常用的技巧
    程序猿崛起3——这一次,我用行动说话
    《Effective Java》学习笔记——积累和激励
    程序猿崛起2——互联网时代下的新潮流和新活法
    【非技术】做好属于自己的作品,然后让世界所有人都记住你
    【非技术】实现理想的第一步就是做自己
    【原创】程序猿崛起
    人生苦短,我用python——当我在玩python的时候我玩些什么
    一个新人如何学习在大型系统中添加新功能和Debug
    一个应届毕业生入职30天后的工作总结——作息
  • 原文地址:https://www.cnblogs.com/wainiwann/p/6080866.html
Copyright © 2011-2022 走看看