成都法院庭审直播系统
网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调,视频直播被赋予了更多娱乐和社交的属性。直播系统哪家好?就找成都微三云袁先生(电17708155860 微:Plinwei)
人们享受随时随地进行直播和观看,主播不满足于单向的直播,观众则更渴望互动,直播的打开时间和延迟变成了影响产品功能发展重要指标。那么,问题来了: 如何实现低延迟、秒开的直播?
先来看看视频直播的5个关键的流程:录制->编码->网络传输->解码->播放,每个环节对于直播的延迟都会产生不同程度的影响。这里重点分析移动设备的情况。受限于技术的成熟度、硬件环境等,我们针对移动场景简单总结出直播延迟优化的4个点:网络、协议、编解码、移动终端,并将分四大块来一一解密UCloud直播云实现低延迟、秒开的技术细节。
一、UCloud直播云实现接入网络优化的技术细节:
1)全局负载均衡-就近接入
实现就近接入的技术比较广为人知,就是CDN即Content Delivery Network (内容分发网络)。CDN包含两大核心技术:负载均衡和分发网络,随着10多年的演进,对负载均衡和分发的实现方式已多种多样,分发网络的构建策略通常是经过日积月累的总结出一套合适的分发路由,并且也不是一成不变,需时刻关注调整,动态运营。这里重点介绍下CDN的负载均衡技术。
负载均衡是如何实现让用户就进访问的呢?比较普遍的实现方式:通过用户使用的DNS服务器来判断客户端所在的网络位置,从而返回对应的服务IP。
链路很长,但是每个Ldns上都会对查询过的域名做合理的缓存,下一个广东电信的用户再来查询的时候就可以直接返回1.1.1.2。架构并不复杂,关键点是如何知道Ldns是位于广东电信,这就涉及一个IP地址库。有开源地址库,也有商业地址库,可以按需求采购即可,一般一年1万左右。这里不难看出来,调度的准确度是完全依赖用户配置的Ldns,而这些Ldns大多数是省级别的,即GLSB只知道用户是广东电信,但是常常分不出来是广东广州电信,还是广东深圳电信。 HTTPDNS就是实现更精准的调度一种方式:
1>用户1.1.1.1通过HTTP协议直接向UCloud NS请求直播域名www.u***;
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-F)、RTP,我们来逐一介绍。
RTMP协议:
是Adobe的专利协议,现在大部分国外的CDN已不支持。在国内流行度很高。原因有几个方面:
1、开源软件和开源库的支持稳定完整。如斗鱼主播常用的OBS软件,开源的librtmp库,服务端有nginx-rtmp插件。
2、播放端安装率高。只要浏览器支持FlashPlayer就能非常简易的播放RTMP的直播,协议详解可以Google了解。相对其他协议而言,RTMP协议初次建立连接的时候握手过程过于复杂(底层基于TCP,这里说的是RTMP协议本身的交互),视不同的网络状况会带来给首开带来100ms以上的延迟。基于RTMP的直播一般内容延迟在2~5秒。
HTTP-F协议:
即使用HTTP协议流式的传输媒体内容。相对于RTMP,HTTP更简单和广为人知,而且不担心被Adobe的专利绑架。内容延迟同样可以做到2~5秒,打开速度更快,因为HTTP本身没有复杂的状态交互。所以从延迟角度来看,HTTP-F要优于RTMP。
HLS 协议:
即Http Live Streaming,是由苹果提出基于HTTP的流媒体传输协议。HLS有一个非常大的优点:HTML5可以直接打开播放;这个意味着可以把一个直播链接通过微信等转发分享,不需要安装任何独立的APP,有浏览器即可,所以流行度很高。社交直播APP,HLS可以说是刚需,下来我们分析下其原理 。
基于HLS的直播流URL是一个m3u8的文件,里面包含了近若干个小视频TS(一种视频封装格式,这里就不扩展介绍)文件,如 http://www.u***/helloworld.m3u8 是一个直播留链接,其内容如下:
假设列表里面的包含5个TS文件,每个TS文件包含5秒的视频内容,那么整体的延迟就是25秒。当然可以缩短列表的长度和单个TS文件的大小来降低延迟,来说可以缩减列表长度为1,1秒内容的m3u8文件,但是极易受网络波动影响造成卡顿。
通过公网的验证,目前按同城网络可以做到比较好的效果是5~7秒的延迟,也是综合流畅度和内容延迟的结果。那么HTML5是否可以有更低延迟直接打开的直播流技术呢? 我们在后会探讨这个问题。
RTP协议:
即Real-time Transport Protocol,用于Internet上针对多媒体数据流的一种传输层协议。
实际应用场景下经常需要RTCP(RTP Control Protocol)配合来使用,可以简单理解为RTCP传输交互控制的信令,RTP传输实际的媒体数据。
RTP在视频监控、视频会议、IP电话上有广泛的应用,因为视频会议、IP电话的一个重要的使用体验:内容实时性强。
对比与上述3种或实际是2种协议,RTP和它们有一个重要的区别就是默认是使用UDP协议来传输数据,而RTMP和HTTP是基于TCP协议传输。为什么UDP 能做到如此实时的效果呢?关于TCP和UDP差别的分析文章一搜一大把,这里不在赘述,简单概括:
UDP:单个数据报,不用建立连接,简单,不可靠,会丢包,会乱序;
TCP:流式,需要建立连接,复杂,可靠 ,有序。
实时音视频流的场景不需要可靠保障,因此也不需要有重传的机制,实时的看到图像声音,网络抖动时丢了一些内容,画面模糊和花屏,完全不重要。TCP为了重传会造成延迟与不同步,如某一截内容因为重传,导致1秒以后才到,那么整个对话就延迟了1秒,随着网络抖动,延迟还会增加成2秒、3秒,如果客户端播放是不加以处理将严重影响直播的体验。
总结一下:在直播协议的选择中,如果选择是RTMP或HTTP-F则意味着有2~5秒的内容延迟,但是就打开延迟开,HTTP-F 要优于RTMP。HLS则有5~7秒的内容延迟。选择RTP进行直播则可以做到1秒内的直播延迟。但就目前所了解,各大CDN厂商没有支持基于RTP直播的,所以目前国内主流还是RTMP或HTTP-F。
是否有除了HLS外更低延迟的方案?
HLS的优点点是显而易见的:移动端无需安装APP使用兼容HTML5的浏览器打开即可观看,所有主流的移动端浏览器基本都支持HTML5,在直播的传播和体验上有巨大的优势。
而看起来的缺点:内容延迟高(这里也有很多HLS限制没有提到,比如必须是H264 AAC编码,也可认为是“缺点”之一)。如果能得到解决,那将会是直播技术非常大的一个进步。或者换个说法,有没有更低延迟可直接用链接传播的直播方案?不局限于HLS本身。
对于浏览器直接的视频互动,Google一直在推WebRTC,目前已有不少成型的产品出现,可以浏览器打开即实时对话、直播。
非常遗憾的说,在直至iOS 9.3上的Safari仍然不能支持WebRTC。继续我们的探索,那Websocket支持度如何呢?
除了老而不化的Opera Mini外,所有的浏览器都支持WebSocket。这似乎是个好消息。梳理一下HTML5 WebSocket直播需要解决的问题:
1、后端兼容
2、传输
3、解码播放
对于#1似乎不是特别大问题,对于做过RTMP转HLS、RTP来说是基本功。#2对于浏览器来说使用HTTP来传输是比较好的选项。对于#3 这里推荐一个开源的JS解码项目jsmpeg: https://g***/phoboslab/jsmpeg,里面已有一个用于直播的stream-server.js的NodeJS服务器。
从测试结果看,该项目的代码相对较薄,还没达到工业级的成熟度,需要大规模应用估计需要自填不少坑,有兴趣的同学可以学习研究。
以上就是直播云:直播应用层协议及传输层协议的选择以及对直播体验影响的分析 。关于接入网络优化、内容缓存与传输策略优化、终端优化,请参阅接下来发布的其他部分。[成都微三云袁先生(电17708155860 微:Plinwei)]
人们享受随时随地进行直播和观看,主播不满足于单向的直播,观众则更渴望互动,直播的打开时间和延迟变成了影响产品功能发展重要指标。那么,问题来了: 如何实现低延迟、秒开的直播?
先来看看视频直播的5个关键的流程:录制->编码->网络传输->解码->播放,每个环节对于直播的延迟都会产生不同程度的影响。这里重点分析移动设备的情况。受限于技术的成熟度、硬件环境等,我们针对移动场景简单总结出直播延迟优化的4个点:网络、协议、编解码、移动终端,并将分四大块来一一解密UCloud直播云实现低延迟、秒开的技术细节。
一、UCloud直播云实现接入网络优化的技术细节:
1)全局负载均衡-就近接入
实现就近接入的技术比较广为人知,就是CDN即Content Delivery Network (内容分发网络)。CDN包含两大核心技术:负载均衡和分发网络,随着10多年的演进,对负载均衡和分发的实现方式已多种多样,分发网络的构建策略通常是经过日积月累的总结出一套合适的分发路由,并且也不是一成不变,需时刻关注调整,动态运营。这里重点介绍下CDN的负载均衡技术。
负载均衡是如何实现让用户就进访问的呢?比较普遍的实现方式:通过用户使用的DNS服务器来判断客户端所在的网络位置,从而返回对应的服务IP。
链路很长,但是每个Ldns上都会对查询过的域名做合理的缓存,下一个广东电信的用户再来查询的时候就可以直接返回1.1.1.2。架构并不复杂,关键点是如何知道Ldns是位于广东电信,这就涉及一个IP地址库。有开源地址库,也有商业地址库,可以按需求采购即可,一般一年1万左右。这里不难看出来,调度的准确度是完全依赖用户配置的Ldns,而这些Ldns大多数是省级别的,即GLSB只知道用户是广东电信,但是常常分不出来是广东广州电信,还是广东深圳电信。 HTTPDNS就是实现更精准的调度一种方式:
1>用户1.1.1.1通过HTTP协议直接向UCloud NS请求直播域名www.u***;
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-F)、RTP,我们来逐一介绍。
RTMP协议:
是Adobe的专利协议,现在大部分国外的CDN已不支持。在国内流行度很高。原因有几个方面:
1、开源软件和开源库的支持稳定完整。如斗鱼主播常用的OBS软件,开源的librtmp库,服务端有nginx-rtmp插件。
2、播放端安装率高。只要浏览器支持FlashPlayer就能非常简易的播放RTMP的直播,协议详解可以Google了解。相对其他协议而言,RTMP协议初次建立连接的时候握手过程过于复杂(底层基于TCP,这里说的是RTMP协议本身的交互),视不同的网络状况会带来给首开带来100ms以上的延迟。基于RTMP的直播一般内容延迟在2~5秒。
HTTP-F协议:
即使用HTTP协议流式的传输媒体内容。相对于RTMP,HTTP更简单和广为人知,而且不担心被Adobe的专利绑架。内容延迟同样可以做到2~5秒,打开速度更快,因为HTTP本身没有复杂的状态交互。所以从延迟角度来看,HTTP-F要优于RTMP。
HLS 协议:
即Http Live Streaming,是由苹果提出基于HTTP的流媒体传输协议。HLS有一个非常大的优点:HTML5可以直接打开播放;这个意味着可以把一个直播链接通过微信等转发分享,不需要安装任何独立的APP,有浏览器即可,所以流行度很高。社交直播APP,HLS可以说是刚需,下来我们分析下其原理 。
基于HLS的直播流URL是一个m3u8的文件,里面包含了近若干个小视频TS(一种视频封装格式,这里就不扩展介绍)文件,如 http://www.u***/helloworld.m3u8 是一个直播留链接,其内容如下:
假设列表里面的包含5个TS文件,每个TS文件包含5秒的视频内容,那么整体的延迟就是25秒。当然可以缩短列表的长度和单个TS文件的大小来降低延迟,来说可以缩减列表长度为1,1秒内容的m3u8文件,但是极易受网络波动影响造成卡顿。
通过公网的验证,目前按同城网络可以做到比较好的效果是5~7秒的延迟,也是综合流畅度和内容延迟的结果。那么HTML5是否可以有更低延迟直接打开的直播流技术呢? 我们在后会探讨这个问题。
RTP协议:
即Real-time Transport Protocol,用于Internet上针对多媒体数据流的一种传输层协议。
实际应用场景下经常需要RTCP(RTP Control Protocol)配合来使用,可以简单理解为RTCP传输交互控制的信令,RTP传输实际的媒体数据。
RTP在视频监控、视频会议、IP电话上有广泛的应用,因为视频会议、IP电话的一个重要的使用体验:内容实时性强。
对比与上述3种或实际是2种协议,RTP和它们有一个重要的区别就是默认是使用UDP协议来传输数据,而RTMP和HTTP是基于TCP协议传输。为什么UDP 能做到如此实时的效果呢?关于TCP和UDP差别的分析文章一搜一大把,这里不在赘述,简单概括:
UDP:单个数据报,不用建立连接,简单,不可靠,会丢包,会乱序;
TCP:流式,需要建立连接,复杂,可靠 ,有序。
实时音视频流的场景不需要可靠保障,因此也不需要有重传的机制,实时的看到图像声音,网络抖动时丢了一些内容,画面模糊和花屏,完全不重要。TCP为了重传会造成延迟与不同步,如某一截内容因为重传,导致1秒以后才到,那么整个对话就延迟了1秒,随着网络抖动,延迟还会增加成2秒、3秒,如果客户端播放是不加以处理将严重影响直播的体验。
总结一下:在直播协议的选择中,如果选择是RTMP或HTTP-F则意味着有2~5秒的内容延迟,但是就打开延迟开,HTTP-F 要优于RTMP。HLS则有5~7秒的内容延迟。选择RTP进行直播则可以做到1秒内的直播延迟。但就目前所了解,各大CDN厂商没有支持基于RTP直播的,所以目前国内主流还是RTMP或HTTP-F。
是否有除了HLS外更低延迟的方案?
HLS的优点点是显而易见的:移动端无需安装APP使用兼容HTML5的浏览器打开即可观看,所有主流的移动端浏览器基本都支持HTML5,在直播的传播和体验上有巨大的优势。
而看起来的缺点:内容延迟高(这里也有很多HLS限制没有提到,比如必须是H264 AAC编码,也可认为是“缺点”之一)。如果能得到解决,那将会是直播技术非常大的一个进步。或者换个说法,有没有更低延迟可直接用链接传播的直播方案?不局限于HLS本身。
对于浏览器直接的视频互动,Google一直在推WebRTC,目前已有不少成型的产品出现,可以浏览器打开即实时对话、直播。
非常遗憾的说,在直至iOS 9.3上的Safari仍然不能支持WebRTC。继续我们的探索,那Websocket支持度如何呢?
除了老而不化的Opera Mini外,所有的浏览器都支持WebSocket。这似乎是个好消息。梳理一下HTML5 WebSocket直播需要解决的问题:
1、后端兼容
2、传输
3、解码播放
对于#1似乎不是特别大问题,对于做过RTMP转HLS、RTP来说是基本功。#2对于浏览器来说使用HTTP来传输是比较好的选项。对于#3 这里推荐一个开源的JS解码项目jsmpeg: https://g***/phoboslab/jsmpeg,里面已有一个用于直播的stream-server.js的NodeJS服务器。
从测试结果看,该项目的代码相对较薄,还没达到工业级的成熟度,需要大规模应用估计需要自填不少坑,有兴趣的同学可以学习研究。
以上就是直播云:直播应用层协议及传输层协议的选择以及对直播体验影响的分析 。关于接入网络优化、内容缓存与传输策略优化、终端优化,请参阅接下来发布的其他部分。[成都微三云袁先生(电17708155860 微:Plinwei)]