Enabling sender-side statistics

Um absenderseitige Statistiken zu erhalten, aktivieren Sie diese für den Herausgeber des Streams, indem Sie otc_publisher_settings_set_sender_stats_track() Funktion, bevor Sie den Verlag erstellen:

otc_publisher_settings* settings = otc_publisher_settings_new();
otc_publisher_settings_set_sender_stats_track(settings, OTC_TRUE);

otc_publisher* publisher = otc_publisher_new_with_settings( &publisher_callbacks, settings);

Wenn der Absenderstatistik-Track nicht aktiviert ist, wird für diesen Verlag kein Absenderstatistik-Kanal veröffentlicht. Der Standardwert ist OTC_FALSE.

Subscribing to sender-side statistics

Abonnenten erhalten automatisch Absenderstatistiken, wenn Sie sich für die Video- oder Audiostatistik-Rückrufe des Abonnenten registrieren und der Herausgeber diese sendet.

Beispiel: Aktivierung des Videostatistik-Abonnements mit absenderseitigen Feldern:

subscriber_callbacks.on_video_stats = on_video_stats;
otc_subscriber* subscriber = otc_subscriber_new(stream, &subscriber_callbacks);

otc_session_subscribe(session, subscriber);

Receiving statistics events

Absenderstatistiken werden als Teil der bestehenden Subscriber Stats Callbacks geliefert. Spezifische Felder sind in der otc_subscriber_video_stats und otc_subscriber_audio_stats Strukturen:

  • sender_connection_max_allocated_bitrate - Die maximale Bitrate, die für die Verbindung geschätzt werden kann
  • sender_connection_estimated_bandwidth - Die aktuell geschätzte Bandbreite für die Verbindung

Diese beiden Metriken werden pro Audio-Video-Bündel berechnet, so dass sowohl in der Video- als auch in der Audiostatistik die gleichen Werte erscheinen. Da sie den Transport und nicht einzelne Tracks widerspiegeln, werden die Metriken sowohl für Audio als auch für Video verwendet.

static void on_video_stats(otc_subscriber* subscriber,
                           void* user_data,
                           struct otc_subscriber_video_stats stats) {
    printf("Packets received: %llu\n", (unsigned long long)stats.packets_received);
    printf("Packets lost: %llu\n", (unsigned long long)stats.packets_lost);
    printf("Bytes received: %llu\n", (unsigned long long)stats.bytes_received);
    printf("Timestamp: %llu ms\n", (unsigned long long)stats.timestamp);
    printf("Connection max allocated bitrate: %lld bps\n", (long long)stats.sender_connection_max_allocated_bitrate);
    printf("Connection estimated bandwidth: %lld bps\n", (long long)stats.sender_connection_estimated_bandwidth);
}