你当前正在访问 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);
});
如果不需要使用媒体统计信息收集器,则可以调用 mediaStatsCollector
的 dispose
方法。
mediaStatsCollector.dispose();
在通话结束时,并不需要每次都调用 mediaStatsCollector
的 dispose
方法,因为在通话结束时,收集器会在内部回收。
MediaStatsCollectorOptions
MediaStatsCollectorOptions
是可选的,并且 MediaStatsCollectorOptions
中有两个可选字段。
aggregationInterval
是统计信息的聚合间隔(以秒为单位)。 默认值为 10。dataPointsPerAggregation
定义每个聚合事件具有的数据点数。 默认值为 6。
这两个值确定 SDK 发出 summaryReported
事件的频率以及报告中包含的聚合数据点数。
summaryReported
事件每 aggregationInterval * dataPointsPerAggregation
秒引发一次。
例如,如果设置以下值:
aggregationInterval
= 1dataPointsPerAggregation
= 60
summaryReported
事件每 60 秒引发一次,并且每个记录的统计信息都包含 60 个唯一单位。
如果设置以下值:
aggregatinInterval
= 60dataPointsPerAggregation
= 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
存在。
在音频、视频和屏幕共享的接收统计信息中,availableIncomingBitrate
为 availableBitrate
。
在音频、视频和屏幕共享的发送统计信息中,availableOutgoingBitrate
为 availableBitrate
。
指标名称 | 说明 | 评论 |
---|---|---|
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 版本中,pairRttInMs
、availableBitrate
包含在音频、视频和屏幕共享统计信息中。
现在,这些指标已划分为传输指标。
我们在音频、视频和屏幕共享统计信息中引入了 packets
、packetsLost
指标字段。 这些指标可用于计算两个不同的时间点之间发送或接收的数据包总数。
删除了视频和屏幕共享统计信息中的 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 |
已发送的数据包总数。 |