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
= 1dataPointsPerAggregation
= 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
= 60dataPointsPerAggregation
= 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 verwendet10
Sekunden als Standard.updateReportIntervalInSeconds()
aktualisiert das in Sekunden angegebene Intervall der Erstellung von Medienstatistikberichten. Das SDK verwendet10
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 MediengetAudioStatistics()
: Die Liste der Medienstatistiken für ausgehende AudiodatengetVideoStatistics()
: Die Liste der Medienstatistiken für ausgehende VideodatengetScreenShareStatistics()
: Die Liste der Medienstatistiken für die ausgehende BildschirmfreigabegetDataChannelStatistics()
: Die Liste der Medienstatistiken für den Datenkanal
getIncomingStatistics()
: Die Liste der Medienstatistiken für eingehende MediengetAudioStatistics()
: Die Liste der Medienstatistiken für eingehende AudiodatengetVideoStatistics()
: Die Liste der Medienstatistiken für eingehende VideodatengetScreenShareStatistics()
: Die Liste der Medienstatistiken für die eingehende BildschirmfreigabegetDataChannelStatistics()
: 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 verwendet10
Sekunden als Standard.updateReportInterval(inSeconds)
aktualisiert das in Sekunden angegebene Intervall der Erstellung von Medienstatistikberichten. Das SDK verwendet10
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 Medienaudio
: Die Liste der Medienstatistiken für ausgehende Audiodatenvideo
: Die Liste der Medienstatistiken für ausgehende VideodatenscreenShare
: Die Liste der Medienstatistiken für die ausgehende BildschirmfreigabedataChannel
: Die Liste der Medienstatistiken für den ausgehenden Datenkanal
incomingMediaStatistics
: Die Liste der Medienstatistiken für eingehende Medienaudio
: Die Liste der Medienstatistiken für eingehende Audiodatenvideo
: Die Liste der Medienstatistiken für eingehende VideodatenscreenShare
: Die Liste der Medienstatistiken für die eingehende BildschirmfreigabedataChannel
: 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 verwendet10
Sekunden als Standard.UpdateReportIntervalInSeconds()
aktualisiert das in Sekunden angegebene Intervall der Erstellung von Medienstatistikberichten. Das SDK verwendet10
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 MedienAudio
: Die Liste der Medienstatistiken für ausgehende AudiodatenVideo
: Die Liste der Medienstatistiken für ausgehende VideodatenScreenShare
: Die Liste der Medienstatistiken für die ausgehende BildschirmfreigabeDataChannel
: Die Liste der Medienstatistiken für den ausgehenden Datenkanal
IncomingMediaStatistics
: Die Liste der Medienstatistiken für eingehende MedienAudio
: Die Liste der Medienstatistiken für eingehende AudiodatenVideo
: Die Liste der Medienstatistiken für eingehende VideodatenScreenShare
: Die Liste der Medienstatistiken für die eingehende BildschirmfreigabeDataChannel
: 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 |