You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firefox中通过getStats() API获取AudioLevel和Codec值?

在Firefox中获取WebRTC的Codec和AudioLevel统计信息

我懂你现在的困扰——Firefox的WebRTC Stats API和Chrome确实有不少细节差异,尤其是Codec和AudioLevel的获取方式,下面分两部分给你讲清楚怎么搞定:

一、获取AudioLevel(音频电平)

Firefox里的音频电平数据并不在outbound_rtcp这类常规RTP统计项里,而是存放在**media-source类型**的统计对象中(针对本地音频轨道)。你需要遍历统计结果,筛选出类型为media-source且关联目标音频轨道的项,里面的audioLevel字段就是当前的音频电平值(范围0-1)。

二、获取Codec信息

Firefox把Codec信息单独放在**rtp-codec类型**的统计对象里,每个Codec项会包含payloadType、mimeType(比如audio/opus)等关键信息。要关联到具体的流,你需要把rtp-codec的id和inbound-rtp/outbound-rtp项里的codecId对应起来,这样就能知道某个RTP流用的是什么编码。

完整代码示例

替换你原来的循环逻辑,改成这样就能拿到想要的数据:

cs.pc.getStats(cs.pc.getLocalStreams()[0].getAudioTracks()[0], function (results) {
  // 存储Codec信息,方便后续关联到具体流
  const codecsMap = new Map();
  
  for (const key in results) {
    if (!results.hasOwnProperty(key)) continue;
    const statItem = results[key];
    
    // 1. 收集Codec详细信息
    if (statItem.type === 'rtp-codec') {
      codecsMap.set(statItem.id, {
        mimeType: statItem.mimeType,
        payloadType: statItem.payloadType,
        clockRate: statItem.clockRate
      });
      console.log(`找到Codec: ${statItem.mimeType}, 负载类型: ${statItem.payloadType}`);
    }
    
    // 2. 获取本地音频电平
    if (statItem.type === 'media-source' && statItem.kind === 'audio') {
      console.log(`当前本地音频电平: ${statItem.audioLevel}`);
    }
    
    // 3. 关联RTP流与对应的Codec(可选,按需使用)
    if (statItem.type === 'outbound-rtp' && statItem.kind === 'audio') {
      const matchedCodec = codecsMap.get(statItem.codecId);
      if (matchedCodec) {
        console.log(`当前发送的音频流使用Codec: ${matchedCodec.mimeType}`);
      }
    }
    
    // 保留你原来的其他统计项逻辑(比如Jitter、包数等)
    if (statItem.type === 'outbound-rtp') {
      console.log(`Jitter: ${statItem.jitter}, 已发送包数: ${statItem.packetsSent}`);
    }
    if (statItem.type === 'inbound-rtp') {
      console.log(`已接收包数: ${statItem.packetsReceived}`);
    }
  }
});

关键注意点

  • Firefox的Stats类型命名用短横线分隔(比如media-source),而Chrome用驼峰命名(比如mediaSource),这是两者最直观的区别。
  • 若要获取远端音频电平,需要查看remote-inbound-rtp类型项里的audioLevel字段,不过这依赖远端的统计反馈支持。
  • Codec的mimeType会直接显示编码格式,比如audio/opus、audio/PCMU,足够判断当前使用的音频编码。

内容的提问来源于stack exchange,提问作者Cherry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:30:36