webrtc 代码学习(三十二) video RTT 作用笔记

本文详细探讨了WebRTC中video RTT的下发过程及其在多个组件中的作用,包括如何通过CallStatsObserver传递给VideoReceiveStream、FrameBuffer、VCMJitterEstimator等进行相关计算。RTT数据主要来源于SR和RR包,用于调整jitter buffer、NACK模块及视频解码等,确保视频传输质量和同步。
摘要由CSDN通过智能技术生成

video RTT 作用笔记
作者:LanPZzzz

1. RTT 下发 video\call_stats.cc 120,通过线程
void CallStats::Process() {
  RTC_DCHECK_RUN_ON(&process_thread_checker_);
  int64_t now = clock_->TimeInMilliseconds();
  last_process_time_ = now;

  int64_t avg_rtt_ms = avg_rtt_ms_;
  RemoveOldReports(now, &reports_);
  获取
  max_rtt_ms_ = GetMaxRttMs(reports_);
  avg_rtt_ms = GetNewAvgRttMs(reports_, avg_rtt_ms);
  {
    rtc::CritScope lock(&avg_rtt_ms_lock_);
    avg_rtt_ms_ = avg_rtt_ms;
  }

  // If there is a valid rtt, update all observers with the max rtt.
  if (max_rtt_ms_ >= 0) {
    RTC_DCHECK_GE(avg_rtt_ms, 0);
    下发
    for (CallStatsObserver* observer : observers_)
      observer->OnRttUpdate(avg_rtt_ms, max_rtt_ms_);
    // Sum for Histogram of average RTT reported over the entire call.
    sum_avg_rtt_ms_ += avg_rtt_ms;
    ++num_avg_rtt_;
  }
}
2. RTT 下发,作用,发送给各个ObServer 用于各自的计算

for (CallStatsObserver* observer : observers_)
observer->OnRttUpdate(avg_rtt_ms, max_rtt_ms_);

-> OnRttUpdate 下的3个observer
-> VideoReceiveStream::OnRttUpdate (\video\video_receive_stream.cc 360ÿ

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到使用 WebRTC VAD (Voice Activity Detection) 的代码时,你可以参考以下示例: ```python # 导入所需的库 from webrtcvad import Vad import wave # 创建一个 VAD 实例 vad = Vad() # 设置 VAD 的模式(1,2,3) vad.set_mode(2) # 打开音频文件 audio_file = wave.open('audio.wav', 'rb') # 读取音频文件的参数 sample_width = audio_file.getsampwidth() sample_rate = audio_file.getframerate() # 每次处理的音频帧大小(10 毫秒) frame_size = int(sample_rate / 100) # 用于存储检测到的音频活动段的列表 active_segments = [] # 读取并处理音频文件 while True: # 读取一帧音频数据 frame = audio_file.readframes(frame_size) # 如果没有读取到数据,则结束循环 if not frame: break # 将音频数据传递给 VAD 进行活动检测 is_speech = vad.is_speech(frame, sample_rate) # 如果检测到音频活动,则将活动段添加到列表中 if is_speech: active_segments.append(frame) # 关闭音频文件 audio_file.close() # 输出活动段的数量 print(f"Detected {len(active_segments)} active segments") # 处理检测到的活动段... ``` 上述代码中,我们首先导入了必要的库,包括 `webrtcvad` 和 `wave`。然后,我们创建了一个 VAD 实例,并通过 `set_mode` 方法设置 VAD 的模式(1、2 或 3)。接下来,我们打开待处理的音频文件,并读取其参数(采样宽度和采样率)。 我们使用 `readframes` 方法读取每一帧音频数据,并将其传递给 VAD 的 `is_speech` 方法进行活动检测。如果检测到音频活动,则将该活动段添加到 `active_segments` 列表中。 最后,我们关闭音频文件,并可以进一步处理检测到的音频活动段。 请注意,上述代码仅为示例,你可能需要根据实际情况进行适当修改和调整。另外,在使用之前,请确保已安装 `webrtcvad` 库,可以通过以下命令进行安装: ``` pip install webrtcvad ``` 希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值