FMS 客户端带宽计算、带宽限制

1. 带宽计算

FMS内置了带宽检测的特性(被称作"native bandwidth
detection"),要进行带宽检测,客户端只要在成功连接到服务器之后调用NetConnection.call("checkBandwidth")。
简单步骤如下:
a.
服务器端允许带宽检测:编辑Application.xml文件 <BandwidthDetection
enabled="true">
b. 实现客户端代码如下:


class NetConnectionClient { 
    public function onBWCheck( rest):Number { 
        return 0; 
    } 
    public function onBWDone( rest):void { 
        var p_bw:Number; 
        if (rest.length > 0) p_bw = rest[0]; 
            // your application should do something here 
            // when the bandwidth check is complete 
            trace("bandwidth = " + p_bw + " Kbps."); 
    }  
}

注:checkBandwidth()
方法属于服务器上的Client类。
以上onBWCheck()和onBWDone()方法在NetConnection.client中定义。

大致原理如下:客户端调用nc.call("checkBandwidth",
null);之后,服务器端向客户端发送一批数据,客户端的onBWCheck()被自动调用,该方法必须返回值(即使是0)用户向服务器端表明已经收到数据。当服务器端完成带宽检测后就会调用onBWDone(),该方法有4个参数,第一个参数是以Kbps为单位的带宽值,第二、三个参数未使用,第四个参数是以毫秒为单位的网络延迟。

2.
带宽限制


a.设置带宽限制
clientObject.setBandwidthLimit(iServerToClient,
iClientToServer)
参数:
iServerToClient,iClientToServer
都是Number类型,单位bps,0表示保持当前设置不变。前者表示服务器端到客户端的带宽,后者表示客户端到服务器端的带宽。setBandwidthLimit不能设置超过Application.xml中设置的带宽限制值。
示例:

application.onConnect = function(newClient, serverToClient, clientToServer)
{
    newClient.setBandwidthLimit(serverToClient, clientToServer);
    application.acceptConnection(newClient);
}

b.获取带宽限制
clientObject.getBandwidthLimit(iDirection)
参数:
iDirection 一个整数指定连接的方向: 0 表示客户端到服务端,1 表示服务端到客户端。
返回: 一个整数表示每秒的字节数
示例:

application.onConnect = function(newClient){
var clientToServer - newClient.getBandwidthLimit(0);
var serverToClient = newClient.getBandwidthLimit(1);
};

参考:

Adobe FMS帮助文档 - Detecting bandwidth 
Calculating bandwidth needs for Flash Media Server
3

时间: 2024-08-11 03:37:41

FMS 客户端带宽计算、带宽限制的相关文章

VoIP常见编码的带宽计算

voip带宽计算VOIP计算方法与所选用的编码方法有关,而与哪个厂家的没有什么关系,公式如下: 带宽=包长度×每秒包数=包长度×(1/打包周期)=(Ethernet头+IP头+UDP头+RTP头+有效载荷)×(1/打包周期)=(208bit +160bit+64bit+96bit +有效载荷)×(1/打包周期)=(528bit+(打包周期(秒)×每秒的比特数))×(1/打包周期)=( 528 / 打包周期 ) + 每秒比特数 根据各种编码方式,得出: G711:20ms打包,带宽为 ( 528/

PCIe数据峰值带宽和有效带宽计算

最近对于PCIe的带宽概念和计算有些模糊,网上查资料大部分都是一个模子出来的,通过下面这个公式计算: 并行总线带宽(MB/s) = 并行总线时钟频率(MHz) * 并行总线位宽(bit/8 = B) * 每时钟传输几组数据(cycle) 特别是后面计算起来不是很容易懂,后来查资料请教后,得出如下理解[个人拙见,欢迎留言质疑]: 首先需要理清一些概念: 1.对于PCIe 而言总线频率如 1.25GHz.2.5GHz,一般是在 100 MHz 的基准频率上,通过PLL达到的 2.峰值带宽 = 总线频

带宽计算

问题: 假如 每天4千万个请求,即 40000000 每个页面大小  10KB 不用考虑峰值,计算平均值即可. 方法一: 每秒请求个数:40000000个/86400s =  462.962962962963个/s 每秒请求个数*10KB  =等于每秒总的数据量  4629KB     =4.6MB 每秒总的数据量  / 128KB/s   等于每秒需要的带宽 ,即: 4629KB /  128KB/s =  36Mbps 1Mbps 带宽下载文件的速度是 128KB/s 方法二: 每秒请求个数

使用Log日志 计算带宽流量峰值

awk 19 一般来说流量带宽是通过snmp协议取网卡流量画图.不过有的时候,为了优化分析或者排错,也会直接去计算服务的访问流量.方法很简单,根据日志中记录的 请求时间(squid记录的是请求响应完成时间,如果要精确,可以再减去响应时间,不过一般squid的文件不至于5分钟内还传不完的……),按每5分钟 一汇总其字节数,然后均摊到300秒上. 计算全日志中最高带宽的命令行如下: cat $ACCESS_LOG|awk -F'[: ]' '{a[$5":"$6]+=$14}END{for

PCM、G.729等常用VoIP编码的实际带宽计算

我觉得通信背景的同学,一提到PCM编码,脑海里都能跳出来一个数值64k. 一.64KB还是64Kb? 64Kb! 二.哪里来的64Kb? CCITT规定抽样率为每秒8000KHz,每抽样值编8位码,所以每秒共采集64Kbit数据. 三.PCMA和PCMU 就是对采集到的64Kbit按照不同的对数压缩特征(A率和μ率)进行编码. 编码后的数据大小仍然是64Kbit(所谓的无损编码?). 四.160字节是怎么来的? 经常听过"每包数据长度是160字节",哪里来的? 上面已经知道,使用PCM

Intel UPI/QPI/CXL带宽计算

Intel QPI和UPI的带宽 一条8GT/s的QPI的单向带宽:8GT/s*16bit/8=16GB/s 一条9.6GT/s的QPI的单向带宽:9.6GT/s*16bit/8=19.2GB/s 一条10.4GT/s的UPI的单向带宽:10.4GT/s*16bit/8=20.8GB/s PCIe的带宽 X16的PCIe Gen3的单向带宽:8GT/s*16bit/8*128/130=16GB/s*128b/130b=15.75GB/s X16的PCIe Gen4的单向带宽:16GT/s*16b

10-高级路由:EIGRP带宽计算、偏移列表增加Metric

一.实验拓扑:二.命令部署:1.计算公式:默认情况下K1和K3设为1,其他K值设为0,公式可以简化为:(Bandwidth?+?Delay)?*?2562.Metric增加1R2(config)#router eigrp 90R2(config-router)#offset-list 1 out 1 f0/0 三.验证:1.计算Metric并对比:R1#show int f0/0MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec R2#show int f1

新浪微博客户端(62)-计算某个文件或文件夹的大小

NSString+Extension.m /** * 计算当前路径字符串指定的文件/文件夹大小 * 文件/文件夹大小,-1代表指定的文件或文件夹路径不存在,以字节为单位 */ - (NSInteger)fileSize { NSFileManager *mgr = [NSFileManager defaultManager]; BOOL dir = NO; BOOL exists = [mgr fileExistsAtPath:self isDirectory:&dir]; if (!exist

新浪微博客户端(23)-计算Cell内控件的frame

DJStatusCellFrame.m #import "DJStatusCellFrame.h" #import "DJStatus.h" #import "DJUser.h" @implementation DJStatusCellFrame - (void)setStatus:(DJStatus *)status { _status = status; DJUser *user = status.user; /* 计算控件Frame */