In diesem Leitfaden finden Sie eine Anleitung zur Behebung häufiger Fehler bei der Google Meet Media API.
Fehlercodes beheben
Hier finden Sie Tipps zur Fehlerbehebung bei Fehlercodes, die vom Endpunkt connectActiveConference
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 Videokonferenzbereich anwesend ist. Wenn Sie den Konferenzstart abfragen, verwenden Sie stattdessen Konferenzstart-Ereignisse. |
INVALID_OFFER |
Lesen Sie sich die Anforderungen für Angebote durch, um nach fehlenden Details zu suchen, z. B. nach erforderlichen Kanälen für die Eröffnung. Sie können auch den Angebotsstring Ihrer App mit dem Beispielangebot vergleichen und alle Unterschiede untersuchen. |
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 ist, dass das mit dem Gerät verknüpfte Konto als Konto eines Minderjährigen 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 unter anderem mobile Apps, die nicht die Mindestversionen für mobile Apps erfüllen, und die Teilnahme über nicht unterstützte Plattformen. Weitere Informationen finden Sie unter Anforderungen an Endnutzer. |
CONNECTIONS_EXHAUSTED |
Es kann jeweils nur ein Meet Media API-Client mit einer Konferenz verbunden sein. 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 in Meet beendet wird. Versuch es dann noch einmal. |
CONSENTER_ABSENT |
Es gibt keinen berechtigten Teilnehmer in der Videokonferenz, der die Einwilligung geben kann. Bei Meetings, die von Privatnutzern organisiert werden, muss der Initiator an der Videokonferenz teilnehmen. Bei Besprechungen von Arbeitsbereichsinhabern sollte mindestens ein Mitglied der Organisation die Besprechung besitzen. Weitere Informationen finden Sie unter Anforderungen an Einwilligungsgeber. |
DISABLED_BY_ADMIN |
Der Administrator hat die Meet Media API für seine Organisation deaktiviert. Wenn Sie dieses Problem haben, kann es während einer Besprechung nicht behoben werden. Weitere Informationen finden Sie in Abbildung 3 unter Meet Media API lifecycle. |
DISABLED_BY_HOST_CONROL |
Der Organisator hat die Meet Media API für die Besprechung deaktiviert. Ihre App kann nicht teilnehmen. Informieren Sie Ihre Endnutzer darüber. Weitere Informationen finden Sie in Abbildung 5 unter Meet Media API-Lebenszyklus. |
DISABLED_DUE_TO_WATERMARKING |
Wenn Wasserzeichen aktiviert sind, darf die Meet Media API nicht an der Videokonferenz teilnehmen. Sie sollten Ihre Endnutzer darüber informieren. Weitere Informationen finden Sie in Abbildung 2 unter Meet Media API lifecycle. |
DISABLED_DUE_TO_ENCRYPTION |
Wenn die Verschlüsselung aktiviert ist, darf die Meet Media API nicht an der Videokonferenz teilnehmen. Diese Einstellung kann während eines Meet-Anrufs nicht geändert werden. Sie sollten Ihre Endnutzer darüber informieren. Weitere Informationen finden Sie in Abbildung 2 unter Meet Media API lifecycle. |
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 Unified Plan verwendet wird.
Fehler bei der Reihenfolge der Medienbeschreibung
Beim Erstellen einer Peer-to-Peer-Verbindung mit einem Session Description Protocol-Angebot (SDP) kann der folgende Fehler auftreten:
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 mit 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 |
Achten Sie darauf, dass ähnliche Medientypen richtig konfiguriert und gruppiert sind, wenn Sie das Peer-Verbindungsobjekt festlegen, um diesen Fehler zu beheben. Verschachtelte Medienbeschreibungen werden nicht unterstützt.
Das folgende Codebeispiel zeigt, wie die Media-Beschreibungen richtig abgeglichen werden:
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
Beim Festlegen des DTLS-Rollenattributs 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:< >
für alle Medienbeschreibungen im SDP-Angebot nicht richtig festgelegt ist.
Um diesen Fehler zu beheben, muss jede Medienbeschreibung im SDP-Angebot eines der folgenden erforderlichen Attribute enthalten:
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:
- Öffnen Sie einen neuen Tab und geben Sie in die Adressleiste
chrome://webrtc-internals
ein. - Gehen Sie zum Abschnitt
Stats graph for inbound-rtp
. - Prüfen Sie jedes Audiogramm, um festzustellen, ob Pakete empfangen werden.
Wenn Sie den C++-Referenzclient verwenden, prüfen Sie, ob OnAudioFrame
aufgerufen wird.
OAuth-Bereiche überprüfen
Audio wird nur übertragen, wenn der entsprechende Bereich mit der ursprünglichen Verbindungsanfrage angegeben wird. Achten Sie darauf, die richtigen OAuth 2.0-Bereiche anzugeben, um den Fehler zu beheben. Weitere Informationen finden Sie unter Meet Media API-Bereiche.
Prüfen, ob die Videokonferenz richtig eingerichtet ist
Wenn der Client eine Verbindung zu den Google Meet-Servern herstellt, wird er nicht automatisch zur Videokonferenz zugelassen. Prüfen Sie, ob Sie über den Datenkanal für die Sitzungssteuerung ein Update der Sitzungssteuerungsressource mit dem Status
STATE_JOINED
erhalten haben.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Prüfen Sie, ob es andere Konferenzteilnehmer gibt, deren Audiostreams nicht stummgeschaltet sind.
Signal für Audio überprüfen
Meet stellt nur Audio bereit, wenn Sie dies im SDP-Angebot angeben. Das Angebot muss drei Audio-Media-Beschreibungen enthalten, die nur zum Empfangen von Audioinhalten verwendet werden.
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-Media-Beschreibungen, die nur gesendet werden können.
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 überprüfen
Achten Sie darauf, Kopien der Audiodaten zu erstellen, wenn Sie die Datenverarbeitung in einen anderen Thread verschieben.
AudioFrame.pcm16
ist im Grunde eine Referenz auf zugrunde liegende Daten. Wenn Sie also nach OnAudioFrame
darauf zugreifen, führt das zu einem undefinierten Verhalten, z. B. 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:
- Öffnen Sie einen neuen Tab und geben Sie in die Adressleiste
chrome://webrtc-internals
ein. - Gehen Sie zum Abschnitt
Stats graph for inbound-rtp
. - Prüfen Sie die Grafik für jedes Video, um zu sehen, ob Pakete empfangen werden.
Wenn Sie den C++-Referenzclient verwenden, prüfen Sie, ob OnVideoFrame
aufgerufen wird.
OAuth-Bereiche überprüfen
Das Video wird nur übertragen, wenn der entsprechende Bereich mit der ursprünglichen Verbindungsanfrage angegeben wird. Achten Sie darauf, die richtigen OAuth 2.0-Bereiche anzugeben, um den Fehler zu beheben. Weitere Informationen finden Sie unter Meet Media API-Bereiche.
Prüfen, ob die Videokonferenz richtig eingerichtet ist
Wenn der Client eine Verbindung zu den Meet-Servern herstellt, wird er nicht automatisch zur Videokonferenz zugelassen. Prüfen Sie, ob Sie über den Datenkanal für die Sitzungssteuerung ein Update der Sitzungssteuerungsressource mit dem Status
STATE_JOINED
erhalten haben.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Prüfen Sie, ob es andere Konferenzteilnehmer gibt, deren Videostreams nicht stummgeschaltet sind.
Signal für Video bestätigen
Meet stellt nur dann Video bereit, wenn es im SDP-Angebot signalisiert wird. Das Angebot muss bis zu drei Nur-Empfang-Videomediabeschreibungen enthalten.
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
Nur-Senden-Videomediabeschreibungen, wobei n
die Anzahl der Videomediabeschreibungen im SDP-Angebot ist.
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
. . .
Fehlerbehebung bei fehlendem Video
- Prüfen Sie, ob
m=video …
im SDP-Angebot vorhanden ist, das an Meet-Server gesendet wird. - Prüfen Sie, ob
a=recvonly
ein Attribut unter jederm=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
odera=sendrecv
Attribute unter jederm=video
-Zeile in der SDP-Antwort sind. - Prüfen Sie, ob eine erfolgreiche
VideoAssignmentRequest
an die Meet-Server gesendet und von diesen empfangen wurde. Erfolg oder Fehler sollten über denselben Datenkanal an den Client zurückgegeben werden.
Weniger Videostreams als erwartet – Problembehebung
- Prüfen Sie, ob das SDP-Angebot die richtige Anzahl von
m=video …
-Zeilen enthält. - Achten Sie darauf, dass alle
m=video
-Beschreibungen in der SDP-Antwort entweder eina=sendonly
- oder eina=sendrecv
-Attribut enthalten. Alle mita=recvonly
gekennzeichneten Zeilen in der Antwort reduzieren die Anzahl der an den Client gesendeten Streams um diesen Wert.
Observer-Implementierung überprüfen
Wenn Sie die Datenverarbeitung in einen anderen Thread verschieben, müssen Sie Kopien der Videodaten erstellen.
VideoFrame.frame
ist im Grunde eine Referenz auf zugrunde liegende Daten. Wenn Sie also nach OnVideoFrame
darauf zugreifen, führt das zu undefiniertem Verhalten, z. B. einem Segmentierungsfehler.