anyuan2002.com - vwin网

查找: 您的方位主页 > 电脑频道 > 编程代码 > 阅览资讯:webrtc音视频颤动缓冲区伪代码

webrtc音视频颤动缓冲区伪代码

2019-04-11 08:22:13 来历:www.anyuan2002.com 【

webrtc jitterbuffer

rtp包几个时刻值: 接纳时刻 ,发送时刻,网络传输时刻,网络推迟时刻(网络排队)
rtp包的接纳时刻 = sendtime + transferTime
rtp包的接纳时刻 = sendtime + transferTime + netdelayTime

颤动缓冲区意图便是为了消除网络推迟对音视频的滑润播映形成的影响,假如没有颤动缓冲区,就可能
播映的视频时快时慢,播映的音频时断时续。

核算颤动的第一步便是核算网络的推迟,第二部依据推迟设置适宜的颤动缓冲区大校

一.webrtc视频颤动缓冲核算伪代码

  FrameBuffer 颤动缓冲区(保存数据,并有推迟预算逻辑)

  //接纳线程处理
  void receivedThread(){
   while(1){
     recv(data);
     FrameBuffer.insertPacket(receiverTime,data);
   }
  }

  void insertPacket(){
   1.按时刻戳进行排序

   2. 更新包的依靠状况,例如p帧依靠于前面的i帧,依靠帧都ok更新continue标志

   3. 保存包接纳时刻等状况
    
  }
  
  -----------------------------------------------------------------------------------------------------
  //解码,烘托线程
  void renderThread(){
  while(1){
   packet=FrameBuffer.nextPacket();
     renderPacket(packet);
  } 
  }

  void* FrameBuffer.nextPacket(){
    1.从现已continue的行列中获取数据
    2.更新renderTime (这首要是进行预算推迟的)
     (1.) 核算renderTime,VCMTiming.RenderTimeMs(timestamp,)
         VCMTiming依据delaytime(解码推迟,烘托推迟,网络推迟归纳预算),核算这个timestamp对应的烘托时刻。

    3.核算网络推迟
     (1.) VCMInterFrameDelay 核算跟上一帧的帧间推迟
     (2.) VCMJitterEstimator 预算网络推迟 
     (3.) 更新 VCMTiming 网络延时值           
    4. 核算解码推迟
     依据最近的多个解码推迟值,核算了一个滑动均匀值
     VCMTiming。setDecoderDealy();
    5. 核算烘托推迟 基本是一个固定值
     VCMTiming.set_render_delay

    6. VCMTiming.MaxWaitingTime 核算当时出队帧的最大等待时刻,假如烘托时刻现已过了则丢掉这一条取下一条,不然到时刻后跳出函数 
  }

二.webrtc音频颤动缓冲核算 伪代码
音频首要逻辑在NetEqImpl中

PacketBuffer    颤动缓冲区,只是保存数据没有核算逻辑
DelayManager    核算网络推迟
BufferLevelFilter 核算颤动缓冲区的巨细
网络推迟单位: 包数量,推迟了几个包。音频包打包距离固定的,基本上以20ms为准,包巨细是相同的。

  //接纳线程处理
  void receivedThread(){
   while(1){
     recv(data);
     保存数据 
     PacketBuffer.InsertPacketList(receiverTime,data);
     核算网络推迟
     DelayManager.Update(seqNum,timestamp);
   }
  }

  void DelayManager.Update(){
   1. 核算从行列中拉取出包的时刻开端,到现在的距离
   
   2. 依据包序号,包时刻戳,核算肯定推迟了几个(iat_packets)距离
    正常抵达的包    iat_packets=1
    乱序提早抵达的   iat_packets=0
    推迟抵达的n个距离 iat_packets =n
   3. CalculateTargetLevel更新距离,(核算最近一段时刻的推迟距离概率,推迟峰值,推算出的推迟距离)
  }

  -----------------------------------------------------------------------------------------------------
  //解码,烘托线程
  void renderThread(){
  while(1){
   packet=PacketBuffer.nextPacket();
     /经过颤动缓冲区中数据的巨细,预算颤动缓冲区巨细(推迟距离为单位)
     BufferLevelFilter.Update();
     //比较网络推迟和颤动推迟,更新播映战略 加快,减速,正常
     renderPacket(packet);
  } 
  }


 // buffer_size_packets : 当时本地有多少个包还没有播映
 // time_stretched_samples : 加快,减速播映了多少了包(增加量)
 // packet_len_samples : 一个包有多少个采样点
 void BufferLevelFilter.Update(size_t buffer_size_packets, int time_stretched_samples,
         size_t packet_len_samples){
     1. 经过动态的忘记因子(依据网络推迟值核算的),滑动均匀核算推迟
     2. 核算加减速的影响(time_stretched_samples) 
     filtered_current_level_=xxx;
 }
 
 
vwin娱乐场

本文地址:http://www.anyuan2002.com/bcdm/100345.html
Tags: 音视频 颤动 webrtc
修改:vwin网
推行内容
引荐阅览
抢手引荐
引荐文章
关于咱们 | 联络咱们 | 友情链接 | 网站地图 | Sitemap | App | 回来顶部