RTCAudioSourceStats

基线 2023 *
新推出

自 ⁨2023 年 5 月⁩起,此功能可在最新的设备和浏览器版本上使用。此功能可能无法在旧版设备或浏览器上使用。

* 此特性的某些部分可能存在不同级别的支持。

WebRTC API 中的 RTCAudioSourceStats 字典提供了有关附加到一个或多个发送器(RTCRtpSender)的音频轨道(MediaStreamTrack)的统计信息。

可以通过迭代 RTCRtpSender.getStats()RTCPeerConnection.getStats() 返回的 RTCStatsReport 来获取这些统计信息,直到找到一个 typemedia-sourcekindaudio 的报告。

注意: 有关远程源轨道(正在接收的)的音频信息,请参阅 RTCInboundRtpStreamStats

实例属性

audioLevel Experimental Optional

一个数字,表示媒体源的音频级别。

totalAudioEnergy Experimental Optional

一个数字,表示统计对象生命周期内媒体源的总音频能量。

totalSamplesDuration Experimental Optional

一个数字,表示统计对象生命周期内媒体源产生的所有样本的总时长。

通用媒体源属性

以下属性同时存在于 RTCAudioSourceStatsRTCVideoSourceStats

trackIdentifier

一个字符串,包含与音频源关联的 MediaStreamTrackid 值。

kind

一个字符串,指示此对象是否表示视频源或媒体源的统计信息。对于 RTCAudioSourceStats,这始终是 audio

常见实例属性

以下属性是所有统计对象共有的。

id

一个字符串,唯一标识正在监控以生成这组统计信息的对象。

时间戳

一个 DOMHighResTimeStamp 对象,表示此统计信息对象样本的采集时间。

type

一个字符串,值为 "media-source",表示该对象是 RTCAudioSourceStatsRTCVideoSourceStats 的一个实例。

描述

该接口提供了有关附加到一个或多个发送器的音频媒体源的统计信息。这些信息包括当前的音频级别,平均值持续时间很短(取决于实现)。

统计信息还包括在特定时间戳下的累积总能量和总样本时长。这些总和可用于确定统计对象生命周期内的平均音频级别。您可以使用以下公式计算与 audioLevel 相同单位的均方根 (RMS) 值:

totalAudioEnergytotalSamplesDuration\sqrt{\frac{totalAudioEnergy}{totalSamplesDuration}}

您还可以使用累积的总和来计算任意时间段内的平均音频级别。

统计对象的总音频能量是通过将统计对象生命周期内每个样本的能量相加而累积的,而总时长是通过将每个样本的时长相加而累积的。每个样本的能量使用以下公式确定,其中 sample_level 是样本的级别,max_level 是最高强度的可编码值,duration 是样本的时长(秒):

duration×(sample_levelmax_level)2duration \times⁢ \left(\left(\right. \frac{sample{\_}level}{max{\_}level} \left.\right)\right)^{2}

可以使用以下方程计算任意两个不同的 getStats() 调用之间,任意时长的平均音频级别:

totalAudioEnergy2-totalAudioEnergy1totalSamplesDuration2-totalSamplesDuration1\sqrt{\frac{\left(totalAudioEnergy\right)_{2} - \left(totalAudioEnergy\right)_{1}}{\left(totalSamplesDuration\right)_{2} - \left(totalSamplesDuration\right)_{1}}}

示例

此示例展示了如何迭代从 RTCRtpSender.getStats() 返回的统计对象以获取音频源统计信息,然后提取 audioLevel

js
// where sender is an RTCRtpSender
const stats = await sender.getStats();
let audioSourceStats = null;

stats.forEach((report) => {
  if (report.type === "media-source" && report.kind==="audio") {
    audioSourceStats = report;
    break;
  }
});

const audioLevel = audioSourceStats?.audioLevel;

规范

规范
WebRTC 统计 API 的标识符
# dom-rtcaudiosourcestats

浏览器兼容性