·您当前的位置:首页 > 技术教程 > Rtmp技术 >

[FMS]FMS流媒体的优化参数设置

时间:2015-12-30 14:07酷播
对任何使用影音串流的 FlashCom 程式来说,影音串流的品质是极重要的,但调校相关参数却需要非常好的技巧及多次测试

对任何使用影音串流的 FlashCom 程式来说,影音串流的品质是极重要的,但调校相关参数却需要非常好的技巧及多次测试,无意间逛到国外有人已写好一个计算建议值的小程式,应该对参数的决定有很大帮助。

参数的设定可能因以下因素而不同 ( 并非只看这些因素 ):

使用者连线至主机的频宽,是使用 ADSL、一般的区域网路还是无线网路?
有多少人广播串流?愈多人广播串流,影音品质应调得愈低,以控制总流量。
在 相同的频宽下,我们可以提供较低品质但关键影格多的影像 ( fast images ) 或较高品质但关键影格少的影像 ( slow images ),或提供精细品质但更少关键影格的影像 ( high quality )。如果每个使用者都是透过区域网路来连接 FlashCom 主机,那我们就可提供精细品质且关键影格又多的影像 ( high bandwidth )。
影像长宽比,1 / 1 ( portrait )、6 / 5 ( normal )、9 / 5 ( landscape )。
要调整参数我们必需在 client 端的 ActionScript 中使用下列方法:

  1. Camera.setQuality 
  2. Camera.setKeyframeInterval 
  3. Camera.setMode 
  4. Microphone.setRate 
  5. 具体算法: 
  6.  
  7. m_pb.addEventListener("click", _root); 
  8. _root.click = function() { 
  9.   var bwLabel = m_bw.value; 
  10.   var numUsers = m_numUsers.value; 
  11.   var ratio = m_ratio.value; 
  12.   var speed = m_speed.value; 
  13.   trace(bwLabel+", "+numUsers+", "+ratio+", "+speed); 
  14.   //Mic rate 
  15.   var theRate = 0
  16.   var bwDown = 0
  17.   var bwUp = 0
  18.   switch (bwLabel) { 
  19.     case "modem": 
  20.      theRate = 5
  21.      bwDown = 40
  22.      bwUp = 28
  23.      break; 
  24.     case "dsl": 
  25.      theRate = 11
  26.      bwDown = 300
  27.      bwUp = 100
  28.      break; 
  29.     case "lan": 
  30.      theRate = (numUsers < 2) ? 22 : 11; 
  31.      bwDown = 600
  32.      bwUp = 300
  33.      break; 
  34.    } 
  35.   m_setRate_txt.text = "mic.setRate("+theRate+");"; 
  36.   //Video values 
  37.   var FPSsum; 
  38.   var FPSlim; 
  39.   switch (bwLabel) { 
  40.     case "modem": 
  41.      FPSsum = 3
  42.      FPSlim = 2
  43.      break; 
  44.     case "dsl": 
  45.      FPSsum = 24
  46.      FPSlim = 12
  47.      break; 
  48.     case "lan": 
  49.      FPSsum = 50
  50.      FPSlim = 15
  51.      break; 
  52.    } 
  53.   // BWsum is = 2/3 * down 
  54.   var BWsum = (2/3) * bwDown; 
  55.   // BWlim is = up/2 
  56.   // except LAN which is 150 
  57.   var BWlim = bwUp
  58.   if (bwLabel == "lan") 
  59.    BWlim = bwUp/2; 
  60.   // bw is = min(BWlim, BWsum/numUsers); 
  61.   var bw = Math.min(BWlim, BWsum/numUsers)*1024/8; 
  62.   var w; 
  63.   var h; 
  64.   switch (ratio) { 
  65.     default: 
  66.     case "portrait": 
  67.      w = 120
  68.      h = 120
  69.      break; 
  70.     case "normal": 
  71.      w = 140
  72.      h = 104
  73.      break; 
  74.     case "landscape": 
  75.      w = 160
  76.      h = 88
  77.      break; 
  78.    } 
  79.   // fps is = min(FPSlim, FPSsum/numUsers); 
  80.   var fps = Math.min(FPSlim, FPSsum/numUsers); 
  81.   // keyFrameInteval is = max(2*fps, 4) 
  82.   var kfInt = Math.max(2*fps,4); 
  83.   //if (broadband and lan) set to 300 (total up) 
  84.   if ((speed == "high bandwidth")&&(bwLabel == "lan")) 
  85.    bw = bwUp*1024/8; 
  86.   m_setQuality_txt.text = "cam.setQuality("+Math.round(bw)+", 0);"; 
  87.   m_setKeyframeInterval_txt.text = "cam.setKeyframeInterval("+kfInt+");"; 
  88.   switch (speed) { 
  89.     case "slow images": 
  90.      m_setMode_txt.text = "cam.setMode("+w+", "+h+", "+Math.min(1,fps)+");"; 
  91.      break; 
  92.     case "fast images": 
  93.      m_setMode_txt.text = "cam.setMode("+w+", "+h+", "+fps+");"; 
  94.      break; 
  95.     case "high quality": 
  96.      //  w = 2*w 
  97.      //  h = 2*h 
  98.      //  fpsfps = fps/2 
  99.      m_setMode_txt.text = "cam.setMode("+w*2+", "+h*2+", "+fps/2+");"; 
  100.      break; 
  101.     case "high bandwidth": 
  102.      m_setMode_txt.text = "cam.setMode("+w*2+", "+h*2+", "+((bwLabel == "lan") ? fps : fps/2)+");"; 
  103.      break; 
  104.    } 
  105. _root.click(); 

原文地址

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器