由于媒体推流客户端所在地域不同、所接入网络运营商不同、就近接入原则等因素,导致不同的视频推流客户端会推流至不同的流媒体服务器(本文主要针对目前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连接提升流媒体服务器之间流量转发效率的更多相关文章

  1. 原来:HTTP可以复用TCP连接

    问题 线上的一个项目会和微信服务器有API请求(目的是获取用户的微信信息),但会有偶发的报错: 'Connection aborted.', ConnectionResetError(104, 'Co ...

  2. 开源流媒体服务器EasyDarwin支持epoll网络模型,大大提升流媒体服务器网络并发性能

    经过春节前后将近2个月的开发和稳定调试.测试,EasyDarwin开源流媒体服务器终于成功将底层select网络模型修改优化成epoll网络模型,将EasyDarwin流媒体服务器在网络处理的效率上提 ...

  3. EasyDarwin开源流媒体服务器进行RTSP转发过程中将sdp由文件存储改成内存索引

    -本篇由团队成员Fantasy供稿! 原始版本 在Darwin Streaming Server版本中,推送端DoAnnounce的时候后服务器会根据easydarwin.xml中配置的movies_ ...

  4. HTTP的RST包与WinHttp延迟关闭TCP连接

    一.RST包也常见于断开TCP连接  几个月前用wireshark抓HTTP包发现有的网络通信在结束的时候没有使用四次握手,而是直接使用RST包.如: 在TCP协议中RST表示复位,用来异常的关闭连接 ...

  5. 详解TCP连接的“三次握手”与“四次挥手”(上)

    一.TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它 ...

  6. TCP/IP协议--TCP协议概括和TCP连接的建立和终止

    TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...

  7. Java网络编程系列之TCP连接状态

    1.TCP连接状态 LISTEN:Server端打开一个socket进行监听,状态置为LISTEN SYN_SENT:Client端发送SYN请求给Server端,状态由CLOSED变为SYN_SEN ...

  8. TCP连接复用

    转自网络:看到一陌生名词,记录一下 TCP连接复用技术通过将前端多个客户的HTTP请求复用到后端与服务器建立的一个TCP连接上.这种技术能够大大减小服务器的性能负载,减少与服务器之间新建TCP连接所带 ...

  9. 服务器tcp连接timewait过多优化及详细分析

    [背景说明] 在7层负载均衡上,查询网络状态发现timewait太多,于是开始准备优化事宜 整体的拓扑结构,前面是lvs做dr模式的4层负载均衡,后端使用(nginx.or haproxy)做7层负载 ...

随机推荐

  1. mysql 中文字段排序( UTF8按拼音首字母排序)

    select * from tableName CONVERT( FieldName USING gbk ) COLLATE gbk_chinese_ci desc

  2. java装饰模式

    在java的IO中就是运用装饰模式设计的.一层装饰一层 如:DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(n ...

  3. centos-php安装

    初学者自编文档,如有错误,请指出,具体命令就不阐述了,不明白 度娘吧! nginx我是编译安装在服务器上 和其他安装应该会有区别 安装路径路径:/usr/local/ 安装包存放位置:/home/ap ...

  4. Linux_jdk

    先查看下 yum list java* yum install java-1.7.0-openjdk* -y 环境变量应该是会自动配置的 或者手动配置编辑/etc/profile #vi /etc/p ...

  5. MySQL数据库的数据备份和恢复(导入和导出)命令操作语法【转】

    不管是Oracle数据库还是SQL Server数据库,每个数据库都有自己的一套数据备份和恢复的方法,MySQL数据库也不例外.MySQL数据库备份和恢复用到了两个命令,分别是“mysqldump”和 ...

  6. &reg 不需要显示为商标符的做法

    若url中有参数reg,则把&reg 变为 &reg

  7. turn to help

    1 'On The Exact Recovery Condition of Simultaneous Orthogonal Matching Pursuit', JF Determe,J Louvea ...

  8. jQuery(6)——jQuery对表单、表格的操作及更多应用

    jQuery对表单.表格的操作及更多应用 [表单应用] 一个表单有表单标签.表单域及表单按钮三个基本部分. 单行文本框应用:获取和失去焦点改变样式. 也可以用CSS中的伪类选择符来实现,但是IE6并不 ...

  9. HP Autonomy KeyView入门使用&Maven打包流程

    正文:使用自带的KeyView.jar可能报各种各样的错误,比如no manifest,找不到main方法等等,这里需要自己把需要用到的Filter类和KeyView.jar一起打包,并修改manif ...

  10. Sublime Text 2

    常用功能: 安装Package Control:https://sublime.wbond.net/ 多行选择.多行编辑鼠标选中多行,按下 Ctrl+Shift+L (Command+Shift+L) ...