复用TCP连接提升流媒体服务器之间流量转发效率
由于媒体推流客户端所在地域不同、所接入网络运营商不同、就近接入原则等因素,导致不同的视频推流客户端会推流至不同的流媒体服务器(本文主要针对目前WEB或手机的基于TCP的流媒体服务器),在某流媒体服务器收到媒体拉流客户端的拉流请求时,其本身可能由于不存在该流,导致该流媒体先通过流调度服务器定位到该请求流,然后向有该流的流媒体服务器发出拉流请求,在收到流数据后该流媒体服务器向媒体拉流客户端转发该媒体流,再给合流媒体的分级结构等其它因素,这种基于即时建立TCP的连接的媒体流在大量推流与拉流用户时往往会有很多路媒体流在不同的流媒体服务器之间传输,这样会存在如下缺点:
1 由于每路媒体流就一个TCP连接,而TCP连接的建立需要一定开销且会带来一定时延,在大量媒体流在流媒体服务器之间互相转发时,这个叠加开销会更大了
2 基于TCP连接只传输一路媒体流,不利于按消息的不同保证优先传送 3 在基于分块协议流传输时,音频小包(一个音频帧一个块基于是够了)的封装块与视频帧(特别是1KB至3KB大小的P、B帧)的太多尾块,都达不到MTU的大小,加之考虑到实时性,往往会关闭Nagle算法,这样导致网络传输效率低下、服务器软中断升高。
为克服上述问题,可以这样做: 流媒体服务器启动后通过流调度管理服务器拿到其它所有同级或其上级流媒体的相关网络地扯信息,然后预先建立5个TCP连接,这样互相发起建立连接后,每两台流媒体服务器之间预先建立10个连接(5个主动、5个被动),每个连接可以传输100路左右的媒体流,这样流媒体服务器集群内部的流媒体服务器之间像高速公路一样一个内部静态网络连接结构已经预先建立起来,随时静待汽车经过,同时启动一个单独的低优先级线程监控当前连接数与每个连接承载的媒体流数,若有断开连接或不能满足目前的媒体流数且低于一定阀值,由该线程负责在后台默默建立TCP连接(单TCP连接具体承载的媒体流数在TCP正在建立等特别时机允许超过100,只要不达到最大设定的阀值即可)。 在有媒体流拉流客户端向某流媒体服务器发起播放请求后,该流媒体通过流调度管理服务器拿到所请求媒体流所在的目标流媒体地扯信息后,通过预先建立的TCP连接中的一个TCP连接直接向该目标流媒体服务器发送播放流请求,目标流媒体服务器通过基于块协议的多路复用、合包技术将该媒体流与其它早期选定的媒体流合包后一起发送给该流媒体服务器,该流媒体解包解复用后再转后给相应的媒体流拉流客户端。从媒体流转发端或源端所在的流媒体服务器角度来看,转发过程是这样的:由于是基于单个TCP连接传送多路媒体流,这样相较于传统以输入流连接驱动模式变成了以输出流连接驱动模式了,媒体流处理线程扫描所有的输出流连接,针对其中某个连接查看所有由该连接传送的输入媒体流,首先看是否有控制指令要传输,若有放入发送缓冲区,若无,接着查看是否有音频帧要传送,若有放入发送缓冲区,最后再查看是否有视频帧要传输,若有放入发送缓冲区,且前述几步每当发送缓冲区有新数据时都判断一下是否达到了MTU上限,若达不到继续,若达到立即发送,然后判断下一个输出流连接的处理方式同前面一个一样,如此循环,这样就做到了控制指令消息的传送优先级大于音频传送优先级了,而音频传送优先级又高于视频传送优先级。
预期收益:有效提升流媒体服务器之间传输效率、流量降低10%(主要是头部数据)、提高实时性、保证重要数据优先处理
复用TCP连接提升流媒体服务器之间流量转发效率的更多相关文章
- 原来:HTTP可以复用TCP连接
问题 线上的一个项目会和微信服务器有API请求(目的是获取用户的微信信息),但会有偶发的报错: 'Connection aborted.', ConnectionResetError(104, 'Co ...
- 开源流媒体服务器EasyDarwin支持epoll网络模型,大大提升流媒体服务器网络并发性能
经过春节前后将近2个月的开发和稳定调试.测试,EasyDarwin开源流媒体服务器终于成功将底层select网络模型修改优化成epoll网络模型,将EasyDarwin流媒体服务器在网络处理的效率上提 ...
- EasyDarwin开源流媒体服务器进行RTSP转发过程中将sdp由文件存储改成内存索引
-本篇由团队成员Fantasy供稿! 原始版本 在Darwin Streaming Server版本中,推送端DoAnnounce的时候后服务器会根据easydarwin.xml中配置的movies_ ...
- HTTP的RST包与WinHttp延迟关闭TCP连接
一.RST包也常见于断开TCP连接 几个月前用wireshark抓HTTP包发现有的网络通信在结束的时候没有使用四次握手,而是直接使用RST包.如: 在TCP协议中RST表示复位,用来异常的关闭连接 ...
- 详解TCP连接的“三次握手”与“四次挥手”(上)
一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...
- TCP/IP协议--TCP协议概括和TCP连接的建立和终止
TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...
- Java网络编程系列之TCP连接状态
1.TCP连接状态 LISTEN:Server端打开一个socket进行监听,状态置为LISTEN SYN_SENT:Client端发送SYN请求给Server端,状态由CLOSED变为SYN_SEN ...
- TCP连接复用
转自网络:看到一陌生名词,记录一下 TCP连接复用技术通过将前端多个客户的HTTP请求复用到后端与服务器建立的一个TCP连接上.这种技术能够大大减小服务器的性能负载,减少与服务器之间新建TCP连接所带 ...
- 服务器tcp连接timewait过多优化及详细分析
[背景说明] 在7层负载均衡上,查询网络状态发现timewait太多,于是开始准备优化事宜 整体的拓扑结构,前面是lvs做dr模式的4层负载均衡,后端使用(nginx.or haproxy)做7层负载 ...
随机推荐
- VS2012 此模板尝试加载组件程序集”NuGet.VisualStudio.interop,Version=1.0.0.0 的解决
VS2012 此模板尝试加载组件程序集”NuGet.VisualStudio.interop,Version=1.0.0.0 的解决办法 2014 年 5 月 3 日作者:mingceng 阅读次数: ...
- tomcat解压版安装(摘自网络)
配置Tomcat[解压版] 选择解压版的Tomcat的理由是可以让我们使用多个Tomcat,但是配置上就会出现一些问题,需要我们手动进行更改配置.我的Tomcat版本是:apache-tomcat-6 ...
- nodejs 实现简单的文件上传功能
首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传 ...
- php和node高并发 大数据量怎么处理
有的时候可能因为疏忽忘记注册Service直接就使用了,使用那个Service时会报异常.这种情况项目都是可以编译通过的,是一个不太容易发现的BUG,如果那个Service在测试时没有覆盖到这个BUG ...
- sqlserver 优化相关
http://www.cnblogs.com/studyzy/archive/2008/11/24/1339772.html http://blog.csdn.net/dba_huangzj/arti ...
- C# lesson3
一.局部变量和成员变量 1.程序入口(Main)要调用非静态成员(变量或方法)的话,是需要通过对象去调用的: 2.普通方法里面去调用变量或方法的话可以直接调用 成员变量(全局变量):放在Main方法之 ...
- fopen()函数以"a+"方式打开一个不存在的文件后读写出现问题
问题:在完成课后习题的时候,使用fopen()函数以"a+"方式打开一个不存在的文件时,写入.读取出现错误: //添加用户输入单词后,在单词头加入编号,确保编号跟着前面的开始排序 ...
- hadoop 常用配置项【转】
hadoop 常用配置项[转] core-site.xml name value Description fs.default.name hdfs://hadoopmaster:9000 定义 ...
- 深入分析Java Web开发
Web请求过程 如何发起请求:browser,httpclient http解析:chrome ,cache Dns域名解析:域名缓存 cdn:负载,动态加速,回源 Java I/O I/0类库的基本 ...
- 残酷中蜕变的SEOer
SEO在不断蜕变,今天的自己推翻昨天的自己. 大牛说"SEOer们走的路不同,最终都会殊途同归." 最后都会炼出"SEO的道"最终都会回归到网站基础工程.毕 ...