如何实现低延时直播——超低延时直播方案

最近要给一个在海外运营的博彩网站作在线直播,要求超低延时,而且支持手机和PC端直接播放,不安装任何播放插件。java

因为这种业务的特殊性,直播延时必须在500ms之内才能接受,不然经过网络参与的博彩者因为时间差就会吃大亏,为此,我考察了N多种方案进行比较。浏览器

经过考察,目前主流的实现方案主要有如下几种:服务器

1. 使用rtmp流媒体服务器实现直播分发,客户端用hls协议播放;微信

优势:集成方便,支持度高,兼容性好,主流手都支持,是目前直播主流技术。网络

缺点:延时大,通常服务器能够控制切片时长(延时能够控制在10-30秒之间)。并发

结论:没法知足要求。性能

2. 基于HTML5浏览器的MSE扩展技术,采用HTTP协议的FLV直播流进行分发,客户端经过浏览器端的格式转封装进行解码播放,服务器端使用支持HTTP FLV的流媒体服务器。测试

优势:集成方便,兼容性通常,延时能够控制在3秒内。网站

缺点:(主要是部分浏览器不支持mse,),目前IOS平台的内置浏览器不支持,iOS端的微信内也不能播放,延时稍大。google

结论:没法知足要求。

3. 基于WebRTC方式实现直播功能,这方面google已经在大力支持,主流的浏览器也已经支持(Chrome、Firefox、IE十一、Safari、Android移动端),直播端到端延时能够控制在0.5秒之内,网络情况好的时候能够达到0.2秒。

优势:终端兼容性好,延时超低而且可控。

缺点:当前的主流CDN还不支持,须要自建流媒体服务器。

结论:符合要求,是当前最为可行的运营方案。

经过以上方案比较,最终肯定选用第三种方案来实现这个网络博彩的直播应用。

接下来是具体实现方案的选型。

经过实际测试比较发现,第3种方案的主要技术难点在流媒体服务器端的实现上,不一样厂商有不一样的技术实现方式,下面作一比较:

1. 采用Java语言来实现。

这种实现方式,须要在操做系统之上安装一个Java虚拟机,因为java虚拟机的性能实在过低,大大影响了平台的总体性能,因此该方案被否认了。

2. 采用PHP语言来实现。

PHP是一种解释型语言,虽然它比java语言性能更高,可是与编译型语言相比性能仍然有很大差距。所以影响了服务器端的总体性能表现。

3. 采用C++语言来实现。

这种实现方式是全部方案中效率最高的,对比测试后发现,它的性能是PHP的十倍,是java的30倍。

所以,最终咱们肯定找一款基于C++语言来实现的流媒体服务器。通过详细比较和测试,发现“串流直播”团队开发的流媒体服务器性能最优,在一样的硬件环境下(Dell R720/E5-2650x2,32GB内存,万兆网卡),串流直播媒体服务器能够支持5000并发,其它媒体服务器最高支持到1000并发。

其次,直播延时的产生不只与服务器和客户端有关,还有编码延时有关。为此,咱们测试了多种直播编码方案,包括:

1. 硬件H.264编码器。

2. 软件编码器,有“串流直播”、“OBS”、“AdobeFMLE”。

3. 使用带有直播功能的IP摄像机。

综合比较下来,“串流直播”这款专业软件编码器最符合使用须要,由于它支持的直播协议最为丰富、编码延时最低、并且能够根据咱们的特殊应用为咱们提供个性化改造,包括调整GOP结构,减小H.264编码中的B帧数量,直播数据加密。

信号采集端,采用HD-SDI接口的高清摄像机+工控主机(内接多路高清采集卡)。