你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

媒体质量统计信息

为了帮助你了解使用 Azure 通信服务的 VoIP 和视频通话中的媒体质量,我们提供了一项称为“媒体质量统计信息”的功能。 使用它可检查传入和传出呼叫指标的低级别音频、视频和屏幕共享质量指标。

正在进行的通话的媒体质量统计信息

重要

从 SDK 版本 1.20.1 开始,SDK 中的媒体质量统计信息界面进行了更新

媒体质量统计信息是核心 Call API 的扩展功能。 首先需要获取 mediaStatsFeature API 对象:

const mediaStatsFeature = call.feature(Features.MediaStats);

若要接收媒体统计信息数据,可以订阅 sampleReported 事件或 summaryReported 事件。

sampleReported 事件每秒触发一次。 它适合用作 UI 显示或你自己的数据管道的数据源。

summaryReported 事件包含间隔内数据的聚合值,在只需要摘要时非常有用。

如果要控制 summaryReported 事件的间隔,则需要定义 MediaStatsCollectorOptions 类型的 mediaStatsCollectorOptions。 否则,SDK 使用默认值。

const mediaStatsCollectorOptions: SDK.MediaStatsCollectorOptions = {
    aggregationInterval: 10,
    dataPointsPerAggregation: 6
};

const mediaStatsCollector = mediaStatsFeature.createCollector(mediaStatsSubscriptionOptions);

mediaStatsCollector.on('sampleReported', (sample) => {
    console.log('media stats sample', sample);
});

mediaStatsCollector.on('summaryReported', (summary) => {
    console.log('media stats summary', summary);
});

如果不需要使用媒体统计信息收集器,则可以调用 mediaStatsCollectordispose 方法。

mediaStatsCollector.dispose();

在通话结束时,并不需要每次都调用 mediaStatsCollectordispose 方法,因为在通话结束时,收集器会在内部回收。

MediaStatsCollectorOptions

MediaStatsCollectorOptions 是可选的,并且 MediaStatsCollectorOptions 中有两个可选字段。

  • aggregationInterval 是统计信息的聚合间隔(以秒为单位)。 默认值为 10。
  • dataPointsPerAggregation 定义每个聚合事件具有的数据点数。 默认值为 6。

这两个值确定 SDK 发出 summaryReported 事件的频率以及报告中包含的聚合数据点数。

summaryReported 事件每 aggregationInterval * dataPointsPerAggregation 秒引发一次。

例如,如果设置以下值:

  • aggregationInterval = 1
  • dataPointsPerAggregation = 60

summaryReported 事件每 60 秒引发一次,并且每个记录的统计信息都包含 60 个唯一单位。

如果设置以下值:

  • aggregatinInterval = 60
  • dataPointsPerAggregation = 1

summaryReported 事件每 60 秒引发一次,并且每个记录的统计信息都包含 1 个唯一单位。

最佳做法

如果要收集数据进行脱机检查,建议在通话结束后收集数据并将其发送到管道引入。 如果在通话期间传输数据,可能会使用到继续 Azure 通信服务通话所需的 Internet 带宽(尤其是在可用带宽较低时)。

sampleReported 事件或 summaryReported 事件中,媒体统计信息数据不仅仅是简单的键值映射。

下面是 sampleReported 事件报告的事件数据的类型声明。

export interface MediaStatsReportSample {
    audio: {
        send: OutgoingAudioMediaStats<number, string>[];
        receive: IncomingAudioMediaStats<number, string>[];
    };
    video: {
        send: OutgoingVideoMediaStats<number, string>[];
        receive: IncomingVideoMediaStats<number, string>[];
    };
    screenShare: {
        send: OutgoingScreenShareMediaStats<number, string>[];
        receive: IncomingScreenShareMediaStats<number, string>[];
    };
    transports: TransportMediaStats<number>[];
}

事件数据提供通话中每个媒体流的统计信息数据,包括发送和接收方向。

建议使用 console.log 打印事件以观察其布局和值的更改,以便根据使用方案找到显示或处理数据的适当方法。

音频发送指标

指标名称 说明 评论
id 统计信息 ID 用于标识不同事件中的统计信息,尤其是当事件中有多个媒体类型和方向相同的统计信息时。
codecName 编解码器名称 OPUS、G722。
bitrate 音频发送比特率(每秒位数) 常规值在 24 Kbps 范围内(典型值为 36-128 Kbps)。
jitterInMs 数据包抖动(毫秒) 排名越低越好。
packets 已发送的数据包总数。
packetsPerSecond 数据包速率(每秒数据包数)
packetsLost 从远程端报告的丢失数据包总数。
packetsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。
rttInMs 往返时间(毫秒) 排名越低越好。 根据 RTCP 接收方报告计算得出。 建议使用不超过 200 毫秒的往返时间。
audioInputLevel 麦克风的音频音量级别 该值范围为 0 到 65536。 值为 0 表示静音。
transportId 传输 ID 用于关联传输中的统计信息。

音频接收指标

在低于 1.20.1 的 SDK 版本中,jitterBufferDelayInMs 作为 jitterBufferInMs 存在。

指标名称 说明 评论
id 统计信息 ID 用于标识不同事件中的统计信息,尤其是当事件中有多个媒体类型和方向相同的统计信息时。
codecName 编解码器名称 OPUS、G722。
bitrate 音频接收比特率(每秒比特率) 常规值在 24 Kbps 范围内(典型值为 36-128 Kbps)。
jitterInMs 数据包抖动(毫秒) 排名越低越好。
packets 接收的数据包总数。
packetsPerSecond 数据包速率(每秒数据包数)
packetsLost 丢失的数据包总数。
packetsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。
jitterBufferDelayInMs 抖动缓冲区(毫秒) 排名越低越好。 抖动缓冲区用于平滑播放。 此值是样本数据包在抖动缓冲区中停留的时间。
audioOutputLevel 接收流的音频音量级别 该值范围为 0 到 65536。 值为 0 表示静音。
healedRatio 隐藏样本(silentConcealedSamples 除外)与接收的样本总数的比率 仅供参考。
transportId 传输 ID 用于关联传输中的统计信息。

视频发送指标

从 SDK 版本 1.20.1 开始,视频发送指标包括 altLayouts 指标字段,从而更好地表示联播流统计信息。

指标名称 说明 评论
id 统计信息 ID 用于标识不同事件中的统计信息,尤其是当事件中有多个媒体类型和方向相同的统计信息时。
codecName 编解码器名称 H264、VP8、VP9。
bitrate 视频发送比特率(每秒位数)
jitterInMs 数据包抖动(毫秒) 排名越低越好。
packets 已发送的数据包总数。
packetsPerSecond 数据包速率(每秒数据包数)
packetsLost 从远程端报告的丢失数据包总数。
packetsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。
rttInMs 往返时间(毫秒) 排名越低越好。 根据 RTCP 接收方报告计算得出。 建议使用不超过 200 毫秒的往返时间。
frameRateInput 源自视频源的帧速率(每秒帧数)
frameWidthInput 源自视频源的最后一帧的帧宽度(像素)
frameHeightInput 源自视频源的最后一帧的帧高度(像素)
framesEncoded 为 RTP 流成功编码的帧数。
frameRateEncoded 为 RTP 流成功编码的帧速率(每秒帧数)
framesSent 在 RTP 流中发送的帧数
frameRateSent 在 RTP 流中发送的帧速率(每秒帧数)
frameWidthSent 已编码帧的帧宽度(像素)
frameHeightSent 已编码帧的帧高度(像素)
keyFramesEncoded 为 RTP 流成功编码的关键帧数
transportId 传输 ID 用于关联传输中的统计信息。
altLayouts 联播流 altLayouts 包含视与频发送相同的指标

视频接收指标

在低于 1.20.1 的 SDK 版本中,jitterBufferDelayInMs 作为 jitterBufferInMs 存在。

指标名称 说明 评论
id 统计信息 ID 用于标识不同事件中的统计信息,尤其是当事件中有多个媒体类型和方向相同的统计信息时。
codecName 编解码器名称 H264、VP8、VP9。
bitrate 视频接收比特率(每秒比特率)
jitterInMs 数据包抖动(毫秒) 排名越低越好。
packets 接收的数据包总数。
packetsPerSecond 数据包速率(每秒数据包数)
packetsLost 丢失的数据包总数。
packetsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。
rttInMs 往返时间(毫秒) 排名越低越好。 根据 RTCP 发送方报告计算得出。 建议使用不超过 200 毫秒的往返时间。
streamId 流 ID streamId 值对应于 VideoStreamCommon 中的 id。 它可用于匹配发送方。
jitterBufferDelayInMs 抖动缓冲区(毫秒) 排名越低越好。 抖动缓冲区用于平滑播放。 此值是帧数据包在抖动缓冲区中停留的时间。
frameRateDecoded 为 RTP 流正确解码的帧速率(每秒帧数)
frameRateReceived 在 RTP 流中接收的帧速率(每秒帧数)
frameWidthReceived 已解码帧的帧宽度(像素)
frameHeightReceived 已解码帧的帧高度(像素)
longestFreezeDurationInMs 最长冻结持续时间(毫秒)
totalFreezeDurationInMs 合计冻结持续时间(毫秒)
framesReceived 在 RTP 流中接收的帧总数
framesDecoded 为 RTP 流正确解码的帧总数
framesDropped 丢弃的帧总数
keyFramesDecoded 为 RTP 流正确解码的关键帧总数
transportId 传输 ID 用于关联传输中的统计信息。

屏幕共享发送指标

统计信息字段当前与视频发送指标相同

屏幕共享接收指标

统计信息字段当前与视频接收指标相同

传输指标

在高于 ACS Web SDK 1.20.1 的版本中,传输相关的指标被分离出来。

在之前的版本中,rttInMs 在音频、视频和屏幕共享的统计信息中作为 pairRttInMs 存在。

在音频、视频和屏幕共享的接收统计信息中,availableIncomingBitrateavailableBitrate

在音频、视频和屏幕共享的发送统计信息中,availableOutgoingBitrateavailableBitrate

指标名称 说明 评论
id 传输 ID 用于与其他统计信息中的 transportId 相关联
rttInMs 往返时间(毫秒) 该值根据 STUN 连接性检查计算得出。 建议使用不超过 200 毫秒的往返时间。
availableIncomingBitrate 带宽估算(每秒位数) 该值可能不可用,具体取决于 WebRTC 会话中使用的带宽估算算法
availableOutgoingBitrate 带宽估算(每秒位数) 该值可能不可用,具体取决于 WebRTC 会话中使用的带宽估算算法

SDK 版本 1.20.1 (GA) 中的更改内容

我们现在在 1.20.1 (GA) 中支持 MediaStats 功能 API。 与以前的 beta 版本相比,我们还对此 GA 版本中的 API 接口进行了一些细微更改。

在以前的 beta 版本中,pairRttInMsavailableBitrate 包含在音频、视频和屏幕共享统计信息中。 现在,这些指标已划分为传输指标。

我们在音频、视频和屏幕共享统计信息中引入了 packetspacketsLost 指标字段。 这些指标可用于计算两个不同的时间点之间发送或接收的数据包总数。

删除了视频和屏幕共享统计信息中的 frameRateOutput。 可以改用 frameRateDecoded

指标字段 jitterBufferInMs 已重命名为 jitterBufferDelayInMs,以提供更清晰的说明,因为此指标指示数据包停留在抖动缓冲区中的持续时间。

正在进行的通话的媒体质量统计信息

媒体质量统计信息是核心 Call API 的扩展功能。 首先需要获取 MediaStatisticsCallFeature API 对象:

MediaStatisticsCallFeature mediaStatisticsCallFeature = call.feature(Features.MEDIA_STATISTICS);

MediaStatisticsCallFeature 对象具有以下 API 结构:

  • OnReportReceivedListener 事件侦听媒体统计信息的定期报告。
  • getReportIntervalInSeconds 获取媒体统计信息报告生成的间隔(以秒为单位)。 SDK 使用 10 秒作为默认值。
  • updateReportIntervalInSeconds() 更新媒体统计信息报告生成的间隔(以秒为单位)。 SDK 使用 10 秒作为默认值。
  • MediaStatisticsReport 包含传出和传入媒体统计信息的定义,按音频、视频和屏幕共享分类。
    • getOutgoingStatistics():传出媒体的媒体统计信息列表。
      • getAudioStatistics():传出音频的媒体统计信息列表。
      • getVideoStatistics():传出视频的媒体统计信息列表。
      • getScreenShareStatistics():传出屏幕共享的媒体统计信息列表。
      • getDataChannelStatistics():数据通道的媒体统计信息列表。
    • getIncomingStatistics():传入媒体的媒体统计信息列表。
      • getAudioStatistics():传入音频的媒体统计信息列表。
      • getVideoStatistics():传入视频的媒体统计信息列表。
      • getScreenShareStatistics():传入屏幕共享的媒体统计信息列表。
      • getDataChannelStatistics():数据通道的媒体统计信息列表。
    • getLastUpdatedAt():生成报告的日期。

然后,订阅 addOnReportReceivedListener 事件以获取有关当前媒体质量统计信息的常规更新:

mediaStatisticsCallFeature.addOnReportReceivedListener(handleReportReceivedListener);
// Optionally, set the interval for media statistics report generation
mediaStatisticsCallFeature.updateReportIntervalInSeconds(15);

private void handleReportReceivedListener(MediaStatisticssReportEvent args) {
    // Obtain the media statistics report instance
    MediaStatisticsReport report = args.getReport();

    // Obtain the outgoing media statistics for audio
    List<OutgoingAudioStatistics> outgoingAudioStatistics = report.getOutgoingStatistics().getAudioStatistics();

    // Obtain the outgoing media statistics for video
    List<OutgoingVideoStatistics> outgoingVideoStatistics = report.getOutgoingStatistics().getVideoStatistics();

    // Obtain the outgoing media statistics for screen share
    List<OutgoingScreenShareStatistics> outgoingScreenShareStatistics = report.getOutgoingStatistics().getScreenShareStatistics();

    // Obtain the outgoing media statistics for data channel
    List<OutgoingDataChannelStatistics> outgoingDataChannelStatistics = report.getOutgoingStatistics().getDataChannelStatistics();

    // Obtain the incoming media statistics for audio
    List<IncomingAudioStatistics> incomingAudioStatistics = report.getIncomingStatistics().getAudioStatistics();

    // Obtain the incoming media statistics for video
    List<IncomingVideoStatistics> incomingVideoStatistics = report.getIncomingStatistics().getVideoStatistics();

    // Obtain the incoming media statistics for screen share
    List<IncomingScreenShareStatistics> incomingScreenShareStatistics = report.getIncomingStatistics().getScreenShareStatistics();

    // Obtain the incoming media statistics for data channel
    List<IncomingDataChannelStatistics> incomingDataChannelStatistics = report.getIncomingStatistics().getDataChannelStatistics();
}

最佳做法

如果要收集数据进行脱机检查,建议在通话结束后收集数据并将其发送到管道引入。 如果在通话期间传输数据,可能会使用到继续 Azure 通信服务通话所需的 Internet 带宽(尤其是在可用带宽较低时)。

传出音频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 音频发送比特率(每秒位数) 常规值在 24 Kbps 范围内(典型值为 36-128 Kbps)。
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。

传入音频指标

指标名称 说明 评论
CodecName 编解码器名称
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。
PacketsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。

传出视频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 视频发送比特率(每秒位数)
PacketCount 已发送的数据包总数。
FrameRate 在 RTP 流中发送的帧速率(每秒帧数)
FrameWidth 已编码帧的帧宽度(像素)
FrameHeight 已编码帧的帧高度(像素)

传入视频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 视频接收比特率(每秒比特率)
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。
PacketsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。
StreamId 流 ID streamId 值对应于远程参与者视频的 ID。 它可用于匹配发送方。
FrameRate 在 RTP 流中接收的帧速率(每秒帧数)
FrameWidth 已解码帧的帧宽度(像素)
FrameHeight 已解码帧的帧高度(像素)
TotalFreezeDurationInMs 合计冻结持续时间(毫秒)

传出屏幕共享指标

统计信息字段当前与传出视频指标相同

传入屏幕共享指标

统计信息字段当前与传入视频指标相同

传出数据通道指标

指标名称 说明 评论
PacketCount 已发送的数据包总数。

传入数据通道指标

指标名称 说明 评论
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。

正在进行的通话的媒体质量统计信息

媒体质量统计信息是核心 Call API 的扩展功能。 首先需要获取 mediaStatisticsCallFeature API 对象:

var mediaStatisticsCallFeature = self.call.feature(Features.mediaStatistics)

mediaStatisticsCallFeature 对象具有以下 API 结构:

  • didReceiveReport 委托方法侦听媒体统计信息的定期报告。
  • reportIntervalInSeconds 获取媒体统计信息报告生成的间隔(以秒为单位)。 SDK 使用 10 秒作为默认值。
  • updateReportInterval(inSeconds) 更新媒体统计信息报告生成的间隔(以秒为单位)。 SDK 使用 10 秒作为默认值。
  • MediaStatisticsReport 对象包含传出和传入媒体统计信息的定义,按音频、视频和屏幕共享分类。
    • outgoingMediaStatistics:传出媒体的媒体统计信息列表。
      • audio:传出音频的媒体统计信息列表。
      • video:传出视频的媒体统计信息列表。
      • screenShare:传出屏幕共享的媒体统计信息列表。
      • dataChannel:传出数据通道的媒体统计信息列表。
    • incomingMediaStatistics:传入媒体的媒体统计信息列表。
      • audio:传入音频的媒体统计信息列表。
      • video:传入视频的媒体统计信息列表。
      • screenShare:传入屏幕共享的媒体统计信息列表。
      • dataChannel:传入数据通道的媒体统计信息列表。
    • lastUpdated:生成报告的日期。

然后,实现 didReceiveReport 委托以获取有关当前媒体质量统计信息的常规更新:

// Optionally, set the interval for media statistics report generation
mediaStatisticsCallFeature.updateReportInterval(inSeconds: 15)
mediaStatisticsCallFeature.delegate = MediaStatisticsDelegate()


public class MediaStatisticsDelegate : MediaStatisticsCallFeatureDelegate
{
    public func mediaStatisticsCallFeature(_ mediaStatisticsCallFeature: MediaStatisticsCallFeature,
                                      didReceiveReport args: MediaStatisticsReportReceivedEventArgs) {
        let report = args.report

        // Obtain the outgoing media statistics for audio
        let outgoingAudioStatistics = report.outgoingStatistics.audio
    
        // Obtain the outgoing media statistics for video
        let outgoingVideoStatistics = report.outgoingStatistics.video
    
        // Obtain the outgoing media statistics for screen share
        let outgoingScreenShareStatistics = report.outgoingStatistics.screenShare

        // Obtain the outgoing media statistics for data channel
        let outgoingDataChannelStatistics = report.outgoingStatistics.dataChannel
    
        // Obtain the incoming media statistics for audio
        let incomingAudioStatistics = report.incomingStatistics.audio
    
        // Obtain the incoming media statistics for video
        let incomingVideoStatistics = report.incomingStatistics.video
    
        // Obtain the incoming media statistics for screen share
        let incomingScreenShareStatistics = report.incomingStatistics.screenShare

        // Obtain the incoming media statistics for data channel
        let incomingDataChannelStatistics = report.incomingStatistics.dataChannel
    }
}

最佳做法

如果要收集数据进行脱机检查,建议在通话结束后收集数据并将其发送到管道引入。 如果在通话期间传输数据,可能会使用到继续 Azure 通信服务通话所需的 Internet 带宽(尤其是在可用带宽较低时)。

传出音频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 音频发送比特率(每秒位数) 常规值在 24 Kbps 范围内(典型值为 36-128 Kbps)。
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。

传入音频指标

指标名称 说明 评论
CodecName 编解码器名称
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。
PacketsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。

传出视频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 视频发送比特率(每秒位数)
PacketCount 已发送的数据包总数。
FrameRate 在 RTP 流中发送的帧速率(每秒帧数)
FrameWidth 已编码帧的帧宽度(像素)
FrameHeight 已编码帧的帧高度(像素)

传入视频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 视频接收比特率(每秒比特率)
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。
PacketsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。
StreamId 流 ID streamId 值对应于远程参与者视频的 ID。 它可用于匹配发送方。
FrameRate 在 RTP 流中接收的帧速率(每秒帧数)
FrameWidth 已解码帧的帧宽度(像素)
FrameHeight 已解码帧的帧高度(像素)
TotalFreezeDurationInMs 合计冻结持续时间(毫秒)

传出屏幕共享指标

统计信息字段当前与传出视频指标相同

传入屏幕共享指标

统计信息字段当前与传入视频指标相同

传出数据通道指标

指标名称 说明 评论
PacketCount 已发送的数据包总数。

传入数据通道指标

指标名称 说明 评论
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。

正在进行的通话的媒体质量统计信息

媒体质量统计信息是核心 CommunicationCall API 的扩展功能。 首先需要获取 MediaStatisticsCallFeature API 对象:

MediaStatisticsCallFeature mediaStatisticsCallFeature = call.Features.MediaStatistics;

MediaStatisticsCallFeature 功能对象具有以下 API 结构:

  • ReportReceived 事件侦听媒体统计信息的定期报告。
  • ReportIntervalInSeconds 获取媒体统计信息报告生成的间隔(以秒为单位)。 SDK 使用 10 秒作为默认值。
  • UpdateReportIntervalInSeconds() 更新媒体统计信息报告生成的间隔(以秒为单位)。 SDK 使用 10 秒作为默认值。
  • MediaStatisticsReport 对象包含传出和传入媒体统计信息的定义,按音频、视频和屏幕共享分类。
    • OutgoingMediaStatistics:传出媒体的媒体统计信息列表。
      • Audio:传出音频的媒体统计信息列表。
      • Video:传出视频的媒体统计信息列表。
      • ScreenShare:传出屏幕共享的媒体统计信息列表。
      • DataChannel:传出数据通道的媒体统计信息列表。
    • IncomingMediaStatistics:传入媒体的媒体统计信息列表。
      • Audio:传入音频的媒体统计信息列表。
      • Video:传入视频的媒体统计信息列表。
      • ScreenShare:传入屏幕共享的媒体统计信息列表。
      • DataChannel:传入数据通道的媒体统计信息列表。
    • LastUpdateAt:生成报告的日期。

然后,订阅 SampleReported 事件以获取有关当前媒体质量统计信息的常规更新:

mediaStatisticsCallFeature.ReportReceived += MediaStatisticsCallFeature_ReportReceived;
// Optionally, set the interval for media statistics report generation
mediaStatisticsCallFeature.UpdateReportIntervalInSeconds(15);

private void MediaStatisticsCallFeature_ReportReceived(object sender, MediaStatisticsReportReceivedEventArgs args)
    // Obtain the media statistics report instance
    MediaStatisticsReport report = args.Report;

    // Obtain the outgoing media statistics for audio
    IReadOnlyList<OutgoingAudioStatistics> outgoingAudioStatistics = report.OutgoingStatistics.Audio;

    // Obtain the outgoing media statistics for video
    IReadOnlyList<OutgoingVideoStatistics> outgoingVideoStatistics = report.OutgoingStatistics.Video;

    // Obtain the outgoing media statistics for screen share
    IReadOnlyList<OutgoingScreenShareStatistics> outgoingScreenShareStatistics = report.OutgoingStatistics.ScreenShare;

    // Obtain the outgoing media statistics for data channel
    IReadOnlyList<OutgoingDataChannelStatistics> outgoingDataChannelStatistics = report.OutgoingStatistics.DataChannel;

    // Obtain the incoming media statistics for audio
    IReadOnlyList<IncomingAudioStatistics> incomingAudioStatistics = report.IncomingStatistics.Audio;

    // Obtain the incoming media statistics for video
    IReadOnlyList<IncomingVideoStatistics> incomingVideoStatistics = report.IncomingStatistics.Video;

    // Obtain the incoming media statistics for screen share
    IReadOnlyList<IncomingScreenShareStatistics> incomingScreenShareStatistics = report.IncomingStatistics.ScreenShare;

    // Obtain the incoming media statistics for data channel
    IReadOnlyList<IncomingDataChannelStatistics> incomingDataChannelStatistics = report.IncomingStatistics.DataChannel;
}

最佳做法

如果要收集数据进行脱机检查,建议在通话结束后收集数据并将其发送到管道引入。 如果在通话期间传输数据,可能会使用到继续 Azure 通信服务通话所需的 Internet 带宽(尤其是在可用带宽较低时)。

传出音频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 音频发送比特率(每秒位数) 常规值在 24 Kbps 范围内(典型值为 36-128 Kbps)。
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。

传入音频指标

指标名称 说明 评论
CodecName 编解码器名称
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。
PacketsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。

传出视频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 视频发送比特率(每秒位数)
PacketCount 已发送的数据包总数。
FrameRate 在 RTP 流中发送的帧速率(每秒帧数)
FrameWidth 已编码帧的帧宽度(像素)
FrameHeight 已编码帧的帧高度(像素)

传入视频指标

指标名称 说明 评论
CodecName 编解码器名称
BitrateInBps 视频接收比特率(每秒比特率)
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。
PacketsLostPerSecond 数据包丢失率(每秒数据包数) 排名越低越好。
StreamId 流 ID streamId 值对应于远程参与者视频的 ID。 它可用于匹配发送方。
FrameRate 在 RTP 流中接收的帧速率(每秒帧数)
FrameWidth 已解码帧的帧宽度(像素)
FrameHeight 已解码帧的帧高度(像素)
TotalFreezeDurationInMs 合计冻结持续时间(毫秒)

传出屏幕共享指标

统计信息字段当前与传出视频指标相同

传入屏幕共享指标

统计信息字段当前与传入视频指标相同

传出数据通道指标

指标名称 说明 评论
PacketCount 已发送的数据包总数。

传入数据通道指标

指标名称 说明 评论
JitterInMs 数据包抖动(毫秒) 排名越低越好。
PacketCount 已发送的数据包总数。