`

基于Red 5的桌面共享系统的性能优化-综述篇

阅读更多

项目总体介绍

Red5作为著名的Open Source  的Flash Media Server,自推出以来,收到广大的开发者的关注,但是在它基础上构建成功的项目比较少见,是Red 5本身的问题,还是Adobe指定的规范的问题,如果对此类系统进行优化是一个我们想做商业级产品应用需要考虑的问题。

 

基于Red5的桌面共享系统是部门新开的一个项目,目前完成了一些基本的功能,如桌面共享,远程控制等。

可以由下图说明一下整个项目简单的业务逻辑:

 



 1) C++ Client负责把本地的桌面抓成图片(例如300 ms抓一次屏幕),如果是第一屏,则是关键帧,抓出的格式是BMP,并使用ZLib进行压缩,如果是第二屏,则跟第一屏的数据进行对比,最终的数据只是变化的部分。

 

注: 并不是我们不想把无损的BMP传给Red 5,可恨的是,Adobe支持的编码就是这种称之为Screen Video Codec,它可以简单描述成BMP(变化部分)+ZLib

 

 2) C++Client端抓出的ZLib桌面抓屏图片数据,发送给Red 5,Red 5 收到桌面的图片(BMP)boardcast给其它的Flash client端。

 

2.提出问题

 

首先从理论上分析一下这个架构只要的问题在哪里,然后我们才可以有的放矢地进行优化:

1)带宽问题

举个例子说明:

第一帧数据为例:

当用户客户机PC的resolution是:1440*900,BMP抓屏后大约3.7MB(byte)

用ZLib压缩后,大约为400KB(byte)

 

第二帧数据(只是变化部分):

用ZLib压缩后,大约为10KB(byte)

 

显然对于第一帧数据(关键帧),延时是非常严重的:400/48.25=8秒(上传给Red 5)+400/64=6.25 = 14.25秒

另外如果桌面变化特别快(如视频播放),也会造成很重的延时,当然可以接受的是,我们的应用场景应该不适合于这种屏幕变化特别大的情形,我们项目背景应该适合于做presentation等文档共享方面的场景。尽管可以从用户体验方面去提醒用户,但是从这里的数据可以看出,我们的瓶颈确实还是在带宽,还有Flash 的Codec实在是有点落后。

 

注:以网通1M带宽为例:

上行带宽:386Kb=48.25KB

下行带宽:512Kb=64KB

 

注:这篇blog,已经很长时间了,我们在这方面已经有了突破,我们找到了一个非产好的codec,实现了ZLib的高压缩,具体的技术涉及到公司的机密,不能透露望谅解,效果已经非常好了,一个3.7M的一帧数据,压缩后大概200KB了,这个Codec已经可以接受了。

 

2)单Red 5 服务器的架构问题

我们这样的系统,做集群是在所难免的,一方面可以让负载均衡,另外一方面提高系统的可用性,我会单独就这个方面谈谈我们系统的集群设计

 

3)Red 5本身是基于Java的技术,虚拟机停顿(Pause)会引起桌面抓屏数据的延时

Red5是纯Java的开源项目,Java语言的特性之一是通过JVM来管理内存的回收和创建,程序员不用管这些东西,从某种程度上减轻了程序员的工作量,但是同样也会带来问题:如果对于JVM的垃圾回收机制不了解,一旦出现问题,将无法入手。我们知道JVM把内存分配在Heap上,当对象不可到达时,该对象的内容,JVM通过扫描根集的方法,如果发现对象可到达,则做标记,不可到达,则将对象内存释放。注意,我们的JVM的GC Thread(Dameon)启动时,所有的应用程序的工作线程会停止(Pause),而对于我们系统而言,我们需要尽量小的Pause time,以保证最快的响应速度,保证语音和视频数据的实时性,特别是语音的实时性要求很高

 

注:对于Concurrent Mark Sweep垃圾回收器,应用程序线程和GC Thread是并发运行的,但是并不是完全并发的,在Initial Mark和remark阶段,应用程序线程会停顿。

 

4)VOIP的优化

VOIP确实是个很麻烦的问题,VOIP对于实时性要求特别高,上次看到一个标准,语音的延时最好不要超过250ms,这个是非常有挑战性的数字,我们在优化语音方面做了很多工作,例如拆分Video数据包,提高语音数据传输的优先级

 

从目前的结果来看,这四个问题是本次主题需要讨论的地方,下面将就这个方面分四篇文章分别来讲述。

 

 

 

  • 大小: 59.5 KB
分享到:
评论
1 楼 takingoff 2010-12-05  
后面四篇 没有了?

相关推荐

    red5学习资料-------------

    5. **Red5性能优化** - **负载均衡**:通过集群部署和负载均衡技术,提高Red5服务器的处理能力。 - **缓存策略**:合理的缓存策略可以减少服务器压力,提升用户访问速度。 - **日志分析**:监控和分析日志,找出...

    red-server-1.0.10-M9.tar.gz

    在标题“red-server-1.0.10-M9.tar.gz”中,我们可以看出这是一个Red5服务器的版本号为1.0.10-M9的源码压缩包,文件格式为tar.gz,这是Linux系统中常见的归档压缩格式。这个资源特别适合那些需要在Linux环境下搭建流...

    Red_Hat_Enterprise_Linux-5-Installation_Guide-en-US.pdf

    《Red Hat Enterprise Linux-5-Installation Guide-en-US.pdf》是一份详尽的技术文档,旨在指导用户如何安装 Red Hat Enterprise Linux 5(以下简称 RHEL 5)操作系统。这份指南不仅涵盖了安装过程中的基本步骤,还...

    RED二次开发-Node-RED与AI技术结合.docxRED二次开发-Node-RED与HTTP协议集成.docx

    RED二次开发_Node-RED与AI技术结合.docx RED二次开发_Node-RED与HTTP协议集成.docx RED二次开发_Node-RED与MQTT协议集成.docx RED二次开发_Node-RED与Websocket通信.docx RED二次开发_Node-RED与云平台集成.docx RED...

    Red+Hot+Jam(1-154)系列.torrent

    Red+Hot+Jam(1-154)系列.torrent

    Red_Hat_Enterprise_Linux-5-Cluster_Administration-en-US.pdf

    根据给定文件的信息,我们可以深入探讨Red Hat Enterprise Linux 5(RHEL 5)集群管理的知识点,这包括配置、管理以及与之相关的各种技术细节。 ### 集群概念 集群是通过网络连接在一起的一组独立计算机,它们共同...

    14.Node-RED篇1

    Node-RED 是一个基于浏览器的编程工具,用于简化物联网(IoT)和自动化项目中的硬件设备、API和服务之间的交互。它通过可视化方式创建和连接“节点”,形成数据流逻辑,使得非程序员也能轻松实现复杂的数据处理和控制...

    red5-0.9.1.tar.gz

    在0.9.1这个版本中,Red5可能包含了对这些协议的稳定支持和优化,使得用户可以流畅地进行直播、点播和交互式媒体内容的分发。 在安装和部署Red5时,首先需要解压这个.tar.gz文件。在命令行中,可以使用`tar -zxvf ...

    red5-server.zip

    3. **文件共享**:除了实时流,Red5还可以用于文件共享,允许用户上传、下载和播放存储在服务器上的多媒体文件。 4. **互动应用**:Red5支持交互式应用程序,例如聊天室、白板应用等,这使得它能够构建丰富的媒体...

    U盘安装RedFlag-Desktop-11.0红旗Linux系统

    【红旗Linux桌面版U盘安装详解】 在信息技术领域,Linux是一种广泛使用的开源操作系统,而红旗Linux作为中国本土的Linux发行版,受到了不少用户的青睐。本文将详细介绍如何通过U盘安装RedFlag-Desktop-11.0红旗...

    red5 1.0.0 admin-demo oflaDemo-demo

    标题中的"red5 1.0.0 admin-demo oflaDemo-demo"指的是一款基于Red5服务器的管理演示示例,特别提到了oflaDemo组件。Red5是一个开源的流媒体服务器,它支持实时流传输协议(RTMP)、HLS、RTSP等,常用于音频和视频的...

    Red5的Web视频、音频系统开发

    ### Red5的Web视频、音频系统开发 #### 一、Red5服务器简介 Red5是一款开源的媒体服务器,主要用于实时音视频流传输。它支持多种协议(如RTMP、RTSP等)和编解码器(如H.264、AAC等),并且能够很好地与Flash、...

    red5-server-1.0.7-RELEASE.tar.gz

    `red5-server-1.0.7-RELEASE.tar.gz` 是Red5的一个特定版本,采用tarball(.tar.gz)格式进行打包,这是一种在Unix/Linux系统中常见的归档和压缩方式,方便用户下载和安装。 1. **Red5介绍** Red5是由James ...

    red5-server-1.0.8-M13

    1. **性能优化**:开发者可能对服务器的处理速度和资源消耗进行了优化,以提高服务效率,减少延迟,提升用户体验。 2. **稳定性增强**:修复了已知的bug和问题,确保服务的稳定性和可靠性,减少服务中断的可能性。 ...

    Red5-0.9.1

    为了启动Red5服务器,你需要在命令行中定位到`bin`目录,并运行相应的启动脚本(根据操作系统不同,可能是`start-red5.bat`或`red5.sh`)。一旦服务器运行,你就可以通过Web浏览器访问默认的管理控制台,通常是在`...

    red5-server-1.0.10-M4.tar.gz

    Red5 Server是一款开源的、基于Java技术的实时媒体服务器,主要功能是支持视频流和音频流的发布、播放以及录制。版本1.0.10-M4是Red5的一个中期版本,提供了稳定的服务和一系列改进。这个压缩包“red5-server-1.0.10...

    Red5优秀学习资源---oflaDemo

    "Red5优秀学习资源---oflaDemo"是一个针对Red5的学习资料,其中包含了oflaDemo示例应用程序,它是Red5服务器自带的一个经典示例,用于帮助开发者理解和实践Red5的功能。 oflaDemo是Red5中的一个重要组成部分,它是...

    前端开源库-node-red-node-serialport

    《前端开源库Node-Red-Node-Serialport详解》 在现代互联网开发中,前端技术不断发展壮大,而开源库的广泛使用为开发者提供了强大的工具集。本文将详细探讨一款名为"Node-Red-Node-Serialport"的前端开源库,它是...

Global site tag (gtag.js) - Google Analytics