Fehler bei der Meet Media API beheben

In dieser Anleitung erfahren Sie, wie Sie häufige Fehler bei der Google Meet Media API beheben.

Fehlercodes beheben

Hier finden Sie Tipps zur Fehlerbehebung bei Fehlercodes, die vom connectActiveConference Endpunkt zurückgegeben werden:

Fehlercodes
NO_ACTIVE_CONFERENCE Prüfen Sie, ob der Meet Media API-Client erst dann versucht, eine Verbindung herzustellen, wenn der authentifizierte Nutzer bereits in einer Videokonferenz im Konferenzraum anwesend ist. Wenn Sie nach dem Start der Videokonferenz suchen, verwenden Sie stattdessen Ereignisse zum Start der Videokonferenz.
INVALID_OFFER Lesen Sie die Angebotsanforderungen durch und prüfen Sie, ob Details fehlen, z. B. ob die erforderlichen Datenkanäle geöffnet wurden. Sie können auch die Angebotsstring Ihrer App mit dem Beispielangebot vergleichen und nach Unterschieden suchen.
INCOMPATIBLE_DEVICE Ein oder mehrere Geräte in der Videokonferenz sind nicht mit Meet Media API-Clients kompatibel. Ihre App kann nicht teilnehmen. Informieren Sie Ihre Endnutzer darüber. Ein Grund für inkompatible Geräte kann sein, dass das mit dem Gerät verknüpfte Konto als minderjährig gilt. Weitere Informationen finden Sie unter Anforderungen an Endnutzer.
UNSUPPORTED_PLATFORM_PRESENT Ein oder mehrere Geräte in der Videokonferenz sind nicht mit Meet Media API-Clients kompatibel. Ihre App kann nicht teilnehmen. Informieren Sie Ihre Endnutzer darüber. Gründe für eine nicht unterstützte Plattform sind z. B. mobile Apps, die die Mindestversionen für mobile Apps nicht erfüllen, und die Teilnahme von nicht unterstützten Plattformen. Weitere Informationen finden Sie unter Anforderungen an Endnutzer.
CONNECTIONS_EXHAUSTED Es kann jeweils nur ein Meet Media API-Client mit einer Videokonferenz verbunden werden. Wenn Ihre App abstürzt, wird dieser Fehler möglicherweise angezeigt, wenn sie versucht, die Verbindung wiederherzustellen. Warten Sie in diesem Fall etwa 30 Sekunden, bis die vorherige Verbindung von Meet getrennt wird. Versuchen Sie es dann noch einmal.
CONSENTER_ABSENT In der Besprechung ist kein berechtigter Zustimmender vorhanden. Bei Videokonferenzen, die von Verbrauchern erstellt wurden , muss der Initiator an der Videokonferenz teilnehmen. Bei Besprechungen, die von Workspace-Inhabern erstellt wurden, muss mindestens ein Mitglied dieser Organisation Inhaber der Besprechung sein. Weitere Informationen finden Sie unter Anforderungen an Zustimmende.
DISABLED_BY_ADMIN Der Administrator hat die Meet Media API für seine Organisation deaktiviert. Wenn dieser Fehler auftritt, kann er während der Dauer einer Besprechung nicht behoben werden. Weitere Informationen finden Sie unter Abbildung 3 im Lebenszyklus der Meet Media API.
DISABLED_BY_HOST_CONTROL Der Organisator hat die Meet Media API für die Videokonferenz deaktiviert. Ihre App kann nicht teilnehmen. Informieren Sie Ihre Endnutzer darüber. Weitere Informationen finden Sie unter Abbildung 5 im Lebenszyklus der Meet Media API.
DISABLED_DUE_TO_WATERMARKING Wenn Wasserzeichen aktiviert sind, ist die Meet Media API in der Videokonferenz nicht zulässig. Informieren Sie Ihre Endnutzer darüber. Weitere Informationen finden Sie unter Abbildung 2 im Lebenszyklus der Meet Media API.
DISABLED_DUE_TO_ENCRYPTION Wenn die Verschlüsselung aktiviert ist, ist die Meet Media API in der Videokonferenz nicht zulässig. Dies kann während eines Meet-Anrufs nicht geändert werden. Informieren Sie Ihre Endnutzer darüber. Weitere Informationen finden Sie unter Abbildung 2 im Lebenszyklus der Meet Media API.

Einheitlicher Plan

Wenn sich Datenkanäle nie öffnen und Sie nie Audio oder Video empfangen, prüfen Sie, ob bei der Konfiguration der lokalen Peer-Verbindung nur Einheitlicher Plan verwendet wird.

Fehler bei der Reihenfolge der Medienbeschreibung

Wenn Sie eine Peer-to-Peer-Verbindung mit einem Session Description Protocol (SDP) Angebot erstellen, wird möglicherweise der folgende Fehler angezeigt:

Failed to execute 'setRemoteDescription' on 'RTCPeerConnection':
Failed to set remote answer sdp:
The order of m-lines in answer doesn't match order in offer. Rejecting answer.

Das bedeutet, dass die Zeilen der Medienbeschreibung in der SDP-Antwort nicht mit den Medienbeschreibungen im SDP-Angebot übereinstimmen:

SDP-Angebot SDP-Antwort
m=audio 9 UDP/TLS/RTP/SAVPF 111 m=audio 9 UDP/TLS/RTP/SAVPF 111
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 m=audio 9 UDP/TLS/RTP/SAVPF 111
m=audio 9 UDP/TLS/RTP/SAVPF 111 m=audio 9 UDP/TLS/RTP/SAVPF 111
m=audio 9 UDP/TLS/RTP/SAVPF 111 m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99

Um diesen Fehler zu beheben, müssen ähnliche Medientypen korrekt konfiguriert und gruppiert werden, wenn Sie das Peer-Verbindungsobjekt festlegen. Verschachtelte Medienbeschreibungen werden nicht unterstützt.

Das folgende Codebeispiel zeigt, wie Sie die Medienbeschreibungen richtig zuordnen:

C++

rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection;

// Signal the entire video at once.
for (uint32_t i = 0; i < configurations.receiving_video_stream_count; ++i) {
    webrtc::RtpTransceiverInit video_init;
    video_init.direction = webrtc::RtpTransceiverDirection::kRecvOnly;
    video_init.stream_ids = {absl::StrCat("video_stream_", i)};

    webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpTransceiverInterface>>
        video_result = peer_connection->AddTransceiver(
            cricket::MediaType::MEDIA_TYPE_VIDEO, video_init);
  // . . .
}

JavaScript

pc = new RTCPeerConnection();

// Signal the entire video at once.
pc.addTransceiver(video, {'direction':'recvonly'});
pc.addTransceiver(video, {'direction':'recvonly'});
pc.addTransceiver(video, {'direction':'recvonly'});

Fehler beim DTLS-Rollenattribut

Wenn Sie das DTLS-Rollenattribut festlegen, wird möglicherweise der folgende Fehler angezeigt:

All DTLS roles must be one of [ACTIVE, ACTPASS].

Dieser Fehler tritt auf, wenn das Attribut a=setup:< > nicht für alle Medienbeschreibungen im SDP-Angebot richtig festgelegt ist.

Um diesen Fehler zu beheben, muss jede Medienbeschreibung im SDP-Angebot eines der folgenden erforderlichen Attribute haben:

  • a=setup:actpass
  • a=setup:active
v=0
o=- 4743178474630771513 3 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
. . .
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101
. . .
a=setup:actpass
. . .
m=audio 39807 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
. . .
a=setup:actpass
. . .

Probleme mit dem Ton beheben

Die folgenden Abschnitte können Ihnen helfen, Audioprobleme in Ihrer App zu beheben.

Log prüfen

Wenn Sie den Webclient in einem Chrome-Browser verwenden:

  1. Öffnen Sie einen neuen Tab und geben Sie in die Adressleiste Folgendes ein: chrome://webrtc-internals.
  2. Gehen Sie zum Abschnitt Stats graph for inbound-rtp.
  3. Prüfen Sie in jeder Audiografik, ob Pakete empfangen werden.

Wenn Sie den C++-Referenzclient verwenden, prüfen Sie, ob OnAudioFrame jemals aufgerufen wird.

OAuth-Bereiche überprüfen

Audio wird nur übertragen, wenn der richtige Bereich mit der ersten Verbindungsanfrage angegeben wird. Um den Fehler zu beheben, müssen Sie die richtigen OAuth 2.0-Bereiche angeben. Weitere Informationen finden Sie unter Meet Media API Bereiche.

Prüfen, ob die Videokonferenz richtig eingerichtet ist

  • Wenn sich der Client mit den Google Meet-Servern verbindet, wird er nicht automatisch zur Videokonferenz zugelassen. Prüfen Sie, ob Sie über den Datenkanal für die Sitzungssteuerung eine Aktualisierung der Sitzungssteuerungsressource mit dem Status STATE_JOINED erhalten haben.

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Prüfen Sie, ob es andere Teilnehmer der Videokonferenz gibt, deren Audio streams nicht stummgeschaltet sind.

Audio signalisieren

Meet stellt nur Audio bereit, wenn Sie dies im SDP Angebot signalisieren. Das Angebot muss drei, Audio-Medienbeschreibungen enthalten, die nur zum Empfangen verwendet werden in the offer.

m=audio 39807 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
. . .
a=mid:0
. . .
a=recvonly
. . .
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
. . .
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
. . .
a=mid:1
. . .
a=recvonly
. . .
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
. . .
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
. . .
a=mid:2
. . .
a=recvonly
. . .
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
. . .

Wenn die Meet-Server ein gültiges Angebot erhalten, antworten sie mit einer SDP-Antwort mit drei Audio-Medienbeschreibungen, die nur zum Senden verwendet werden.

m=audio 19306 UDP/TLS/RTP/SAVPF 111
. . .
a=mid:0
. . .
a=sendonly
a=msid:virtual-6666 virtual-6666
. . .
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
. . .
m=audio 9 UDP/TLS/RTP/SAVPF 111
. . .
a=mid:1
. . .
a=sendonly
a=msid:virtual-6667 virtual-6667
. . .
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
. . .
m=audio 9 UDP/TLS/RTP/SAVPF 111
. . .
a=mid:2
. . .
a=sendonly
a=msid:virtual-6668 virtual-6668
. . .
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
. . .

Observer-Implementierung prüfen

Erstellen Sie Kopien der Audiodaten, wenn Sie die Datenverarbeitung in einen anderen Thread verschieben. AudioFrame.pcm16 ist im Grunde ein Verweis auf zugrunde liegende Daten. Wenn Sie nach OnAudioFrame darauf zugreifen, führt dies zu undefiniertem Verhalten, z. B. zu einem Segmentierungsfehler.

Probleme bei Videos beheben

Die folgenden Abschnitte können Ihnen helfen, Videoprobleme in Ihrer App zu beheben.

Log prüfen

Wenn Sie den Webclient in einem Chrome-Browser verwenden:

  1. Öffnen Sie einen neuen Tab und geben Sie in die Adressleiste Folgendes ein: chrome://webrtc-internals.
  2. Gehen Sie zum Abschnitt Stats graph for inbound-rtp.
  3. Prüfen Sie in jeder Videografik, ob Pakete empfangen werden.

Wenn Sie den C++-Referenzclient verwenden, prüfen Sie, ob OnVideoFrame jemals aufgerufen wird.

OAuth-Bereiche überprüfen

Video wird nur übertragen, wenn der richtige Bereich mit der ersten Verbindungsanfrage angegeben wird. Um den Fehler zu beheben, müssen Sie die richtigen OAuth 2.0-Bereiche angeben. Weitere Informationen finden Sie unter Meet Media API Bereiche.

Prüfen, ob die Videokonferenz richtig eingerichtet ist

  • Wenn sich der Client mit den Meet-Servern verbindet, wird er nicht automatisch zur Videokonferenz zugelassen. Prüfen Sie, ob Sie über den Datenkanal für die Sitzungssteuerung eine Aktualisierung der Sitzungssteuerungsressource mit dem Status STATE_JOINED erhalten haben.

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Prüfen Sie, ob es andere Konferenz teilnehmer gibt, deren Video streams nicht stummgeschaltet sind.

Video signalisieren

Meet stellt nur Video bereit, wenn es im SDP Angebot signalisiert wird. Das Angebot muss bis zu drei Video-Medienbeschreibungen enthalten, die nur zum Empfangen verwendet werden.

v=0
o=- 4743178474630771513 3 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
. . .
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 35 36 37 38 102 103 104 105 106 107 108 109 127 125 39 40 41 42 43 44 45 46 47 48 112 113 114 115 116 117 118 49
. . .
a=setup:actpass
a=mid:1
. . .
a=recvonly
. . .
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
. . .

Wenn Meet ein gültiges Angebot erhält, antwortet es mit einer SDP-Antwort mit n Video-Medienbeschreibungen, die nur zum Senden verwendet werden. n ist die Anzahl der Video-Medienbeschreibungen im SDP-Angebot.

v=0
o=- 0 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=msid-semantic: WMS virtual-video-7777/7777
a=ice-lite
. . .
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99
. . .
a=setup:passive
a=mid:1
. . .
a=msid:virtual-video-7777/7777 virtual-video-7777/7777
a=rtcp-mux
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtcp-fb:96 goog-remb
. . .

Probleme mit fehlendem Video beheben

  • Prüfen Sie, ob m=video … im SDP-Angebot vorhanden ist, das an die Meet-Server gesendet wurde.
  • Prüfen Sie, ob a=recvonly ein Attribut unter jeder m=video-Zeile ist.
  • Prüfen Sie, ob in der SDP-Antwort die gleiche Anzahl von m=video-Zeilen vorhanden ist.
  • Prüfen Sie, ob a=sendonly oder a=sendrecv Attribute unter jeder m=video-Zeile in der SDP-Antwort sind.
  • Prüfen Sie, ob eine erfolgreiche VideoAssignmentRequest an die Meet-Server gesendet und von ihnen empfangen wurde. Der Erfolg oder Misserfolg sollte über denselben Datenkanal an den Client zurückgemeldet werden.

Weniger Videostreams als erwartet

  • Prüfen Sie, ob das SDP-Angebot die richtige Anzahl von m=video …-Zeilen enthält.
  • Alle m=video-Beschreibungen in der SDP-Antwort müssen entweder ein a=sendonly- oder ein a=sendrecv-Attribut enthalten. Alle Zeilen, die in der Antwort mit a=recvonly gekennzeichnet sind, reduzieren die Anzahl der an den Client gesendeten Streams um diesen Wert.

Observer-Implementierung prüfen

Erstellen Sie Kopien der Videodaten, wenn Sie die Datenverarbeitung in einen anderen Thread verschieben. VideoFrame.frame ist im Grunde ein Verweis auf zugrunde liegende Daten. Wenn Sie nach OnVideoFrame darauf zugreifen, führt dies zu undefiniertem Verhalten, z. B. zu einem Segmentierungsfehler.