Beobachtbarkeit der Kunden
Erfahren Sie, wie Sie die Vonage Client SDK Client Observability API verwenden, um auf einen vollständigen Satz von Echtzeitstatistiken zuzugreifen, einschließlich Sender-, Empfänger- und Netzwerkmetriken.
Vonage Video SDKs ermöglichen den Zugriff auf Echtzeit-Netzwerk- und Medienstatistiken in einer Videositzung, einschließlich senderseitiger Statistiken. Diese Aufrufe melden detaillierte Metriken zur Stream-Qualität - wie Paketverluste, empfangene Daten und Bandbreite - und können für jeden Publisher oder abonnierten Stream verwendet werden.
Absenderbezogene Statistik
Während eines Anrufs überträgt der Herausgeber einen Medienstrom an einen oder mehrere Teilnehmer. Die Medien können direkt weitergeleitet oder über die Medien-Router. Während die Abonnenten die Bitrate des empfangenen Streams beobachten können, fehlt ihnen in der Regel der Überblick über ihre gesamte Downlink-Kapazität. Die senderseitige Statistik-API behebt diese Einschränkung, indem sie Metriken bereitstellt, die den Abonnenten helfen, die verfügbare Bandbreite für den Medienempfang zu bewerten und die Streamqualität zu optimieren.
Absenderstatistik ist eine Beta-Funktion.
Ein Absender kann ein Publisher oder der Medien-Routerje nachdem, ob die Medien Punkt-zu-Punkt oder über den Medienrouter fließen. Die API wird als senderseitige Statistik bezeichnet, da der Sender die Quelle der gemeldeten Metriken ist, die an den Empfänger, also den Abonnenten, geliefert werden.
Die API meldet zwei wichtige Metriken pro Paket (Audio-Video-Paar): die maximale Bitrate, die der Sender schätzen kann, und die aktuelle Bandbreitenschätzung. Die maximale Bitrate ist eine Obergrenze für das, was aufgrund von Plattformbeschränkungen geschätzt werden kann. Bei der geschätzten aktuellen Bandbreite handelt es sich um die geschätzte Downlink-Bandbreite der WebRTC-Peer-Verbindungskanalkapazität, die unabhängig von der Bitrate des Streams für Medien verfügbar ist.
Beispielsweise kann ein Publisher einen VGA-Stream mit weniger als 1 Mbit/s senden, während der Media Router, der die senderseitigen Statistiken bereitstellt, die aktuelle Bandbreite auf 8 Mbit/s schätzt, was auf zusätzliche Kanalkapazität hinweist. Diese Informationen können von der Anwendung genutzt werden, um das Videolayout anzupassen oder richtlinienbasierte Aktionen wie Vonage Quality on Demand (QoD) auszulösen.
Beachten Sie, dass die Interpretation anders ist, wenn eine einzelne Peer-Verbindungssitzung erstellt wird. In einer einzelnen Peer-Verbindungssitzung teilen sich mehrere Audio- und Videobündel dieselbe Verbindung, so dass die Gesamtbandbreitenschätzung durch Summierung der einzelnen Bündelschätzungen berechnet werden sollte. Mit anderen Worten, die Gesamtbandbreite wird von allen Teilnehmern der einzelnen Peer-Verbindung gemeinsam genutzt.
Unterstützte Statistiken
Die senderseitigen Statistiken umfassen die folgenden Daten, die zur Bestimmung der Downlink-Schätzung für einen Teilnehmer verwendet werden können:
- Die maximale Bitrate, die für die Verbindung geschätzt werden kann.
- Die aktuelle Bandbreiteneinschätzung für die Verbindung.
Anwendungsfälle
Optimierung der Teilnehmer-Layouts: Verwenden Sie die geschätzte Bandbreite der Sender-API zusammen mit den RTC-Statistiken des lokalen Endpunkts, um eine hohe Anzahl von Abonnenten mit guter Videoqualität anzuzeigen.
Adaptiver Medienmodus: Ein Abonnent kann anhand der Senderstatistiken feststellen, ob die geschätzte Bandbreite des Senders einen bestimmten Schwellenwert (z. B. 500 kbit/s) überschreitet, um zu entscheiden, ob er ein Abonnement im reinen Video- oder im reinen Audiomodus abschließt.
Skalierung der Last: Verwenden Sie die Statistiken auf der Senderseite, um zu prüfen, ob ein Teilnehmer eine höhere Belastung optimal bewältigen kann, z. B. wenn er von einer Bildschirmfreigabe mit niedriger Bitrate zu einem Live-Video mit hoher Bitrate wechselt.
Schwellenwert-Warnungen: Verwenden Sie die senderseitigen Statistiken, um Warnungen für Teilnehmer auszulösen, wenn die geschätzte Bandbreite einer Senderverbindung unter einen vordefinierten Schwellenwert fällt.
Quality on Demand (QoD)-Auslöser: Verwenden Sie die senderseitigen Statistiken, um eine Auslösung zu veranlassen, wenn die geschätzte Netzkapazität für einen abonnierten Stream unter einen bestimmten Schwellenwert im Mobilfunknetz fällt.
Schritte zur Aktivierung der absenderseitigen Statistik
- Verwenden Sie die entsprechende Methode im Client SDK, um absenderseitige Statistiken zu veröffentlichen.
- In abonnierenden Clients hören Sie auf die entsprechenden Absenderstatistik-Ereignisse.
Enabling sender-side statistics
To receive sender-side statistics, enable them for the stream’s publisher by passing the publishSenderStats property set to true in the OT.initPublisher call:
If publishSenderStats is not enabled, no sender statistics channel will be published for this publisher. The default value is false.
When initializing the Publisher object, set the audioFallback property of the option you pass into the OT.initPublisher() method:
Subscribing to sender-side statistics
Subscribers automatically receive sender statistics only if the publisher has enabled them and if the user calls Subscriber.getStats() at least once. Note that due to network latency, the first call to getStats may not include sender statistics. Subsequent calls are more likely to return this data.
No additional events or methods are required; the sender statistics are included in the existing stats object returned by getStats().
Receiving statistics events
Sender-side statistics are included as an optional senderStats object inside the stats object passed to the Subscriber.getStats() callback. The senderStats object contains two properties:
connectionMaxAllocatedBitrate— The maximum bitrate that can be estimated for the connection (in bits per second)connectionEstimatedBandwidth— The current estimated bandwidth for the connection (in bits per second)
These two metrics are calculated per audio-video bundle, so the same values appear in both video and audio statistics. Because they reflect the transport rather than individual tracks, the metrics are shared across both audio and video.
Known issues
In some cases, when the session is relayed —or in certain routed setups with only two participants— and the Publisher uses Firefox, sender-side statistics may not be available due to browser limitations.
Enabling sender-side statistics
To receive sender-side statistics, enable them for the stream’s publisher by setting the senderStatisticsTrack property to true when building the publisher:
Publisher publisher = new Publisher.Builder(context)
.senderStatsTrack(true) // Enable sender-side stats
.build();
If senderStatsTrack is not enabled, no sender statistics channel will be published for this publisher. The default value is false.
Subscribing to sender-side statistics
Subscribers automatically receive sender statistics only if the publisher has enabled them and if the subscriber registers a listener for network statistics events.
You can subscribe to video and audio stats using the corresponding listener interfaces:
subscriber.setVideoStatsListener((subscriber, stats) -> {
// Received stats
});
subscriber.setAudioStatsListener((subscriber, stats) -> {
// Received stats
});
Receiving statistics events
Sender-side statistics are delivered via the SubscriberKit.VideoStatsListener and SubscriberKit.AudioStatsListener callbacks for video and audio. The SubscriberKit.SubscriberVideoStats and SubscriberKit.SubscriberAudioStats classes each include these properties:
connectionMaxAllocatedBitrate— The maximum bitrate that can be estimated for the connectionconnectionEstimatedBandwidth— The current estimated bitrate for the connection
These two metrics are calculated per audio-video bundle, so the same values appear in both video and audio statistics. Because they reflect the transport rather than individual tracks, the metrics are shared across both audio and video.
The stats object includes an optional senderStats field that provides the sender-side statistics. For example, when using SubscriberKit.setVideoStatsListener(), the stats parameter is a SubscriberKit.SubscriberVideoStats object:
subscriber.setVideoStatsListener((subscriber, stats) -> {
Log.d(TAG, "Packets received: " + stats.videoPacketsReceived);
Log.d(TAG, "Packets lost: " + stats.videoPacketsLost);
Log.d(TAG, "Bytes received: " + stats.videoBytesReceived);
Log.d(TAG, "Timestamp: " + stats.timeStamp);
if (stats.senderStats != null) {
Log.d(TAG, "Connection max allocated bitrate: " + stats.senderStats.connectionMaxAllocatedBitrate);
Log.d(TAG, "Connection current estimated bandwidth: " + stats.senderStats.connectionEstimatedBandwidth);
} else {
Log.d(TAG, "Sender stats not available yet.");
}
});
The same applies to audio stats using SubscriberKit.AudioStatsListener.
Enabling sender-side statistics
To receive sender-side statistics, enable them for the stream’s publisher by setting the senderStatsTrack property to true for the OTPublisherKitSettings object used to create the publisher.
let settings = OTPublisherSettings()
settings.senderStatsTrack = true // Enable sender-side stats
let publisher = OTPublisher(delegate: self, settings: settings)
If senderStatsTrack is not enabled, no sender statistics channel will be published for this publisher. The default value is false.
Subscribing to sender-side statistics
To receive sender statistics, set the networkStatsDelegate for a subscriber:
let subscriber = OTSubscriber(stream: stream, delegate: self)
subscriber?.networkStatsDelegate = self
Then implement the listener for either video or audio stats:
extension MyAppController: OTSubscriberKitNetworkStatsDelegate {
func subscriber(_ subscriber: OTSubscriberKit, videoNetworkStatsUpdated stats: OTSubscriberKitVideoNetworkStats) {
guard let senderStats = stats.senderStats else { return }
// Use stats
}
func subscriber(_ subscriber: OTSubscriberKit, audioNetworkStatsUpdated stats: OTSubscriberKitAudioNetworkStats) {
guard let senderStats = stats.senderStats else { return }
// Use stats
}
}
Receiving statistics events
The OTSubscriberKitNetworkStatsDelegate callbacks for video and audio deliver sender-side statistics, as shown above. The OTSenderStats, included as the senderStats member in both OTSubscriberKitVideoNetworkStats and OTSubscriberKitAudioNetworkStats, provides two properties:
connectionMaxAllocatedBitrate— The maximum bitrate estimated for the connectionconnectionEstimatedBandwidth— The current estimated bandwidth for the connection
These two metrics are calculated per audio-video bundle, so the same values appear in both video and audio statistics. Because they reflect the transport rather than individual tracks, the metrics are shared across both audio and video.
extension MyAppController: OTSubscriberKitNetworkStatsDelegate {
func subscriber(_ subscriber: OTSubscriberKit, videoNetworkStatsUpdated stats: OTSubscriberKitVideoNetworkStats) {
guard let senderStats = stats.senderStats else { return }
print("Sender max allocated bitrate: \(senderStats.connectionMaxAllocatedBitrate)")
print("Sender current estimated bandwidth: \(senderStats.connectionEstimatedBandwidth)")
}
}
Sample app
See the vonage-video-ios-sdk-samples sender-side statistics sample.
Enabling sender-side statistics
To receive sender-side statistics, enable them for the stream’s publisher by setting the senderStatsTrack property to true for the OTPublisherKitSettings object used to create the publisher.
If senderStatsTrack is not enabled, no sender statistics channel will be published for this publisher. The default value is NO.
Subscribing to sender-side statistics
Subscribers automatically receive sender-side statistics when you register a listener for either video or audio stats.
Example: enabling video stats subscription with sender-side fields:
Implement the delegate method for video stats:
Similarly implement -subscriber:audioNetworkStatsUpdated: for audio stats, which also includes a senderStats property.
Receiving statistics events
Sender-side statistics are delivered via the OTSubscriberKitNetworkStatsDelegate callbacks for video and audio, as shown above. The OTSenderStats, included as the senderStats member in both OTSubscriberKitVideoNetworkStats and OTSubscriberKitAudioNetworkStats, provides two properties:
connectionMaxAllocatedBitrate— The maximum bitrate that can be estimated for the connectionconnectionEstimatedBandwidth— The current estimated bandwidth for the connection
These two metrics are calculated per audio-video bundle, so the same values appear in both video and audio statistics. Because they reflect the transport rather than individual tracks, the metrics are shared across both audio and video.
Enabling sender-side statistics
To receive sender-side statistics, enable them for the stream’s publisher by setting the HasSenderStatsTrack property to true when building the publisher:
If HasSenderStatsTrack is not enabled, no sender statistics channel will be published for this publisher. The default value is false.
Subscribing to sender-side statistics
Subscribers automatically receive sender statistics only if the publisher has enabled them and if the subscriber registers a listener for network statistics events.
You can subscribe to video and audio stats using the corresponding event handlers:
Receiving statistics events
Sender-side statistics are delivered via the VideoStatsUpdated and AudioStatsUpdated events for video and audio. The SenderStats class, included in both VideoNetworkStatsEventArgs and AudioNetworkStatsEventArgs, provides two properties:
ConnectionMaxAllocatedBitrate— The maximum bitrate that can be estimated for the connectionConnectionEstimatedBandwidth— The current estimated bandwidth for the connection
These two metrics are calculated per audio-video bundle, so the same values appear in both video and audio statistics. Because they reflect the transport rather than individual tracks, the metrics are shared across both audio and video.
Inside the stats event handlers, you can access the sender-side metrics through the optional SenderStats property:
The same approach applies to audio stats using the AudioStatsUpdated event.
Enabling sender-side statistics
To receive sender-side statistics, enable them for the stream’s publisher by calling otc_publisher_settings_set_sender_stats_track() function before constructing the publisher:
If the sender stats track is not enabled, no sender statistics channel will be published for this publisher. The default value is OTC_FALSE.
Subscribing to sender-side statistics
Subscribers automatically receive sender statistics when you register for the subscriber’s video or audio statistics callbacks and the publisher is sending them.
Example: enabling video statistics subscription with sender-side fields:
Receiving statistics events
Sender-side statistics are delivered as part of the existing subscriber stats callbacks. Specific fields are included in the otc_subscriber_video_stats and otc_subscriber_audio_stats structures:
sender_connection_max_allocated_bitrate— The maximum bitrate that can be estimated for the connectionsender_connection_estimated_bandwidth— The current estimated bandwidth for the connection
These two metrics are calculated per audio-video bundle, so the same values appear in both video and audio statistics. Because they reflect the transport rather than individual tracks, the metrics are shared across both audio and video.
Anmerkungen
- Je nach SDK sind die Statistiken auf der Senderseite aufgrund der Netzwerklatenz möglicherweise nicht sofort verfügbar, wenn die Statistiken zum ersten Mal angefordert werden oder beim ersten Statistikereignis nach der Anmeldung.
- Wenn Sie eine einzelne Peer-Verbindungssitzung erstellen, wird die Bandbreite der Peer-Verbindung auf alle Teilnehmer aufgeteilt. Die maximale Bitrate stellt die höchste Bitrate dar, die die Peer-Verbindung schätzen kann, während die aktuelle Bitrate die Bitrate der einzelnen Audio-Video-Bündel widerspiegelt. Alle Teilnehmer der einzelnen Peer-Verbindung teilen sich diese maximale Bitrate. Bei der Beurteilung der verfügbaren Bandbreite des Senders ist dies zu berücksichtigen. So kann beispielsweise eine aktuelle Bitrate von 2 Mbit/s auf eine gute Qualität hindeuten, wenn mehrere Teilnehmer dieselbe Peer-Verbindung nutzen.