Поделиться через


Статистика качества мультимедиа

Чтобы лучше понять качество мультимедиа в VoIP и видеозвонки, которые используют Службы коммуникации Azure, есть функция, называемая статистикой качества мультимедиа. Используйте его для проверки метрик качества аудио, видео и демонстрации экрана для входящих и исходящих вызовов.

Статистика качества мультимедиа для текущего вызова

Внимание

Существует обновление интерфейса для статистики качества мультимедиа в пакете SDK, начиная с пакета SDK версии 1.20.1

Статистика качества мультимедиа — это расширенная функция основного Call API. Сначала необходимо получить mediaStatsFeature объект API:

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

Чтобы получить данные статистики мультимедиа, вы можете подписаться на sampleReported событие или summaryReported событие.

Событие sampleReported срабатывает каждую секунду. Он подходит в качестве источника данных для отображения пользовательского интерфейса или собственного конвейера данных.

Событие 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);
});

Если вам не нужно использовать сборщик статистики мультимедиа, вы можете вызвать метод disposemediaStatsCollector.

mediaStatsCollector.dispose();

Вам не нужно вызывать метод dispose из mediaStatsCollector каждый раз, когда вызов заканчивается, так как сборщики удаляются внутренним образом при завершении вызова.

MediaStatsCollectorOptions

MediaStatsCollectorOptions является необязательным, и в MediaStatsCollectorOptions есть два необязательных поля.

  • aggregationInterval — это интервал в секундах, в которых статистические данные агрегируются. Значение по умолчанию — 10.
  • dataPointsPerAggregation определяет, сколько точек данных имеет каждое событие агрегирования. По умолчанию используется значение 6.

Эти два значения определяют частоту, с которой пакет SDK выдает summaryReported событие и количество агрегированных точек данных, включенных в отчет.

Событие вызывается каждые summaryReportedaggregationInterval * dataPointsPerAggregation секунды.

Например, если задать следующие значения:

  • aggregationInterval = 1
  • dataPointsPerAggregation = 60

Событие summaryReported инициируется каждые 60 секунд и содержит 60 уникальных единиц для каждой записанной статистики.

Если задать следующие значения:

  • aggregatinInterval = 60
  • dataPointsPerAggregation = 1

Событие summaryReported создается каждые 60 секунд и содержит одну уникальную единицу (1) для каждой статистики, записанной.

Лучшие практики

Если вы хотите собрать данные для автономной проверки, мы рекомендуем собирать данные и отправлять их на передачу в обработку конвейера после окончания вызова. Если данные передаются во время вызова, это может использовать пропускную способность Интернета, необходимую для продолжения вызова Службы коммуникации Azure (особенно при низкой пропускной способности).

В любом 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 Идентификатор статистики Используется для идентификации статистики по событиям, особенно при наличии нескольких статистических данных с одинаковым типом носителя и направлением в событии.
codecName Имя кодека OPUS, G722.
bitrate Скорость передачи звука (биты в секунду) Общие значения находятся в диапазоне 24 кб/с (36–128 кб/с обычно).
jitterInMs Джиттер пакетов (миллисекунды) Чем меньше это значение, тем лучше.
packets Общее количество отправленных пакетов.
packetsPerSecond Частота пакетов (пакеты в секунду)
packetsLost Общее количество пакетов, потерянных из удаленного конца.
packetsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.
rttInMs Время круговой поездки (миллисекунда) Чем меньше это значение, тем лучше. Вычисляется из отчета приемника RTCP. Рекомендуется использовать время круговой поездки в 200 мс или меньше.
audioInputLevel Уровень громкости звука с микрофона Диапазон значений от 0 до 65536. Значение 0 представляет тишину.
transportId Идентификатор транспорта Используется для связывания статистики в транспорте.

Метрики приема звука

В версиях пакета SDK, предшествующих версии 1.20.1, jitterBufferDelayInMs существовал как jitterBufferInMs.

Имя метрики Описание Комментарии
id Идентификатор статистики Используется для идентификации статистики по событиям, особенно при наличии нескольких статистических данных с одинаковым типом носителя и направлением в событии.
codecName Имя кодека OPUS, G722.
bitrate Скорость приема звука (биты в секунду) Общие значения находятся в диапазоне 24 кб/с (36–128 кб/с обычно).
jitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
packets Общее количество полученных пакетов.
packetsPerSecond Частота пакетов (пакеты в секунду)
packetsLost Общее количество потерянных пакетов.
packetsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.
jitterBufferDelayInMs Буфер джиттера (миллисекунды) Чем меньше это значение, тем лучше. Буфер джиттера используется для плавного воспроизведения звука или видео. Это значение указывает, как долго пакеты образцов остаются в буфере джиттера.
audioOutputLevel Уровень громкости звука из принимающего потока Значение варьируется от 0 до 65536. Значение 0 представляет тишину.
healedRatio Соотношение скрытых образцов (за исключением silentConcealedSamples) к общему получению образцов Только сведения.
transportId Идентификатор транспорта Используется для связывания статистики в транспорте.

Метрики отправки видео

Начиная с пакета SDK версии 1.20.1, метрики отправки видео включали altLayouts поле метрик, что позволяет лучше представлять статистику потоков симуляции.

Имя метрики Описание Комментарии
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 Идентификатор транспорта Используется для связывания статистики в транспорте.
altLayouts Потоки Simulcast altLayouts содержит те же метрики для отправки видео

Метрики видео-приема

В версиях пакета SDK, предшествующих версии 1.20.1, jitterBufferDelayInMs существовал как jitterBufferInMs.

Имя метрики Описание Комментарии
id Идентификатор статистики Используется для идентификации статистики по событиям, особенно при наличии нескольких статистических данных с одинаковым типом носителя и направлением в событии.
codecName Имя кодека H264, VP8, VP9.
bitrate Скорость получения видео (биты в секунду)
jitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
packets Общее количество полученных пакетов.
packetsPerSecond Частота пакетов (пакеты в секунду)
packetsLost Общее количество потерянных пакетов.
packetsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.
rttInMs Время круговой поездки (миллисекунда) Чем меньше это значение, тем лучше. Вычисляется из отчета отправителя RTCP. Рекомендуется использовать время круговой поездки в 200 мс или меньше.
streamId Идентификатор потока Значение streamId соответствует id в VideoStreamCommon. Его можно использовать для сопоставления отправителя.
jitterBufferDelayInMs Буфер джиттера (миллисекунды) Чем меньше это значение, тем лучше. Буфер джиттера используется для плавного воспроизведения звука или видео. Это значение указывает, как долго пакеты кадров остаются в джиттер-буфере.
frameRateDecoded Частота кадров правильно декодирована для потока RTP (кадры в секунду)
frameRateReceived Частота кадров, полученная в потоке RTP (кадры в секунду)
frameWidthReceived Ширина кадра декодированного кадра (пиксель)
frameHeightReceived Высота декодированного кадра (пиксели)
longestFreezeDurationInMs Самая длинная длительность замораживания (миллисекунда)
totalFreezeDurationInMs Общая длительность замораживания (миллисекунда)
framesReceived Общее количество кадров, полученных в потоке RTP
framesDecoded Общее количество кадров, правильно декодированных для потока RTP
framesDropped Общее количество пропущенных кадров
keyFramesDecoded Общее количество ключевых кадров, правильно декодированных для потока RTP
transportId Идентификатор транспорта Используется для связывания статистики в транспорте.

Метрики отправки общего доступа к экрану

В настоящее время поля статистики совпадают с метриками отправки видео.

Метрики получения данных о совместном использовании экрана

В настоящее время поля статистики совпадают с метриками получения видео.

Метрики транспорта

Метрики, связанные с транспортом, были выделены из версии ACS Web SDK 1.20.1.

В более ранних версиях rttInMs существовал как pairRttInMs в статистике для аудио, видео и совместного использования экрана.

availableIncomingBitrate был availableBitrate в статистике получения аудио, видео и screenShare.

availableOutgoingBitrate был availableBitrate в статистике отправки аудио, видео и screenShare.

Имя метрики Описание Комментарии
id Идентификатор транспорта Используется для связывания с transportId в других статистиках
rttInMs Время круговой поездки (миллисекунда) Значение вычисляется из проверки подключения STUN. Рекомендуется использовать время круговой поездки в 200 мс или меньше.
availableIncomingBitrate Оценка пропускной способности (биты в секунду) Значение может быть недоступно в зависимости от алгоритма оценки пропускной способности, используемого в сеансе WebRTC
availableOutgoingBitrate Оценка пропускной способности (биты в секунду) Значение может быть недоступно в зависимости от алгоритма оценки пропускной способности, используемого в сеансе WebRTC

Что изменилось в пакете SDK версии 1.20.1 (GA)

Теперь мы поддерживаем API функций MediaStats в версии 1.20.1 (GA).

По сравнению с предыдущими бета-версиями, мы также внесли некоторые незначительные изменения в интерфейс API в этой версии общедоступной версии.

В предыдущих бета-версиях pairRttInMs, availableBitrate были включены в статистику аудио, видео и доли экрана. Теперь эти метрики разделены на метрики транспорта.

Мы представили packets и packetsLost метрики в аудио, видео, статистике screenShare. Эти метрики полезны для вычисления общего количества пакетов, отправленных или полученных между двумя разными точками времени.

Статистика frameRateOutput видео и демонстрации экрана удаляется. Вместо этого можно использовать frameRateDecoded .

Поле jitterBufferInMs метрик переименовывается jitterBufferDelayInMs для предоставления более четкого описания, так как эта метрика указывает длительность пребывания пакета в буфере jitter.

Статистика качества мультимедиа для текущего вызова

Статистика качества мультимедиа — это расширенная функция основного 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(MediaStatisticsReportEvent 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 (особенно при низкой пропускной способности).

Исходящие аудио метрики

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость передачи звука (биты в секунду) Общие значения находятся в диапазоне 24 кб/с (36–128 кб/с обычно).
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.

Входящие звуковые метрики

Имя метрики Описание Комментарии
CodecName Имя кодека
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.
PacketsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.

Исходящие метрики видео

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость передачи видео (биты в секунду)
PacketCount Общее количество отправленных пакетов.
FrameRate Частота кадров, отправляемая в поток RTP (кадры в секунду)
FrameWidth Ширина кадра в кодировке (пиксели)
FrameHeight Высота кадра в кодировке (пиксели)

Метрики входящего видео

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость получения видео (биты в секунду)
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.
PacketsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.
StreamId Идентификатор потока Значение streamId соответствует идентификатору видео удаленного участника. Его можно использовать для сопоставления отправителя.
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 (особенно при низкой пропускной способности).

Исходящие аудио метрики

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость передачи звука (биты в секунду) Общие значения находятся в диапазоне 24 кб/с (36–128 кб/с обычно).
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.

Входящие звуковые метрики

Имя метрики Описание Комментарии
CodecName Имя кодека
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.
PacketsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.

Исходящие метрики видео

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость передачи видео (биты в секунду)
PacketCount Общее количество отправленных пакетов.
FrameRate Частота кадров, отправляемая в поток RTP (кадры в секунду)
FrameWidth Ширина кадра в кодировке (пиксели)
FrameHeight Высота кадра в кодировке (пиксели)

Метрики входящего видео

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость получения видео (биты в секунду)
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.
PacketsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.
StreamId Идентификатор потока Значение streamId соответствует идентификатору видео удаленного участника. Его можно использовать для сопоставления отправителя.
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 (особенно при низкой пропускной способности).

Исходящие аудио метрики

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость передачи звука (биты в секунду) Общие значения находятся в диапазоне 24 кб/с (36–128 кб/с обычно).
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.

Входящие звуковые метрики

Имя метрики Описание Комментарии
CodecName Имя кодека
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.
PacketsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.

Исходящие метрики видео

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость передачи видео (биты в секунду)
PacketCount Общее количество отправленных пакетов.
FrameRate Частота кадров, отправляемая в поток RTP (кадры в секунду)
FrameWidth Ширина кадра в кодировке (пиксели)
FrameHeight Высота кадра в кодировке (пиксели)

Метрики входящего видео

Имя метрики Описание Комментарии
CodecName Имя кодека
BitrateInBps Скорость получения видео (биты в секунду)
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.
PacketsLostPerSecond Скорость потери пакетов (пакеты в секунду) Чем меньше это значение, тем лучше.
StreamId Идентификатор потока Значение streamId соответствует идентификатору видео удаленного участника. Его можно использовать для сопоставления отправителя.
FrameRate Частота кадров, полученная в потоке RTP (кадры в секунду)
FrameWidth Ширина кадра декодированного кадра (пиксели)
FrameHeight Высота кадра декодированного кадра (пиксели)
TotalFreezeDurationInMs Общая длительность замораживания (миллисекунда)

Метрики общего доступа к исходящему экрану

В настоящее время поля статистики совпадают с метриками исходящего видео.

Метрики общего доступа для входящих экранов

В настоящее время поля статистики совпадают с метриками входящего видео.

Метрики исходящего канала данных

Имя метрики Описание Комментарии
PacketCount Общее количество отправленных пакетов.

Метрики канала входящих данных

Имя метрики Описание Комментарии
JitterInMs Джиттер пакетов (в миллисекундах) Чем меньше это значение, тем лучше.
PacketCount Общее количество отправленных пакетов.