Teilen über


Statistiken zur Medienqualität

Damit Sie die Medienqualität in VoIP- und Videoanrufen, die Azure Communication Services verwenden, besser verstehen, ist ein Feature namens Medienqualitätsstatistiken verfügbar. Verwenden Sie sie, um detaillierte Metriken der Audio-, Video- und Bildschirmfreigabequalität für eingehende und ausgehende Anrufe zu untersuchen.

Statistiken zur Medienqualität für einen laufenden Anruf

Wichtig

Ab SDK-Version 1.20.1 ist ein Schnittstellenupdate für die Medienqualitätsstatistiken im SDK verfügbar.

Bei „Statistiken zur Medienqualität“ handelt es sich um ein erweitertes Feature der Call-Kern-API. Sie müssen zuerst das mediaStatsFeature-API-Objekt abrufen:

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

Um die Medienstatistikdaten zu erhalten, können Sie sampleReported-Ereignisse oder summaryReported-Ereignisse abonnieren.

das sampleReported-Ereignis löst jede Sekunde aus. Dies eignet sich als Datenquelle für die Benutzeroberflächenanzeige oder Ihre eigene Datenpipeline.

Das summaryReported-Ereignis enthält die über Intervalle aggregierten Werte der Daten, was nützlich ist, wenn Sie nur eine Zusammenfassung benötigen.

Wenn Sie das Intervall des summaryReported-Ereignisses steuern möchten, müssen Sie mediaStatsCollectorOptions des Typs MediaStatsCollectorOptions definieren. Andernfalls verwendet das SDK Standardwerte.

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

Wenn Sie den Medienstatistik-Collector nicht verwenden müssen, können Sie die dispose-Methode von mediaStatsCollector aufrufen.

mediaStatsCollector.dispose();

Die dispose-Methode von mediaStatsCollector muss nicht jedes Mal aufgerufen werden, wenn der Aufruf endet, da die Collectors intern zurückgefordert werden, wenn der Aufruf endet.

MediaStatsCollectorOptions

MediaStatsCollectorOptions ist optional, und es gibt zwei optionale Felder in MediaStatsCollectorOptions.

  • aggregationInterval ist das Intervall in Sekunden, in dem die Statistiken aggregiert werden. Der Standardwert ist 10.
  • dataPointsPerAggregation definiert, über wie viele Datenpunkte jedes Aggregationsereignis verfügt. Der Standardwert ist 6.

Diese beiden Werte bestimmen die Häufigkeit, mit der das SDK das summaryReported-Ereignis ausgibt, und die Anzahl der aggregierten Datenpunkte, die in den Bericht aufgenommen werden.

Das summaryReported-Ereignis wurde alle aggregationInterval * dataPointsPerAggregation Sekunden ausgelöst.

Wenn Sie beispielsweise die folgenden Werte festlegen:

  • aggregationInterval = 1
  • dataPointsPerAggregation = 60

Das summaryReported-Ereignis wird alle 60 Sekunden ausgelöst und enthält 60 eindeutige Einheiten für jede aufgezeichnete Statistik.

Wenn Sie die folgenden Werte festlegen:

  • aggregatinInterval = 60
  • dataPointsPerAggregation = 1

Das summaryReported-Ereignis wird alle 60 Sekunden ausgelöst und enthält 1 eindeutige Einheit für jede aufgezeichnete Statistik.

Bewährte Methoden

Wenn Sie die Daten für die Offlineüberprüfung erfassen möchten, wird empfohlen, die Daten zu sammeln und nach Beendigung des Anrufs an Ihre Pipelinedatenerfassung zu senden. Wenn Sie die Daten während eines laufenden Anrufs übertragen, wird dadurch möglicherweise Internetbandbreite belegt, die für die Fortsetzung des Azure Communication Services-Anrufs benötigt wird (insbesondere, wenn die verfügbare Bandbreite gering ist).

Sowohl im sampleReported-Ereignis als auch im summaryReported-Ereignis sind die Medienstatistikdaten keine einfache Schlüssel-Wert-Zuordnung.

Es folgt ist die Typdeklaration der Ereignisdaten, die vom sampleReported-Ereignis gemeldet werden.

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

Die Ereignisdaten stellen die Statistikdaten für jeden Mediendatenstrom im Anruf bereit, einschließlich der Sende- und Empfangsrichtung.

Es wird empfohlen, das Ereignis mithilfe der console.log zu drucken, um Layout- und Wertänderungen zu beobachten, damit Sie eine geeignete Methode zum Anzeigen oder Verarbeiten der Daten entsprechend Ihrem Nutzungsszenario finden können.

Audiosendemetriken

Metrikname Beschreibung Kommentare
id Statistik-ID Wird verwendet, um Statistiken in den Ereignissen zu identifizieren, insbesondere wenn in einem Ereignis mehrere Statistiken mit demselben Medientyp und derselben Richtung vorhanden sind.
codecName Codecname OPUS, G722
bitrate Audio-Sendebitrate (Bits pro Sekunde) Gebräuchliche Werte liegen im Bereich von 24 KBit/s (typischerweise zwischen 36 und 128 KBit/s).
jitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
packets Gesamtzahl der gesendeten Pakete
packetsPerSecond Paketrate (Pakete pro Sekunde)
packetsLost Die Gesamtzahl der vom Remote-End gemeldeten verloren gegangenen Pakete
packetsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.
rttInMs Round-Trip Time (Millisekunden) Niedrige Werte sind besser als höhere. Sie wird aus dem RTCP-Empfängerbericht berechnet. Es wird eine Round-Trip Time (RTT) von maximal 200 ms empfohlen.
audioInputLevel Audiolautstärkepegel vom Mikrofon Der Wert liegt zwischen 0 und 65536. Der Wert 0 steht für Stille.
transportId Transport-ID Wird verwendet, um die Statistiken in Transporten zuzuordnen.

Audio-Empfangsmetriken

In den SDK-Versionen vor 1.20.1 war jitterBufferDelayInMs als jitterBufferInMs vorhanden.

Metrikname Beschreibung Kommentare
id Statistik-ID Wird verwendet, um Statistiken in den Ereignissen zu identifizieren, insbesondere wenn in einem Ereignis mehrere Statistiken mit demselben Medientyp und derselben Richtung vorhanden sind.
codecName Codecname OPUS, G722
bitrate Bitrate des Videoempfangs (Bits pro Sekunde) Gebräuchliche Werte liegen im Bereich von 24 KBit/s (typischerweise zwischen 36 und 128 KBit/s).
jitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
packets Die Gesamtzahl der empfangenen Pakete
packetsPerSecond Paketrate (Pakete pro Sekunde)
packetsLost Die Gesamtzahl der verloren gegangenen Pakete
packetsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.
jitterBufferDelayInMs Jitterpuffer (Millisekunden) Niedrige Werte sind besser als höhere. Der Jitterpuffer wird für ein reibungsloses Playout verwendet. Dieser Wert gibt an, wie lange die Pakete der Samples im Jitterpuffer verbleiben.
audioOutputLevel Audiolautstärkepegel vom empfangenen Datenstrom Der Wert liegt zwischen 0 und 65536. Der Wert 0 steht für Stille.
healedRatio Verhältnis der verdeckten Stichproben (außer silentConcealedSamples) zu den insgesamt erhaltenen Stichproben Nur Informationen
transportId Transport-ID Wird verwendet, um die Statistiken in Transporten zuzuordnen.

Videosendemetriken

Ab SDK Version 1.20.1 enthielten die Videosendemetriken das Metrikfeld altLayouts, das eine bessere Darstellung von Simulcast-Datenstromstatistiken ermöglicht.

Metrikname Beschreibung Kommentare
id Statistik-ID Wird verwendet, um Statistiken in den Ereignissen zu identifizieren, insbesondere wenn in einem Ereignis mehrere Statistiken mit demselben Medientyp und derselben Richtung vorhanden sind.
codecName Codecname H264, VP8, VP9
bitrate Videosendebitrate (Bits pro Sekunde)
jitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
packets Gesamtzahl der gesendeten Pakete
packetsPerSecond Paketrate (Pakete pro Sekunde)
packetsLost Die Gesamtzahl der vom Remote-End gemeldeten verloren gegangenen Pakete
packetsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.
rttInMs Round-Trip Time (Millisekunden) Niedrige Werte sind besser als höhere. Sie wird aus dem RTCP-Empfängerbericht berechnet. Es wird eine Round-Trip Time (RTT) von maximal 200 ms empfohlen.
frameRateInput Bildfrequenz, die aus der Videoquelle stammt (Bilder pro Sekunde)
frameWidthInput Framebreite des letzten Frames, der aus der Videoquelle (Pixel) stammt
frameHeightInput Framehöhe des letzten Frames, der aus der Videoquelle (Pixel) stammt
framesEncoded Anzahl der für den RTP-Datenstrom erfolgreich codierten Frames
frameRateEncoded Die erfolgreich für den RTP-Datenstrom codierte Bildfrequenz (Bilder pro Sekunde)
framesSent Die Anzahl der Frames, die im RTP-Datenstrom gesendet wurden
frameRateSent Im RTP-Datenstrom gesendete Bildfrequenz (Bilder pro Sekunde)
frameWidthSent Framebreite des codierten Frames (Pixel)
frameHeightSent Framehöhe des codierten Frames (Pixel)
keyFramesEncoded Für den RTP-Datenstrom erfolgreich codierte Keyframes
transportId Transport-ID Wird verwendet, um die Statistiken in Transporten zuzuordnen.
altLayouts Simulcast-Datenströme altLayouts enthält die gleichen Metriken für das Senden von Videos

Video-Empfangsmetriken

In den SDK-Versionen vor 1.20.1 war jitterBufferDelayInMs als jitterBufferInMs vorhanden.

Metrikname Beschreibung Kommentare
id Statistik-ID Wird verwendet, um Statistiken in den Ereignissen zu identifizieren, insbesondere wenn in einem Ereignis mehrere Statistiken mit demselben Medientyp und derselben Richtung vorhanden sind.
codecName Codecname H264, VP8, VP9
bitrate Bitrate für Videoempfang (Bits pro Sekunde)
jitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
packets Die Gesamtzahl der empfangenen Pakete
packetsPerSecond Paketrate (Pakete pro Sekunde)
packetsLost Die Gesamtzahl der verloren gegangenen Pakete
packetsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.
rttInMs Round-Trip Time (Millisekunden) Niedrige Werte sind besser als höhere. Sie wird aus dem RTCP-Absenderbericht berechnet. Es wird eine Round-Trip Time (RTT) von maximal 200 ms empfohlen.
streamId Stream-ID Der Wert streamId entspricht id in VideoStreamCommon. Er kann zum Abgleich des Absenders verwendet werden.
jitterBufferDelayInMs Jitterpuffer (Millisekunden) Niedrige Werte sind besser als höhere. Der Jitterpuffer wird für ein reibungsloses Playout verwendet. Dieser Wert gibt an, wie lange die Pakete des Frames im Jitterpuffer bleiben.
frameRateDecoded Für den RTP-Datenstrom richtig decodierte Bildfrequenz (Bilder pro Sekunde)
frameRateReceived Im RTP-Datenstrom empfangene Bildfrequenz (Bilder pro Sekunde)
frameWidthReceived Framebreite des decodierten Frames (Pixel)
frameHeightReceived Framehöhe des decodierten Frames (Pixel)
longestFreezeDurationInMs Dauer der längsten Fixierung (Millisekunden)
totalFreezeDurationInMs Gesamtfixierdauer (Millisekunden)
framesReceived Gesamtzahl der im RTP-Datenstrom empfangenen Frames
framesDecoded Gesamtzahl der Frames, die für den RTP-Datenstrom ordnungsgemäß decodiert wurden
framesDropped Gesamtzahl der verworfenen Frames
keyFramesDecoded Gesamtzahl der Keyframes, die für den RTP-Datenstrom ordnungsgemäß decodiert wurden
transportId Transport-ID Wird verwendet, um die Statistiken in Transporten zuzuordnen.

Bildschirmfreigabe-Sendemetriken

Derzeit sind die Statistikfelder mit den Videosendemetriken identisch.

Bildschirmfreigabe-Empfangsmetriken

Derzeit sind die Statistikfelder mit den Videoempfangsmetriken identisch.

Transportmetriken

Die transportbezogenen Metriken wurden nach ACS Web SDK 1.20.1 ausgegliedert.

In früheren Versionen war rttInMs als pairRttInMs in den Statistiken für Audio, Video und Bildschirmfreigabe (screenShare) vorhanden.

availableIncomingBitrate wurde in den Empfangsstatistiken für Audio, Video und screenShare als availableBitrate bezeichnet.

availableOutgoingBitrate wurde in den Sendestatistiken für Audio, Video und screenShare als availableBitrate bezeichnet.

Metrikname Beschreibung Kommentare
id Transport-ID Wird verwendet, um die Transport-ID in anderen Statistiken zuzuordnen
rttInMs Round-Trip Time (Millisekunden) Der Wert wird aus der STUN-Konnektivitätsprüfung berechnet. Es wird eine Round-Trip Time (RTT) von maximal 200 ms empfohlen.
availableIncomingBitrate Bandbreitenschätzung (Bits pro Sekunde) Der Wert ist je nach dem in der WebRTC-Sitzung verwendeten Algorithmus zur Bandbreitenschätzung möglicherweise nicht verfügbar.
availableOutgoingBitrate Bandbreitenschätzung (Bits pro Sekunde) Der Wert ist je nach dem in der WebRTC-Sitzung verwendeten Algorithmus zur Bandbreitenschätzung möglicherweise nicht verfügbar.

Änderungen in SDK Version 1.20.1 (GA)

MediaStats-Feature-API wird jetzt in 1.20.1 (GA) unterstützt. Im Vergleich zu den vorherigen Betaversionen wurden auch einige kleinere Änderungen an der API-Schnittstelle in dieser GA-Version vorgenommen.

In den vorherigen Betaversionen waren pairRttInMs, availableBitrate in den Audio-, Video- und screenShare-Statistiken enthalten. Diese Metriken wurden nun in die Transportmetriken ausgegliedert.

Wir haben die Metrikfelder packets, packetsLost in Audio-, Video-, screenShare-Statistiken eingeführt. Diese Metriken sind nützlich, um die Gesamtzahl der Pakete zu berechnen, die zwischen zwei verschiedenen Zeitpunkten gesendet oder empfangen wurden.

frameRateOutput wurde aus Video- und screenShare-Statistiken entfernt. Sie können stattdessen frameRateDecoded verwenden.

Das Metrikfeld jitterBufferInMs wurde in jitterBufferDelayInMs umbenannt, um eine klarere Beschreibung bereitzustellen, da diese Metrik die Verweildauer eines Pakets im Jitterpuffer angibt.

Statistiken zur Medienqualität für einen laufenden Anruf

Bei „Statistiken zur Medienqualität“ handelt es sich um ein erweitertes Feature der Call-Kern-API. Sie müssen zuerst das MediaStatisticsCallFeature-API-Objekt abrufen:

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

Das Objekt MediaStatisticsCallFeature weist die folgende API-Struktur auf:

  • Das OnReportReceivedListener-Ereignis lauscht nach regelmäßigen Medienstatistikberichten.
  • getReportIntervalInSeconds ruft das Intervall der Erstellung von Medienstatistikberichten in Sekunden ab. Das SDK verwendet 10 Sekunden als Standard.
  • updateReportIntervalInSeconds() aktualisiert das in Sekunden angegebene Intervall der Erstellung von Medienstatistikberichten. Das SDK verwendet 10 Sekunden als Standard.
  • Ein MediaStatisticsReport-Objekt enthält die Definition der Statistiken für ausgehende und eingehende Medien, kategorisiert nach Audio, Video und Bildschirmfreigabe.
    • getOutgoingStatistics(): Die Liste der Medienstatistiken für ausgehende Medien
      • getAudioStatistics(): Die Liste der Medienstatistiken für ausgehende Audiodaten
      • getVideoStatistics(): Die Liste der Medienstatistiken für ausgehende Videodaten
      • getScreenShareStatistics(): Die Liste der Medienstatistiken für die ausgehende Bildschirmfreigabe
      • getDataChannelStatistics(): Die Liste der Medienstatistiken für den Datenkanal
    • getIncomingStatistics(): Die Liste der Medienstatistiken für eingehende Medien
      • getAudioStatistics(): Die Liste der Medienstatistiken für eingehende Audiodaten
      • getVideoStatistics(): Die Liste der Medienstatistiken für eingehende Videodaten
      • getScreenShareStatistics(): Die Liste der Medienstatistiken für die eingehende Bildschirmfreigabe
      • getDataChannelStatistics(): Die Liste der Medienstatistiken für den Datenkanal
    • getLastUpdatedAt(): Das Datum, an dem der Bericht generiert wurde

Abonnieren Sie dann das addOnReportReceivedListener-Ereignis, um regelmäßige Updates zu den aktuellen Medienqualitätsstatistiken zu erhalten:

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

Bewährte Methoden

Wenn Sie die Daten für die Offlineüberprüfung erfassen möchten, wird empfohlen, die Daten zu sammeln und nach Beendigung des Anrufs an Ihre Pipelinedatenerfassung zu senden. Wenn Sie die Daten während eines laufenden Anrufs übertragen, wird dadurch möglicherweise Internetbandbreite belegt, die für die Fortsetzung des Azure Communication Services-Anrufs benötigt wird (insbesondere, wenn die verfügbare Bandbreite gering ist).

Metriken für ausgehende Audiodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Audiosendebitrate (Bits pro Sekunde) Gebräuchliche Werte liegen im Bereich von 24 KBit/s (typischerweise zwischen 36 und 128 KBit/s).
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete

Metriken für eingehende Audiodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete
PacketsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.

Metriken für ausgehende Videodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Videosendebitrate (Bits pro Sekunde)
PacketCount Gesamtzahl der gesendeten Pakete
FrameRate Im RTP-Datenstrom gesendete Bildfrequenz (Bilder pro Sekunde)
FrameWidth Framebreite des codierten Frames (Pixel)
FrameHeight Framehöhe des codierten Frames (Pixel)

Metriken für eingehende Videodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Bitrate für Videoempfang (Bits pro Sekunde)
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete
PacketsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.
StreamId Stream-ID Der Wert streamId entspricht der ID des Videos des Remoteteilnehmers. Er kann zum Abgleich des Absenders verwendet werden.
FrameRate Im RTP-Datenstrom empfangene Bildfrequenz (Bilder pro Sekunde)
FrameWidth Framebreite des decodierten Frames (Pixel)
FrameHeight Framehöhe des decodierten Frames (Pixel)
TotalFreezeDurationInMs Gesamtfixierdauer (Millisekunden)

Metriken für ausgehende Bildschirmfreigaben

Derzeit sind die Statistikfelder identisch mit den Metriken für ausgehende Videodaten.

Metriken für eingehende Bildschirmfreigaben

Derzeit sind die Statistikfelder mit den Metriken für eingehende Videodaten identisch.

Metriken für den ausgehenden Datenkanal

Metrikname Beschreibung Kommentare
PacketCount Gesamtzahl der gesendeten Pakete

Metriken für den eingehenden Datenkanal

Metrikname Beschreibung Kommentare
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete

Statistiken zur Medienqualität für einen laufenden Anruf

Bei „Statistiken zur Medienqualität“ handelt es sich um ein erweitertes Feature der Call-Kern-API. Sie müssen zuerst das mediaStatisticsCallFeature-API-Objekt abrufen:

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

Das Objekt mediaStatisticsCallFeature weist die folgende API-Struktur auf:

  • Die didReceiveReport-Delegatmethode lauscht nach regelmäßigen Medienstatistikberichten.
  • reportIntervalInSeconds ruft das Intervall der Erstellung von Medienstatistikberichten in Sekunden ab. Das SDK verwendet 10 Sekunden als Standard.
  • updateReportInterval(inSeconds) aktualisiert das in Sekunden angegebene Intervall der Erstellung von Medienstatistikberichten. Das SDK verwendet 10 Sekunden als Standard.
  • Ein MediaStatisticsReport-Objekt enthält die Definition der Statistiken für ausgehende und eingehende Medien, kategorisiert nach Audio, Video und Bildschirmfreigabe.
    • outgoingMediaStatistics: Die Liste der Medienstatistiken für ausgehende Medien
      • audio: Die Liste der Medienstatistiken für ausgehende Audiodaten
      • video: Die Liste der Medienstatistiken für ausgehende Videodaten
      • screenShare: Die Liste der Medienstatistiken für die ausgehende Bildschirmfreigabe
      • dataChannel: Die Liste der Medienstatistiken für den ausgehenden Datenkanal
    • incomingMediaStatistics: Die Liste der Medienstatistiken für eingehende Medien
      • audio: Die Liste der Medienstatistiken für eingehende Audiodaten
      • video: Die Liste der Medienstatistiken für eingehende Videodaten
      • screenShare: Die Liste der Medienstatistiken für die eingehende Bildschirmfreigabe
      • dataChannel: Die Liste der Medienstatistiken für den eingehenden Datenkanal
    • lastUpdated: Das Datum, an dem der Bericht generiert wurde

Implementieren Sie dann den didReceiveReport-Delegat, um regelmäßige Updates zu den aktuellen Medienqualitätsstatistiken zu erhalten:

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

Bewährte Methoden

Wenn Sie die Daten für die Offlineüberprüfung erfassen möchten, wird empfohlen, die Daten zu sammeln und nach Beendigung des Anrufs an Ihre Pipelinedatenerfassung zu senden. Wenn Sie die Daten während eines laufenden Anrufs übertragen, wird dadurch möglicherweise Internetbandbreite belegt, die für die Fortsetzung des Azure Communication Services-Anrufs benötigt wird (insbesondere, wenn die verfügbare Bandbreite gering ist).

Metriken für ausgehende Audiodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Audiosendebitrate (Bits pro Sekunde) Gebräuchliche Werte liegen im Bereich von 24 KBit/s (typischerweise zwischen 36 und 128 KBit/s).
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete

Metriken für eingehende Audiodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete
PacketsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.

Metriken für ausgehende Videodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Videosendebitrate (Bits pro Sekunde)
PacketCount Gesamtzahl der gesendeten Pakete
FrameRate Im RTP-Datenstrom gesendete Bildfrequenz (Bilder pro Sekunde)
FrameWidth Framebreite des codierten Frames (Pixel)
FrameHeight Framehöhe des codierten Frames (Pixel)

Metriken für eingehende Videodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Bitrate für Videoempfang (Bits pro Sekunde)
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete
PacketsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.
StreamId Stream-ID Der Wert streamId entspricht der ID des Videos des Remoteteilnehmers. Er kann zum Abgleich des Absenders verwendet werden.
FrameRate Im RTP-Datenstrom empfangene Bildfrequenz (Bilder pro Sekunde)
FrameWidth Framebreite des decodierten Frames (Pixel)
FrameHeight Framehöhe des decodierten Frames (Pixel)
TotalFreezeDurationInMs Gesamtfixierdauer (Millisekunden)

Metriken für ausgehende Bildschirmfreigaben

Derzeit sind die Statistikfelder identisch mit den Metriken für ausgehende Videodaten.

Metriken für eingehende Bildschirmfreigaben

Derzeit sind die Statistikfelder mit den Metriken für eingehende Videodaten identisch.

Metriken für den ausgehenden Datenkanal

Metrikname Beschreibung Kommentare
PacketCount Gesamtzahl der gesendeten Pakete

Metriken für den eingehenden Datenkanal

Metrikname Beschreibung Kommentare
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete

Statistiken zur Medienqualität für einen laufenden Anruf

Bei „Statistiken zur Medienqualität“ handelt es sich um ein erweitertes Feature der CommunicationCall-Kern-API. Sie müssen zuerst das MediaStatisticsCallFeature-API-Objekt abrufen:

MediaStatisticsCallFeature mediaStatisticsCallFeature = call.Features.MediaStatistics;

Das MediaStatisticsCallFeature-Featureobjekt weist die folgende API-Struktur auf:

  • Das ReportReceived-Ereignis lauscht nach regelmäßigen Medienstatistikberichten.
  • ReportIntervalInSeconds ruft das Intervall der Erstellung von Medienstatistikberichten in Sekunden ab. Das SDK verwendet 10 Sekunden als Standard.
  • UpdateReportIntervalInSeconds() aktualisiert das in Sekunden angegebene Intervall der Erstellung von Medienstatistikberichten. Das SDK verwendet 10 Sekunden als Standard.
  • Ein MediaStatisticsReport-Objekt enthält die Definition der Statistiken für ausgehende und eingehende Medien, kategorisiert nach Audio, Video und Bildschirmfreigabe.
    • OutgoingMediaStatistics: Die Liste der Medienstatistiken für ausgehende Medien
      • Audio: Die Liste der Medienstatistiken für ausgehende Audiodaten
      • Video: Die Liste der Medienstatistiken für ausgehende Videodaten
      • ScreenShare: Die Liste der Medienstatistiken für die ausgehende Bildschirmfreigabe
      • DataChannel: Die Liste der Medienstatistiken für den ausgehenden Datenkanal
    • IncomingMediaStatistics: Die Liste der Medienstatistiken für eingehende Medien
      • Audio: Die Liste der Medienstatistiken für eingehende Audiodaten
      • Video: Die Liste der Medienstatistiken für eingehende Videodaten
      • ScreenShare: Die Liste der Medienstatistiken für die eingehende Bildschirmfreigabe
      • DataChannel: Die Liste der Medienstatistiken für den eingehenden Datenkanal
    • LastUpdateAt: Das Datum, an dem der Bericht generiert wurde

Abonnieren Sie dann das SampleReported-Ereignis, um regelmäßige Updates zu den aktuellen Medienqualitätsstatistiken zu erhalten:

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

Bewährte Methoden

Wenn Sie die Daten für die Offlineüberprüfung erfassen möchten, wird empfohlen, die Daten zu sammeln und nach Beendigung des Anrufs an Ihre Pipelinedatenerfassung zu senden. Wenn Sie die Daten während eines laufenden Anrufs übertragen, wird dadurch möglicherweise Internetbandbreite belegt, die für die Fortsetzung des Azure Communication Services-Anrufs benötigt wird (insbesondere, wenn die verfügbare Bandbreite gering ist).

Metriken für ausgehende Audiodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Audiosendebitrate (Bits pro Sekunde) Gebräuchliche Werte liegen im Bereich von 24 KBit/s (typischerweise zwischen 36 und 128 KBit/s).
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete

Metriken für eingehende Audiodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete
PacketsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.

Metriken für ausgehende Videodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Videosendebitrate (Bits pro Sekunde)
PacketCount Gesamtzahl der gesendeten Pakete
FrameRate Im RTP-Datenstrom gesendete Bildfrequenz (Bilder pro Sekunde)
FrameWidth Framebreite des codierten Frames (Pixel)
FrameHeight Framehöhe des codierten Frames (Pixel)

Metriken für eingehende Videodaten

Metrikname Beschreibung Kommentare
CodecName Codecname
BitrateInBps Bitrate für Videoempfang (Bits pro Sekunde)
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete
PacketsLostPerSecond Paketverlustrate (Pakete pro Sekunde) Niedrige Werte sind besser als höhere.
StreamId Stream-ID Der Wert streamId entspricht der ID des Videos des Remoteteilnehmers. Er kann zum Abgleich des Absenders verwendet werden.
FrameRate Im RTP-Datenstrom empfangene Bildfrequenz (Bilder pro Sekunde)
FrameWidth Framebreite des decodierten Frames (Pixel)
FrameHeight Framehöhe des decodierten Frames (Pixel)
TotalFreezeDurationInMs Gesamtfixierdauer (Millisekunden)

Metriken für ausgehende Bildschirmfreigaben

Derzeit sind die Statistikfelder identisch mit den Metriken für ausgehende Videodaten.

Metriken für eingehende Bildschirmfreigaben

Derzeit sind die Statistikfelder mit den Metriken für eingehende Videodaten identisch.

Metriken für den ausgehenden Datenkanal

Metrikname Beschreibung Kommentare
PacketCount Gesamtzahl der gesendeten Pakete

Metriken für den eingehenden Datenkanal

Metrikname Beschreibung Kommentare
JitterInMs Paketjitter (Millisekunden) Niedrige Werte sind besser als höhere.
PacketCount Gesamtzahl der gesendeten Pakete