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
= 1dataPointsPerAggregation
= 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
= 60dataPointsPerAggregation
= 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 usa10
segundo como padrão.updateReportIntervalInSeconds()
atualiza o intervalo, em segundos, da geração do relatório de estatísticas de mídia. O SDK usa10
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 usa10
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 usa10
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 usa10
segundo como padrão.UpdateReportIntervalInSeconds()
atualiza o intervalo, em segundos, da geração do relatório de estatísticas de mídia. O SDK usa10
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. |