Udostępnij za pośrednictwem


Statystyki jakości multimediów

Aby lepiej zrozumieć jakość multimediów w usłudze VoIP i wywołaniach wideo korzystających z usług Azure Communication Services, istnieje funkcja nazywana statystykami jakości multimediów. Służy do analizowania metryk jakości niskiego poziomu audio, wideo i udostępniania ekranu dla metryk jakości połączeń przychodzących i wychodzących.

Statystyki jakości multimediów dotyczące trwającego połączenia

Ważne

Istnieje aktualizacja interfejsu dotycząca statystyk jakości multimediów w zestawie SDK, począwszy od zestawu SDK w wersji 1.20.1

Statystyki jakości multimediów to rozszerzona funkcja podstawowego Call interfejsu API. Najpierw należy uzyskać obiekt interfejsu mediaStatsFeature API:

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

Aby otrzymywać dane statystyczne multimediów, możesz subskrybować sampleReported zdarzenie lub summaryReported zdarzenie.

Zdarzenie sampleReported jest wyzwalane co sekundę. Jest ona odpowiednia jako źródło danych do wyświetlania interfejsu użytkownika lub własnego potoku danych.

Zdarzenie summaryReported zawiera zagregowane wartości danych w interwałach, co jest przydatne, gdy potrzebujesz tylko podsumowania.

Jeśli chcesz kontrolować interwał summaryReported zdarzenia, musisz zdefiniować mediaStatsCollectorOptions typ MediaStatsCollectorOptions. W przeciwnym razie zestaw SDK używa wartości domyślnych.

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

Jeśli nie musisz używać modułu zbierającego statystyki multimediów, możesz wywołać dispose metodę mediaStatsCollector.

mediaStatsCollector.dispose();

Nie musisz wywoływać dispose metody mediaStatsCollector za każdym razem, gdy kończy się wywołanie, ponieważ moduły zbierające są odzyskiwane wewnętrznie po zakończeniu wywołania.

MediaStatsCollectorOptions

Parametr MediaStatsCollectorOptions jest opcjonalny i istnieją dwa opcjonalne pola w pliku MediaStatsCollectorOptions.

  • aggregationInterval to interwał w sekundach, w których statystyki są agregowane. Wartość domyślna to 10.
  • dataPointsPerAggregation określa liczbę punktów danych, które ma każde zdarzenie agregacji. Wartość domyślna to 6.

Te dwie wartości określają częstotliwość, z jaką zestaw SDK emituje summaryReported zdarzenie i liczbę zagregowanych punktów danych zawartych w raporcie.

Zdarzenie summaryReported zgłaszane co aggregationInterval * dataPointsPerAggregation sekundy.

Jeśli na przykład ustawisz następujące wartości:

  • aggregationInterval = 1
  • dataPointsPerAggregation = 60

Zdarzenie summaryReported jest wywoływane co 60 sekund i zawiera 60 unikatowych jednostek dla każdej zarejestrowanej statystyki.

Jeśli ustawisz następujące wartości:

  • aggregatinInterval = 60
  • dataPointsPerAggregation = 1

Zdarzenie summaryReported jest wywoływane co 60 sekund i zawiera jedną (1) unikatową jednostkę dla każdej zarejestrowanej statystyki.

Najlepsze rozwiązania

Jeśli chcesz zebrać dane na potrzeby inspekcji offline, zalecamy zebranie danych i wysłanie ich do pozyskiwania potoku po zakończeniu wywołania. Jeśli przesyłasz dane podczas wywołania, może ona korzystać z przepustowości internetowej potrzebnej do kontynuowania wywołania usług Azure Communication Services (szczególnie wtedy, gdy dostępna przepustowość jest niska).

sampleReported W przypadku zdarzenia lub summaryReported zdarzenia dane statystyk multimediów nie są tylko prostym mapowaniem wartości klucz-wartość.

Oto deklaracja typu danych zdarzenia zgłoszonych przez sampleReported zdarzenie.

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

Dane zdarzenia zawierają dane statystyczne dla każdego strumienia multimediów w wywołaniu, w tym zarówno wysyłanie, jak i odbieranie wskazówek.

Zalecamy wydrukowanie zdarzenia przy użyciu elementu , console.log aby obserwować zmiany układu i wartości, aby można było znaleźć odpowiedni sposób wyświetlania lub przetwarzania danych zgodnie ze scenariuszem użycia.

Metryki wysyłania dźwięku

Nazwa metryki opis Komentarze
id Identyfikator statystyk Służy do identyfikowania statystyk dotyczących zdarzeń, zwłaszcza gdy istnieje wiele statystyk o tym samym typie nośnika i kierunku zdarzenia.
codecName Nazwa kodera OPUS, G722.
bitrate Szybkość wysyłania dźwięku (bity na sekundę) Wartości ogólne znajdują się w zakresie 24 KB/s (typowe jest to 36–128 KB/s).
jitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
packets Łączna liczba wysłanych pakietów.
packetsPerSecond Szybkość pakietów (pakiety na sekundę)
packetsLost Łączna liczba utraconych pakietów zgłoszonych ze zdalnego końca.
packetsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.
rttInMs Czas rundy (milisekundy) Niższa jest lepsza. Obliczany na podstawie raportu odbiornika RTCP. Zalecamy czas rundy 200 ms lub mniej.
audioInputLevel Poziom głośności dźwięku z mikrofonu Wartości wahają się od 0 do 65536. Wartość 0 reprezentuje ciszę.
transportId Identyfikator transportu Służy do kojarzenia statystyk w transportach.

Metryki odbierania dźwięku

W wersjach zestawu SDK starszych niż 1.20.1 jitterBufferDelayInMs istniały jako jitterBufferInMs.

Nazwa metryki opis Komentarze
id Identyfikator statystyk Służy do identyfikowania statystyk dotyczących zdarzeń, zwłaszcza gdy istnieje wiele statystyk o tym samym typie nośnika i kierunku zdarzenia.
codecName Nazwa kodera OPUS, G722.
bitrate Szybkość transmisji bitów odbierania dźwięku (bity na sekundę) Wartości ogólne znajdują się w zakresie 24 KB/s (typowe jest to 36–128 KB/s).
jitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
packets Całkowita liczba odebranych pakietów.
packetsPerSecond Szybkość pakietów (pakiety na sekundę)
packetsLost Łączna liczba utraconych pakietów.
packetsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.
jitterBufferDelayInMs Bufor roztrzasku (milisekundy) Niższa jest lepsza. Bufor roztrzasku jest używany do płynnego odtwarzania. Ta wartość określa, jak długo pakiety próbek pozostają w buforze roztrzasku.
audioOutputLevel Poziom głośności dźwięku ze strumienia odbierającego Wartości wahają się od 0 do 65536. Wartość 0 reprezentuje ciszę.
healedRatio Współczynnik ukrytych próbek (z wyjątkiem silentConcealedSamples) do całkowitej liczby odebranych próbek Tylko informacje.
transportId Identyfikator transportu Służy do kojarzenia statystyk w transportach.

Metryki wysyłania wideo

Począwszy od zestawu SDK w wersji 1.20.1, metryki wysyłania wideo zawierały altLayouts pole metryki, które umożliwia lepszą reprezentację statystyk strumienia simulcast.

Nazwa metryki opis Komentarze
id Identyfikator statystyk Służy do identyfikowania statystyk dotyczących zdarzeń, zwłaszcza gdy istnieje wiele statystyk o tym samym typie nośnika i kierunku zdarzenia.
codecName Nazwa kodera H264, VP8, VP9.
bitrate Szybkość transmisji bitów wysyłania wideo (bity na sekundę)
jitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
packets Łączna liczba wysłanych pakietów.
packetsPerSecond Szybkość pakietów (pakiety na sekundę)
packetsLost Łączna liczba utraconych pakietów zgłoszonych ze zdalnego końca.
packetsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.
rttInMs Czas rundy (milisekundy) Niższa jest lepsza. Obliczany na podstawie raportu odbiornika RTCP. Zalecamy czas rundy 200 ms lub mniej.
frameRateInput Szybkość klatek pochodzących ze źródła wideo (ramki na sekundę)
frameWidthInput Szerokość ramki ostatniej ramki pochodzącej ze źródła wideo (pikseli)
frameHeightInput Wysokość ramki ostatniej ramki pochodzącej ze źródła wideo (pikseli)
framesEncoded Liczba ramek pomyślnie zakodowanych dla strumienia RTP.
frameRateEncoded Szybkość ramki została pomyślnie zakodowana dla strumienia RTP (ramki na sekundę)
framesSent Liczba ramek wysłanych do strumienia RTP
frameRateSent Szybkość klatek wysyłanych do strumienia RTP (ramki na sekundę)
frameWidthSent Szerokość ramy zakodowanej ramki (piksel)
frameHeightSent Wysokość ramki zakodowanej (piksel)
keyFramesEncoded Klatki zostały pomyślnie zakodowane dla strumienia RTP
transportId Identyfikator transportu Służy do kojarzenia statystyk w transportach.
altLayouts Strumienie Simulcast altLayouts zawiera te same metryki do wysyłania wideo

Metryki odbierania wideo

W wersjach zestawu SDK starszych niż 1.20.1 jitterBufferDelayInMs istniały jako jitterBufferInMs.

Nazwa metryki opis Komentarze
id Identyfikator statystyk Służy do identyfikowania statystyk dotyczących zdarzeń, zwłaszcza gdy istnieje wiele statystyk o tym samym typie nośnika i kierunku zdarzenia.
codecName Nazwa kodera H264, VP8, VP9.
bitrate Szybkość transmisji bitów odbierania wideo (bity na sekundę)
jitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
packets Całkowita liczba odebranych pakietów.
packetsPerSecond Szybkość pakietów (pakiety na sekundę)
packetsLost Łączna liczba utraconych pakietów.
packetsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.
rttInMs Czas rundy (milisekundy) Niższa jest lepsza. Obliczany na podstawie raportu nadawcy RTCP. Zalecamy czas rundy 200 ms lub mniej.
streamId Identyfikator strumienia Wartość odpowiada wartości w elem streamId VideoStreamCommon.id Może służyć do dopasowania nadawcy.
jitterBufferDelayInMs Bufor roztrzasku (milisekundy) Niższa jest lepsza. Bufor roztrzasku jest używany do płynnego odtwarzania. Ta wartość określa, jak długo pakiety ramek pozostają w buforze roztrzasku.
frameRateDecoded Szybkość klatek poprawnie zdekodowana dla strumienia RTP (ramki na sekundę)
frameRateReceived Szybkość klatek odebranych w strumieniu RTP (ramki na sekundę)
frameWidthReceived Szerokość ramki zdekodowanej (piksel)
frameHeightReceived Wysokość ramki zdekodowanej (piksel)
longestFreezeDurationInMs Najdłuższy czas trwania zamrożenia (milisekundy)
totalFreezeDurationInMs Całkowity czas trwania zamrożenia (milisekundy)
framesReceived Łączna liczba ramek odebranych w strumieniu RTP
framesDecoded Całkowita liczba ramek poprawnie zdekodowanych dla strumienia RTP
framesDropped Całkowita liczba porzuconych ramek
keyFramesDecoded Całkowita liczba klatek kluczowych poprawnie zdekodowanych dla strumienia RTP
transportId Identyfikator transportu Służy do kojarzenia statystyk w transportach.

Metryki wysyłania udziału ekranu

Obecnie pola statystyk są takie same jak metryki wysyłania wideo.

Metryki odbierania udziału ekranu

Obecnie pola statystyk są takie same jak metryki odbierania wideo.

Metryki transportu

Metryki związane z transportem zostały oddzielone po zestawie SDK sieci Web ACS 1.20.1.

We wcześniejszych wersjach istniały tak jak pairRttInMs w statystykach rttInMs dotyczących audio, wideo i screenShare.

availableIncomingBitrate był availableBitrate w statystykach odbierania audio, wideo i screenShare.

availableOutgoingBitrate był availableBitrate w statystykach wysyłania audio, wideo i screenShare.

Nazwa metryki opis Komentarze
id Identyfikator transportu Służy do kojarzenia z identyfikatorem transportId w innych statystykach
rttInMs Czas rundy (milisekundy) Wartość jest obliczana na podstawie sprawdzania łączności STUN. Zalecamy czas rundy 200 ms lub mniej.
availableIncomingBitrate Szacowanie przepustowości (bity na sekundę) Wartość może być niedostępna w zależności od algorytmu szacowania przepustowości używanego w sesji WebRTC
availableOutgoingBitrate Szacowanie przepustowości (bity na sekundę) Wartość może być niedostępna w zależności od algorytmu szacowania przepustowości używanego w sesji WebRTC

Co się zmieniło w zestawie SDK w wersji 1.20.1 (OGÓLNA dostępność)

Teraz obsługujemy interfejs API funkcji MediaStats w wersji 1.20.1 (GA).

W porównaniu z poprzednimi wersjami beta wprowadziliśmy również drobne zmiany interfejsu API w tej wersji ogólnie dostępnej.

W poprzednich wersjach beta , zostały uwzględnione w statystykach pairRttInMsavailableBitrate audio, wideo i screenShare. Teraz te metryki są rozdzielone na metryki transportu.

Wprowadziliśmy packets pola metryk i packetsLost audio, wideo, screenShare statistics. Te metryki są przydatne do obliczania całkowitej liczby pakietów wysłanych lub odebranych między dwoma różnymi punktami czasu.

Statystyki frameRateOutput in video i screenShare są usuwane. Zamiast tego możesz użyć frameRateDecoded polecenia .

Nazwa pola jitterBufferInMs metryki została zmieniona na , aby jitterBufferDelayInMs zapewnić jaśniejszy opis, ponieważ ta metryka wskazuje czas trwania pozostanenia pakietu w buforze roztrzasku.

Statystyki jakości multimediów dotyczące trwającego połączenia

Statystyki jakości multimediów to rozszerzona funkcja podstawowego Call interfejsu API. Najpierw należy uzyskać obiekt interfejsu MediaStatisticsCallFeature API:

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

Obiekt MediaStatisticsCallFeature ma następującą strukturę interfejsu API:

  • Zdarzenie OnReportReceivedListener nasłuchuje okresowych raportów statystyk multimedialnych.
  • getReportIntervalInSeconds pobiera interwał (w sekundach) generowania raportu statystyk multimediów. Zestaw SDK używa 10 sekundy jako domyślnej.
  • updateReportIntervalInSeconds() aktualizuje interwał (w sekundach) generowania raportu statystyk multimediów. Zestaw SDK używa 10 sekundy jako domyślnej.
  • Element MediaStatisticsReport zawiera definicję statystyk wychodzących i przychodzących multimediów, skategoryzowanych przez udział audio, wideo i ekranu.
    • getOutgoingStatistics(): lista statystyk multimedialnych dla nośników wychodzących.
      • getAudioStatistics(): lista statystyk multimediów dla wychodzącego dźwięku.
      • getVideoStatistics(): lista statystyk multimediów dla wychodzącego wideo.
      • getScreenShareStatistics(): lista statystyk multimedialnych dla wychodzącego udziału ekranu.
      • getDataChannelStatistics(): lista statystyk multimedialnych dla kanału danych.
    • getIncomingStatistics(): lista statystyk multimedialnych dla nośników przychodzących.
      • getAudioStatistics(): lista statystyk multimedialnych dla przychodzącego dźwięku.
      • getVideoStatistics(): lista statystyk multimediów dla przychodzącego wideo.
      • getScreenShareStatistics(): lista statystyk multimediów dla przychodzącego udziału ekranu.
      • getDataChannelStatistics(): lista statystyk multimedialnych dla kanału danych.
    • getLastUpdatedAt(): data wygenerowania raportu.

Następnie zasubskrybuj addOnReportReceivedListener zdarzenie, aby otrzymywać regularne aktualizacje dotyczące bieżących statystyk jakości multimediów:

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

Najlepsze rozwiązania

Jeśli chcesz zebrać dane na potrzeby inspekcji offline, zalecamy zebranie danych i wysłanie ich do pozyskiwania potoku po zakończeniu wywołania. Jeśli przesyłasz dane podczas wywołania, może ona korzystać z przepustowości internetowej potrzebnej do kontynuowania wywołania usług Azure Communication Services (szczególnie wtedy, gdy dostępna przepustowość jest niska).

Metryki wychodzącego dźwięku

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów audio (bity na sekundę) Wartości ogólne znajdują się w zakresie 24 KB/s (typowe jest to 36–128 KB/s).
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.

Przychodzące metryki audio

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.
PacketsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.

Wychodzące metryki wideo

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów wysyłania wideo (bity na sekundę)
PacketCount Łączna liczba wysłanych pakietów.
FrameRate Szybkość klatek wysyłanych do strumienia RTP (ramki na sekundę)
FrameWidth Szerokość ramki zakodowanej (piksele)
FrameHeight Wysokość ramki zakodowanej (piksele)

Przychodzące metryki wideo

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów odbierania wideo (bity na sekundę)
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.
PacketsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.
StreamId Identyfikator strumienia Wartość streamId odpowiada identyfikatorowi filmu wideo uczestnika zdalnego. Może służyć do dopasowania nadawcy.
FrameRate Szybkość klatek odebranych w strumieniu RTP (ramki na sekundę)
FrameWidth Szerokość ramki zdekodowanej (piksele)
FrameHeight Wysokość ramki zdekodowanej (piksele)
TotalFreezeDurationInMs Całkowity czas trwania zamrożenia (milisekundy)

Metryki udostępniania ekranu wychodzącego

Obecnie pola statystyk są takie same jak metryki wideo wychodzące.

Metryki udziału ekranu przychodzącego

Obecnie pola statystyk są takie same jak przychodzące metryki wideo.

Metryki kanału danych wychodzących

Nazwa metryki opis Komentarze
PacketCount Łączna liczba wysłanych pakietów.

Metryki kanału danych przychodzących

Nazwa metryki opis Komentarze
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.

Statystyki jakości multimediów dotyczące trwającego połączenia

Statystyki jakości multimediów to rozszerzona funkcja podstawowego Call interfejsu API. Najpierw należy uzyskać obiekt interfejsu mediaStatisticsCallFeature API:

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

Obiekt mediaStatisticsCallFeature ma następującą strukturę interfejsu API:

  • Metoda didReceiveReport delegata nasłuchuje okresowych raportów statystyk multimedialnych.
  • reportIntervalInSeconds pobiera interwał (w sekundach) generowania raportu statystyk multimediów. Zestaw SDK używa 10 sekundy jako domyślnej.
  • updateReportInterval(inSeconds) aktualizuje interwał (w sekundach) generowania raportu statystyk multimediów. Zestaw SDK używa 10 sekundy jako domyślnej.
  • Obiekt MediaStatisticsReport zawiera definicję statystyk wychodzących i przychodzących multimediów, skategoryzowanych według udziału audio, wideo i ekranu.
    • outgoingMediaStatistics: lista statystyk multimedialnych dla nośników wychodzących.
      • audio: lista statystyk multimediów dla wychodzącego dźwięku.
      • video: lista statystyk multimedialnych dla wychodzącego wideo.
      • screenShare: lista statystyk multimedialnych dla udziału ekranu wychodzącego.
      • dataChannel: lista statystyk multimedialnych dla wychodzącego kanału danych.
    • incomingMediaStatistics: lista statystyk multimedialnych dla nośników przychodzących.
      • audio: lista statystyk multimedialnych dla przychodzącego dźwięku.
      • video: lista statystyk multimediów dla przychodzącego wideo.
      • screenShare: lista statystyk multimedialnych dla przychodzącego udziału ekranu.
      • dataChannel: lista statystyk multimedialnych dla przychodzącego kanału danych.
    • lastUpdated: data wygenerowania raportu.

Następnie zaimplementuj delegata didReceiveReport , aby uzyskać regularne aktualizacje dotyczące bieżących statystyk jakości multimediów:

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

Najlepsze rozwiązania

Jeśli chcesz zebrać dane na potrzeby inspekcji offline, zalecamy zebranie danych i wysłanie ich do pozyskiwania potoku po zakończeniu wywołania. Jeśli przesyłasz dane podczas wywołania, może ona korzystać z przepustowości internetowej potrzebnej do kontynuowania wywołania usług Azure Communication Services (szczególnie wtedy, gdy dostępna przepustowość jest niska).

Metryki wychodzącego dźwięku

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów audio (bity na sekundę) Wartości ogólne znajdują się w zakresie 24 KB/s (typowe jest to 36–128 KB/s).
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.

Przychodzące metryki audio

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.
PacketsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.

Wychodzące metryki wideo

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów wysyłania wideo (bity na sekundę)
PacketCount Łączna liczba wysłanych pakietów.
FrameRate Szybkość klatek wysyłanych do strumienia RTP (ramki na sekundę)
FrameWidth Szerokość ramki zakodowanej (piksele)
FrameHeight Wysokość ramki zakodowanej (piksele)

Przychodzące metryki wideo

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów odbierania wideo (bity na sekundę)
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.
PacketsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.
StreamId Identyfikator strumienia Wartość streamId odpowiada identyfikatorowi filmu wideo uczestnika zdalnego. Może służyć do dopasowania nadawcy.
FrameRate Szybkość klatek odebranych w strumieniu RTP (ramki na sekundę)
FrameWidth Szerokość ramki zdekodowanej (piksele)
FrameHeight Wysokość ramki zdekodowanej (piksele)
TotalFreezeDurationInMs Całkowity czas trwania zamrożenia (milisekundy)

Metryki udostępniania ekranu wychodzącego

Obecnie pola statystyk są takie same jak metryki wideo wychodzące.

Metryki udziału ekranu przychodzącego

Obecnie pola statystyk są takie same jak przychodzące metryki wideo.

Metryki kanału danych wychodzących

Nazwa metryki opis Komentarze
PacketCount Łączna liczba wysłanych pakietów.

Metryki kanału danych przychodzących

Nazwa metryki opis Komentarze
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.

Statystyki jakości multimediów dotyczące trwającego połączenia

Statystyki jakości multimediów to rozszerzona funkcja podstawowego CommunicationCall interfejsu API. Najpierw należy uzyskać obiekt interfejsu MediaStatisticsCallFeature API:

MediaStatisticsCallFeature mediaStatisticsCallFeature = call.Features.MediaStatistics;

Obiekt MediaStatisticsCallFeature funkcji ma następującą strukturę interfejsu API:

  • Zdarzenie ReportReceived nasłuchuje okresowych raportów statystyk multimedialnych.
  • ReportIntervalInSeconds pobiera interwał (w sekundach) generowania raportu statystyk multimediów. Zestaw SDK używa 10 sekundy jako domyślnej.
  • UpdateReportIntervalInSeconds() aktualizuje interwał (w sekundach) generowania raportu statystyk multimediów. Zestaw SDK używa 10 sekundy jako domyślnej.
  • Obiekt MediaStatisticsReport zawiera definicję statystyk wychodzących i przychodzących multimediów, skategoryzowanych według udziału audio, wideo i ekranu.
    • OutgoingMediaStatistics: lista statystyk multimedialnych dla nośników wychodzących.
      • Audio: lista statystyk multimediów dla wychodzącego dźwięku.
      • Video: lista statystyk multimedialnych dla wychodzącego wideo.
      • ScreenShare: lista statystyk multimedialnych dla udziału ekranu wychodzącego.
      • DataChannel: lista statystyk multimedialnych dla wychodzącego kanału danych.
    • IncomingMediaStatistics: lista statystyk multimedialnych dla nośników przychodzących.
      • Audio: lista statystyk multimedialnych dla przychodzącego dźwięku.
      • Video: lista statystyk multimediów dla przychodzącego wideo.
      • ScreenShare: lista statystyk multimedialnych dla przychodzącego udziału ekranu.
      • DataChannel: lista statystyk multimedialnych dla przychodzącego kanału danych.
    • LastUpdateAt: data wygenerowania raportu.

Następnie zasubskrybuj SampleReported zdarzenie, aby otrzymywać regularne aktualizacje dotyczące bieżących statystyk jakości multimediów:

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

Najlepsze rozwiązania

Jeśli chcesz zebrać dane na potrzeby inspekcji offline, zalecamy zebranie danych i wysłanie ich do pozyskiwania potoku po zakończeniu wywołania. Jeśli przesyłasz dane podczas wywołania, może ona korzystać z przepustowości internetowej potrzebnej do kontynuowania wywołania usług Azure Communication Services (szczególnie wtedy, gdy dostępna przepustowość jest niska).

Metryki wychodzącego dźwięku

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów audio (bity na sekundę) Wartości ogólne znajdują się w zakresie 24 KB/s (typowe jest to 36–128 KB/s).
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.

Przychodzące metryki audio

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.
PacketsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.

Wychodzące metryki wideo

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów wysyłania wideo (bity na sekundę)
PacketCount Łączna liczba wysłanych pakietów.
FrameRate Szybkość klatek wysyłanych do strumienia RTP (ramki na sekundę)
FrameWidth Szerokość ramki zakodowanej (piksele)
FrameHeight Wysokość ramki zakodowanej (piksele)

Przychodzące metryki wideo

Nazwa metryki opis Komentarze
CodecName Nazwa kodera
BitrateInBps Szybkość transmisji bitów odbierania wideo (bity na sekundę)
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.
PacketsLostPerSecond Współczynnik utraty pakietów (pakiety na sekundę) Niższa jest lepsza.
StreamId Identyfikator strumienia Wartość streamId odpowiada identyfikatorowi filmu wideo uczestnika zdalnego. Może służyć do dopasowania nadawcy.
FrameRate Szybkość klatek odebranych w strumieniu RTP (ramki na sekundę)
FrameWidth Szerokość ramki zdekodowanej (piksele)
FrameHeight Wysokość ramki zdekodowanej (piksele)
TotalFreezeDurationInMs Całkowity czas trwania zamrożenia (milisekundy)

Metryki udostępniania ekranu wychodzącego

Obecnie pola statystyk są takie same jak metryki wideo wychodzące.

Metryki udziału ekranu przychodzącego

Obecnie pola statystyk są takie same jak przychodzące metryki wideo.

Metryki kanału danych wychodzących

Nazwa metryki opis Komentarze
PacketCount Łączna liczba wysłanych pakietów.

Metryki kanału danych przychodzących

Nazwa metryki opis Komentarze
JitterInMs Zakłócenia pakietów (milisekundy) Niższa jest lepsza.
PacketCount Łączna liczba wysłanych pakietów.