Compartilhar via


Estatísticas de qualidade de mídia

Para ajudar você a entender melhor a qualidade da mídia no VoIP e chamadas de vídeo que usam os Serviços de Comunicação do Azure, há um recurso chamado estatísticas de qualidade de mídia. Use-o para examinar as métricas de qualidade de áudio, vídeo e compartilhamento de tela de baixo nível para métricas de chamadas recebidas e efetuadas.

Estatísticas de qualidade de mídia para uma chamada em andamento

Importante

Há uma atualização de interface sobre estatísticas de qualidade de mídia no SDK, começando com o SDK versão 1.20.1

As estatísticas de qualidade de mídia são um recurso estendido da API Call principal. Primeiro você precisa obter o objeto de API mediaStatsFeature:

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

Para receber os dados de estatísticas de mídia, inscreva-se no evento sampleReported ou no evento summaryReported.

O evento sampleReported é disparado a cada segundo. Ele é adequado como fonte de dados para exibição da interface do usuário ou como seu pipeline de dados.

O evento summaryReported contém os valores agregados dos dados em intervalos, o que é útil quando você precisa apenas de um resumo.

Para ter controle do intervalo do evento summaryReported, é necessário definir o mediaStatsCollectorOptions do tipo MediaStatsCollectorOptions. Caso contrário, o SDK usará valores padrão.

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);
});

Caso não precise do coletor de estatísticas de mídia, chame o método dispose de mediaStatsCollector.

mediaStatsCollector.dispose();

Caso não precise chamar o método dispose de mediaStatsCollector todas as vezes em que a chamada termina, porque os coletores são recuperados internamente quando a chamada termina.

MediaStatsCollectorOptions

O MediaStatsCollectorOptions é opcional, e há dois campos opcionais em MediaStatsCollectorOptions.

  • aggregationInterval é o intervalo, em segundos, em que as estatísticas são agregadas. O valor padrão é 10.
  • dataPointsPerAggregation define quantos pontos de dados há em cada evento de agregação. O valor padrão é 6.

Esses dois valores determinam a frequência com que o SDK emite o evento summaryReported e o número de pontos de dados agregados incluídos no relatório.

O evento summaryReported é gerado a cada aggregationInterval * dataPointsPerAggregation segundos.

Por exemplo, você define os seguintes valores:

  • aggregationInterval = 1
  • dataPointsPerAggregation = 60

O evento summaryReported é gerado a cada 60 segundos e contém 60 unidades exclusivas para cada estatística registrada.

Se você definir os seguintes valores:

  • aggregatinInterval = 60
  • dataPointsPerAggregation = 1

O evento summaryReported será gerado a cada 60 segundos e conterá uma (1) unidade exclusiva para cada estatística registrada.

Práticas recomendadas

Se você quiser coletar os dados para inspeção offline, recomendamos coletar os dados e enviá-los para a ingestão do pipeline após o término da chamada. Se você transmitir esses dados durante uma chamada, eles poderão usar a largura de banda da Internet necessária para continuar uma chamada dos Serviços de Comunicação do Azure (especialmente quando a largura de banda disponível for baixa).

Em evento sampleReported ou evento summaryReported, os dados de estatísticas de mídia não são apenas um mapeamento simples de chave-valor.

Aqui está a declaração de tipo dos dados de evento relatados pelo evento 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>[];
}

Os dados do evento fornecem os dados de estatísticas para cada fluxo de mídia na chamada, incluindo enviar e receber instruções.

Recomendamos que você imprima o evento usando console.log para observar as alterações de valor e layout dele, para que você possa encontrar uma maneira adequada de exibir ou processar os dados de acordo com seu cenário de uso.

Métricas de envio de áudio

Nome da métrica Descrição Comentários
id ID de estatísticas Usadas para identificar estatísticas entre os eventos, especialmente quando há várias estatísticas com o mesmo tipo de mídia e direção em um evento.
codecName Nome do codec OPUS, G722.
bitrate Taxa de bits de envio de áudio (bits por segundo) Os valores gerais estão no intervalo de 24 kbps (36 a 128 kbps é o usual).
jitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
packets Número total de pacotes enviados.
packetsPerSecond Taxa de pacotes (pacotes por segundo)
packetsLost O número total de pacotes perdidos relatados da extremidade remota.
packetsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.
rttInMs Tempo de ida e volta (milissegundos) Menor é melhor. É calculado a partir do relatório do receptor RTCP. Recomenda-se um tempo de viagem de ida e volta de 200 ms ou menos.
audioInputLevel Nível de volume de áudio do microfone O valor varia de 0 a 65536. Um valor de 0 representa o silêncio.
transportId ID do transporte Usado para associar as estatísticas em transportes.

Métricas de recebimento de áudio

Nas versões do SDK anteriores à 1.20.1, jitterBufferDelayInMs existia como jitterBufferInMs.

Nome da métrica Descrição Comentários
id ID de estatísticas Usadas para identificar estatísticas entre os eventos, especialmente quando há várias estatísticas com o mesmo tipo de mídia e direção em um evento.
codecName Nome do codec OPUS, G722.
bitrate Taxa de bits de recebimento de áudio (bits por segundo) Os valores gerais estão no intervalo de 24 kbps (36 a 128 kbps é o usual).
jitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
packets O número total de pacotes recebidos.
packetsPerSecond Taxa de pacotes (pacotes por segundo)
packetsLost O número total de pacotes perdidos.
packetsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.
jitterBufferDelayInMs Buffer de tremulação (milissegundos) Menor é melhor. O buffer de tremulação é usado para reprodução suave. Esse valor é por quanto tempo os pacotes dos exemplos permanecem no buffer de tremulação.
audioOutputLevel Nível de volume de áudio do fluxo de recebimento O valor varia de 0 a 65536. Um valor de 0 representa o silêncio.
healedRatio Taxa de amostras ocultas (exceto silentConcealedSamples) para o total de amostras recebidas Somente informações.
transportId ID do transporte Usado para associar as estatísticas em transportes.

Métricas de envio de vídeo

A partir do SDK versão 1.20.1, as métricas de envio de vídeo incluíam o campo de métrica altLayouts, que permite uma melhor representação das estatísticas de fluxo simulcast.

Nome da métrica Descrição Comentários
id ID de estatísticas Usadas para identificar estatísticas entre os eventos, especialmente quando há várias estatísticas com o mesmo tipo de mídia e direção em um evento.
codecName Nome do codec H264, VP8 e VP9.
bitrate Taxa de bits de envio de vídeo (bits por segundo)
jitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
packets Número total de pacotes enviados.
packetsPerSecond Taxa de pacotes (pacotes por segundo)
packetsLost O número total de pacotes perdidos relatados da extremidade remota.
packetsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.
rttInMs Tempo de ida e volta (milissegundos) Menor é melhor. É calculado a partir do relatório do receptor RTCP. Recomenda-se um tempo de viagem de ida e volta de 200 ms ou menos.
frameRateInput Taxa de quadros derivada da origem do vídeo (quadros por segundo)
frameWidthInput Largura do quadro do último quadro derivado da origem do vídeo (pixels)
frameHeightInput Altura do quadro do último quadro derivado da origem do vídeo (pixels)
framesEncoded O número de quadros codificados com sucesso para o fluxo RTP.
frameRateEncoded Taxa de quadros codificada com êxito para o fluxo RTP (quadros por segundo)
framesSent O número de quadros enviados no fluxo RTP
frameRateSent Taxa de quadros enviada no fluxo RTP (quadros por segundo)
frameWidthSent Largura do quadro codificado (pixel)
frameHeightSent Altura do quadro codificado (pixel)
keyFramesEncoded Quadros-chave codificados com sucesso para o fluxo RTP
transportId ID do transporte Usado para associar as estatísticas em transportes.
altLayouts Fluxos simulcast altLayouts contém as mesmas métricas para o envio de vídeo

Métricas de recebimento de vídeo

Nas versões do SDK anteriores à 1.20.1, jitterBufferDelayInMs existia como jitterBufferInMs.

Nome da métrica Descrição Comentários
id ID de estatísticas Usadas para identificar estatísticas entre os eventos, especialmente quando há várias estatísticas com o mesmo tipo de mídia e direção em um evento.
codecName Nome do codec H264, VP8 e VP9.
bitrate Taxa de bits de recebimento de vídeo (bits por segundo)
jitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
packets O número total de pacotes recebidos.
packetsPerSecond Taxa de pacotes (pacotes por segundo)
packetsLost O número total de pacotes perdidos.
packetsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.
rttInMs Tempo de ida e volta (milissegundos) Menor é melhor. Calculado com base no relatório do remetente RTCP. Recomenda-se um tempo de viagem de ida e volta de 200 ms ou menos.
streamId ID do fluxo O valor streamId corresponde a id em VideoStreamCommon. Pode ser usado para corresponder ao remetente.
jitterBufferDelayInMs Buffer de tremulação (milissegundos) Menor é melhor. O buffer de tremulação é usado para reprodução suave. Este valor é quanto tempo os pacotes dos quadros permanecem no buffer de tremulação.
frameRateDecoded Taxa de quadros decodificada corretamente para o fluxo RTP (quadros por segundo)
frameRateReceived Taxa de quadros recebida no fluxo RTP (quadros por segundo)
frameWidthReceived Largura do quadro decodificado (pixel)
frameHeightReceived Altura do quadro decodificado (pixel)
longestFreezeDurationInMs Maior duração de congelamento (milissegundos)
totalFreezeDurationInMs Duração total de congelamento (milissegundos)
framesReceived Número total de quadros recebidos no fluxo RTP
framesDecoded Número total de quadros decodificados corretamente para o fluxo RTP
framesDropped Número total de quadros removidos
keyFramesDecoded Número total de quadros-chave decodificados corretamente para o fluxo RTP
transportId ID do transporte Usado para associar as estatísticas em transportes.

Métricas de envio de compartilhamento de tela

Atualmente, os campos de estatísticas são os mesmos que as métricas de envio de vídeo.

Métricas de recebimento do compartilhamento de tela

Atualmente, os campos de estatísticas são os mesmos que as métricas de recebimento de vídeo.

Métricas de transporte

As métricas relacionadas ao transporte foram separadas após o SDK da Web do ACS 1.20.1.

Em versões anteriores, rttInMs existiam como pairRttInMs nas estatísticas de áudio, vídeo e compartilhamento de tela.

availableIncomingBitrate era availableBitrate nas estatísticas de recebimento de áudio, vídeo e compartilhamento de tela.

availableOutgoingBitrate era availableBitrate nas estatísticas de envio para áudio, vídeo e compartilhamento de tela.

Nome da métrica Descrição Comentários
id ID do transporte Usado para associar à ID do transporte em outras estatísticas
rttInMs Tempo de ida e volta (milissegundos) O valor é calculado com base na verificação de conectividade STUN. Recomenda-se um tempo de viagem de ida e volta de 200 ms ou menos.
availableIncomingBitrate Estimativa de largura de banda (bits por segundo) O valor pode não estar disponível dependendo do algoritmo de estimativa de largura de banda usado na sessão webRTC
availableOutgoingBitrate Estimativa de largura de banda (bits por segundo) O valor pode não estar disponível dependendo do algoritmo de estimativa de largura de banda usado na sessão webRTC

O que é alterado no SDK versão 1.20.1 (GA)

Agora, damos suporte à API de recursos do MediaStats na 1.20.1 (GA).

Em comparação com as versões beta anteriores, também fizemos algumas pequenas alterações na interface da API nesta versão GA.

Nas versões beta anteriores, pairRttInMs e availableBitrate foram incluídas nas estatísticas de áudio, vídeo e compartilhamento de tela. Agora, essas métricas são separadas em métricas de transporte.

Introduzimos os campos de métrica packets e packetsLost em estatísticas de áudio, vídeo e compartilhamento de tela. Essas métricas são úteis para calcular o número total de pacotes enviados ou recebidos entre dois pontos de tempo diferentes.

A frameRateOutput em estatísticas de vídeo e compartilhamento de tela é removida. Você pode usar frameRateDecoded em vez dela.

O campo de métrica jitterBufferInMs é renomeado para jitterBufferDelayInMs a fim de fornecer uma descrição mais clara, porque essa métrica indica a duração de um pacote permanecer no buffer de tremulação.

Estatísticas de qualidade de mídia para uma chamada em andamento

As estatísticas de qualidade de mídia são um recurso estendido da API Call principal. Primeiro você precisa obter o objeto de API MediaStatisticsCallFeature:

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

O objeto MediaStatisticsCallFeature tem a seguinte estrutura de API:

  • O evento OnReportReceivedListener escuta relatórios periódicos das estatísticas de mídia.
  • getReportIntervalInSeconds obtém o intervalo, em segundos, da geração do relatório de estatísticas de mídia. O SDK usa 10 segundo como padrão.
  • updateReportIntervalInSeconds() atualiza o intervalo, em segundos, da geração do relatório de estatísticas de mídia. O SDK usa 10 segundo como padrão.
  • Um MediaStatisticsReport contém a definição das estatísticas de mídia de saída e de entrada, categorizadas por áudio, vídeo e compartilhamento de tela.
    • getOutgoingStatistics(): a lista de estatísticas de mídia para mídia de saída.
      • getAudioStatistics(): a lista de estatísticas de mídia para áudio de saída.
      • getVideoStatistics(): a lista de estatísticas de mídia do vídeo de saída.
      • getScreenShareStatistics(): a lista de estatísticas de mídia para o compartilhamento de tela de saída.
      • getDataChannelStatistics(): a lista de estatísticas de mídia para o canal de dados.
    • getIncomingStatistics(): a lista de estatísticas de mídia para mídia de entrada.
      • getAudioStatistics(): a lista de estatísticas de mídia para áudio de entrada.
      • getVideoStatistics(): a lista de estatísticas de mídia para o vídeo de entrada.
      • getScreenShareStatistics(): a lista de estatísticas de mídia para o compartilhamento de tela de entrada.
      • getDataChannelStatistics(): a lista de estatísticas de mídia para o canal de dados.
    • getLastUpdatedAt(): a data em que o relatório foi gerado.

Em seguida, assine o evento addOnReportReceivedListener para obter atualizações regulares sobre as estatísticas de qualidade de mídia atuais:

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();
}

Práticas recomendadas

Se você quiser coletar os dados para inspeção offline, recomendamos coletar os dados e enviá-los para a ingestão do pipeline após o término da chamada. Se você transmitir esses dados durante uma chamada, eles poderão usar a largura de banda da Internet necessária para continuar uma chamada dos Serviços de Comunicação do Azure (especialmente quando a largura de banda disponível for baixa).

Métricas de áudio de saída

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de envio de áudio (bits por segundo) Os valores gerais estão no intervalo de 24 kbps (36 a 128 kbps é o usual).
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.

Métricas de áudio de entrada

Nome da métrica Descrição Comentários
CodecName Nome do codec
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.
PacketsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.

Métricas de vídeo de saída

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de envio de vídeo (bits por segundo)
PacketCount Número total de pacotes enviados.
FrameRate Taxa de quadros enviada no fluxo RTP (quadros por segundo)
FrameWidth Largura do quadro codificado (pixels)
FrameHeight Altura do quadro codificado (pixels)

Métricas de vídeo de entrada

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de recebimento de vídeo (bits por segundo)
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.
PacketsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.
StreamId ID do fluxo O valor streamId corresponde à ID do vídeo do participante remoto. Pode ser usado para corresponder ao remetente.
FrameRate Taxa de quadros recebida no fluxo RTP (quadros por segundo)
FrameWidth Largura do quadro decodificado (pixels)
FrameHeight altura do quadro decodificado (pixels)
TotalFreezeDurationInMs Duração total de congelamento (milissegundos)

Métricas de compartilhamento de tela de saída

Atualmente, os campos de estatísticas são os mesmos que as métricas de vídeo de saída.

Métricas de compartilhamento de tela de entrada

Atualmente, os campos de estatísticas são os mesmos que as métricas de vídeo de entrada.

Métricas de canal de dados de saída

Nome da métrica Descrição Comentários
PacketCount Número total de pacotes enviados.

Métricas de canal de dados de entrada

Nome da métrica Descrição Comentários
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.

Estatísticas de qualidade de mídia para uma chamada em andamento

As estatísticas de qualidade de mídia são um recurso estendido da API Call principal. Primeiro você precisa obter o objeto de API mediaStatisticsCallFeature:

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

O objeto mediaStatisticsCallFeature tem a seguinte estrutura de API:

  • O método delegado didReceiveReport escuta relatórios periódicos das estatísticas de mídia.
  • reportIntervalInSeconds obtém o intervalo, em segundos, da geração do relatório de estatísticas de mídia. O SDK usa 10 segundo como padrão.
  • updateReportInterval(inSeconds) atualiza o intervalo, em segundos, da geração do relatório de estatísticas de mídia. O SDK usa 10 segundo como padrão.
  • Um objeto MediaStatisticsReport contém a definição das estatísticas de mídia de saída e de entrada, categorizadas por áudio, vídeo e compartilhamento de tela.
    • outgoingMediaStatistics: a lista de estatísticas de mídia para mídia de saída.
      • audio: a lista de estatísticas de mídia para o áudio de saída.
      • video: a lista de estatísticas de mídia para o vídeo de saída.
      • screenShare: a lista de estatísticas de mídia para o compartilhamento de tela de saída.
      • dataChannel: a lista de estatísticas de mídia para o canal de dados de saída.
    • incomingMediaStatistics: a lista de estatísticas de mídia para mídia de entrada.
      • audio: a lista de estatísticas de mídia para o áudio de entrada.
      • video: a lista de estatísticas de mídia para o vídeo de entrada.
      • screenShare: a lista de estatísticas de mídia para o compartilhamento de tela de entrada.
      • dataChannel: a lista de estatísticas de mídia para o canal de dados de entrada.
    • lastUpdated: a data em que o relatório foi gerado.

Em seguida, implemente o delegado didReceiveReport para obter atualizações regulares sobre as estatísticas de qualidade de mídia atuais:

// 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
    }
}

Práticas recomendadas

Se você quiser coletar os dados para inspeção offline, recomendamos coletar os dados e enviá-los para a ingestão do pipeline após o término da chamada. Se você transmitir esses dados durante uma chamada, eles poderão usar a largura de banda da Internet necessária para continuar uma chamada dos Serviços de Comunicação do Azure (especialmente quando a largura de banda disponível for baixa).

Métricas de áudio de saída

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de envio de áudio (bits por segundo) Os valores gerais estão no intervalo de 24 kbps (36 a 128 kbps é o usual).
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.

Métricas de áudio de entrada

Nome da métrica Descrição Comentários
CodecName Nome do codec
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.
PacketsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.

Métricas de vídeo de saída

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de envio de vídeo (bits por segundo)
PacketCount Número total de pacotes enviados.
FrameRate Taxa de quadros enviada no fluxo RTP (quadros por segundo)
FrameWidth Largura do quadro codificado (pixels)
FrameHeight Altura do quadro codificado (pixels)

Métricas de vídeo de entrada

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de recebimento de vídeo (bits por segundo)
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.
PacketsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.
StreamId ID do fluxo O valor streamId corresponde à ID do vídeo do participante remoto. Pode ser usado para corresponder ao remetente.
FrameRate Taxa de quadros recebida no fluxo RTP (quadros por segundo)
FrameWidth Largura do quadro decodificado (pixels)
FrameHeight altura do quadro decodificado (pixels)
TotalFreezeDurationInMs Duração total de congelamento (milissegundos)

Métricas de compartilhamento de tela de saída

Atualmente, os campos de estatísticas são os mesmos que as métricas de vídeo de saída.

Métricas de compartilhamento de tela de entrada

Atualmente, os campos de estatísticas são os mesmos que as métricas de vídeo de entrada.

Métricas de canal de dados de saída

Nome da métrica Descrição Comentários
PacketCount Número total de pacotes enviados.

Métricas de canal de dados de entrada

Nome da métrica Descrição Comentários
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.

Estatísticas de qualidade de mídia para uma chamada em andamento

As estatísticas de qualidade de mídia são um recurso estendido da API CommunicationCall principal. Primeiro você precisa obter o objeto de API MediaStatisticsCallFeature:

MediaStatisticsCallFeature mediaStatisticsCallFeature = call.Features.MediaStatistics;

O objeto de recurso MediaStatisticsCallFeature tem a seguinte estrutura de API:

  • O evento ReportReceived escuta relatórios periódicos das estatísticas de mídia.
  • ReportIntervalInSeconds obtém o intervalo, em segundos, da geração do relatório de estatísticas de mídia. O SDK usa 10 segundo como padrão.
  • UpdateReportIntervalInSeconds() atualiza o intervalo, em segundos, da geração do relatório de estatísticas de mídia. O SDK usa 10 segundo como padrão.
  • Um objeto MediaStatisticsReport contém a definição das estatísticas de mídia de saída e de entrada, categorizadas por áudio, vídeo e compartilhamento de tela.
    • OutgoingMediaStatistics: a lista de estatísticas de mídia para mídia de saída.
      • Audio: a lista de estatísticas de mídia para o áudio de saída.
      • Video: a lista de estatísticas de mídia para o vídeo de saída.
      • ScreenShare: a lista de estatísticas de mídia para o compartilhamento de tela de saída.
      • DataChannel: a lista de estatísticas de mídia para o canal de dados de saída.
    • IncomingMediaStatistics: a lista de estatísticas de mídia para mídia de entrada.
      • Audio: a lista de estatísticas de mídia para o áudio de entrada.
      • Video: a lista de estatísticas de mídia para o vídeo de entrada.
      • ScreenShare: a lista de estatísticas de mídia para o compartilhamento de tela de entrada.
      • DataChannel: a lista de estatísticas de mídia para o canal de dados de entrada.
    • LastUpdateAt: a data em que o relatório foi gerado.

Em seguida, assine o evento SampleReported para obter atualizações regulares sobre as estatísticas de qualidade de mídia atuais:

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;
}

Práticas recomendadas

Se você quiser coletar os dados para inspeção offline, recomendamos coletar os dados e enviá-los para a ingestão do pipeline após o término da chamada. Se você transmitir esses dados durante uma chamada, eles poderão usar a largura de banda da Internet necessária para continuar uma chamada dos Serviços de Comunicação do Azure (especialmente quando a largura de banda disponível for baixa).

Métricas de áudio de saída

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de envio de áudio (bits por segundo) Os valores gerais estão no intervalo de 24 kbps (36 a 128 kbps é o usual).
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.

Métricas de áudio de entrada

Nome da métrica Descrição Comentários
CodecName Nome do codec
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.
PacketsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.

Métricas de vídeo de saída

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de envio de vídeo (bits por segundo)
PacketCount Número total de pacotes enviados.
FrameRate Taxa de quadros enviada no fluxo RTP (quadros por segundo)
FrameWidth Largura do quadro codificado (pixels)
FrameHeight Altura do quadro codificado (pixels)

Métricas de vídeo de entrada

Nome da métrica Descrição Comentários
CodecName Nome do codec
BitrateInBps Taxa de bits de recebimento de vídeo (bits por segundo)
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.
PacketsLostPerSecond Taxa de perda de pacotes (pacotes/s) Menor é melhor.
StreamId ID do fluxo O valor streamId corresponde à ID do vídeo do participante remoto. Pode ser usado para corresponder ao remetente.
FrameRate Taxa de quadros recebida no fluxo RTP (quadros por segundo)
FrameWidth Largura do quadro decodificado (pixels)
FrameHeight altura do quadro decodificado (pixels)
TotalFreezeDurationInMs Duração total de congelamento (milissegundos)

Métricas de compartilhamento de tela de saída

Atualmente, os campos de estatísticas são os mesmos que as métricas de vídeo de saída.

Métricas de compartilhamento de tela de entrada

Atualmente, os campos de estatísticas são os mesmos que as métricas de vídeo de entrada.

Métricas de canal de dados de saída

Nome da métrica Descrição Comentários
PacketCount Número total de pacotes enviados.

Métricas de canal de dados de entrada

Nome da métrica Descrição Comentários
JitterInMs Tremulação do pacote (milissegundos) Menor é melhor.
PacketCount Número total de pacotes enviados.