Risolvere gli errori dell'API Meet Media

Questa guida fornisce istruzioni su come risolvere gli errori comuni dell'API Google Meet Media.

Risolvere i problemi segnalati dai codici di errore

Ecco alcuni suggerimenti per risolvere i problemi segnalati dai codici di errore restituiti dall' connectActiveConference endpoint:

Codici di errore
NO_ACTIVE_CONFERENCE Verifica che il client dell'API Meet Media tenti di connettersi solo dopo che l' utente autenticato è già presente in una conferenza nello spazio della riunione. Se esegui il polling per l'inizio della conferenza, utilizza gli eventi di inizio della conferenza invece.
INVALID_OFFER Leggi i requisiti dell'offerta per verificare se mancano dettagli, ad esempio l'apertura dei canali di dati richiesti. Puoi anche confrontare la stringa dell'offerta della tua app con l' offerta di esempio e verificare eventuali differenze.
INCOMPATIBLE_DEVICE Uno o più dispositivi nella conferenza non sono compatibili con i client dell'API Meet Media. La tua app non potrà partecipare, quindi potresti comunicarlo ai tuoi utenti finali. I motivi per cui i dispositivi non sono compatibili includono il caso in cui l'account associato al dispositivo è considerato minorenne. Per ulteriori informazioni, consulta i requisiti per gli utenti finali.
UNSUPPORTED_PLATFORM_PRESENT Uno o più dispositivi nella conferenza non sono compatibili con i client dell'API Meet Media. La tua app non potrà partecipare, quindi potresti comunicarlo ai tuoi utenti finali. I motivi per cui una piattaforma non è supportata includono le app mobile che non soddisfano le versioni minime delle app mobile e la partecipazione da piattaforme non supportate. Per ulteriori informazioni, consulta i requisiti per gli utenti finali.
CONNECTIONS_EXHAUSTED Solo un client dell'API Meet Media può connettersi a una conferenza alla volta. Se la tua app si arresta in modo anomalo, potresti visualizzare questo errore se tenta di riconnettersi. In questo caso, attendi circa 30 secondi che Meet scada la connessione precedente. Quindi riprova.
CONSENTER_ABSENT Non è presente un consenso idoneo nella riunione. Per le riunioni di proprietà dei consumatori, assicurati che l'iniziatore sia presente alla riunione. Per le riunioni dei proprietari di Workspace, deve essere presente almeno un membro dell'organizzazione proprietaria della riunione. Per ulteriori informazioni, consulta i requisiti per il consenso.
DISABLED_BY_ADMIN L'amministratore ha disattivato l'API Meet Media per la sua organizzazione. Se si verifica questo problema, non può essere modificato durante la durata di una riunione. Per ulteriori informazioni, vedi la Figura 3 in Ciclo di vita dell'API Meet Media.
DISABLED_BY_HOST_CONTROL L'organizzatore ha disattivato l'API Meet Media per la riunione. La tua app non potrà partecipare, quindi potresti comunicarlo ai tuoi utenti finali. Per ulteriori informazioni, vedi la Figura 5 in Ciclo di vita dell'API Meet Media.
DISABLED_DUE_TO_WATERMARKING Quando la filigrana è attivata, l'API Meet Media non è consentita nella riunione. Potresti comunicarlo ai tuoi utenti finali. Per ulteriori informazioni, vedi la Figura 2 in Ciclo di vita dell'API Meet Media.
DISABLED_DUE_TO_ENCRYPTION Quando la crittografia è attivata, l'API Meet Media non è consentita nella riunione. Questa impostazione non può essere modificata durante una chiamata di Meet. Potresti comunicarlo ai tuoi utenti finali. Per ulteriori informazioni, vedi la Figura 2 in Ciclo di vita dell'API Meet Media.

Piano unificato

Se i canali di dati non si aprono mai e non ricevi mai audio o video, verifica che venga utilizzato solo il piano unificato durante la configurazione della connessione peer locale.

Errore nell'ordine della descrizione dei contenuti multimediali

Quando crei una connessione peer-to-peer con un'offerta Session Description Protocol (SDP), potresti visualizzare il seguente errore:

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.

Ciò significa che le righe di descrizione dei contenuti multimediali nella risposta SDP non corrispondono alle descrizioni dei contenuti multimediali nell'offerta SDP:

Offerta SDP Risposta SDP
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

Per correggere questo errore, assicurati che i tipi di contenuti multimediali simili siano configurati correttamente e raggruppati quando imposti l'oggetto della connessione peer. Le descrizioni dei contenuti multimediali intercalate non sono supportate.

Il seguente esempio di codice mostra come abbinare correttamente le descrizioni dei contenuti multimediali:

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'});

Errore dell'attributo del ruolo DTLS

Quando imposti l'attributo del ruolo DTLS, potresti visualizzare il seguente errore:

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

Questo errore si verifica quando l'attributo a=setup:< > non è impostato correttamente per tutte le descrizioni dei contenuti multimediali nell'offerta SDP.

Per correggere questo errore, assicurati che ogni descrizione dei contenuti multimediali nell'offerta SDP abbia uno dei seguenti attributi obbligatori:

  • 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
. . .

Risolvere i problemi relativi all'audio

Le seguenti sezioni possono aiutarti a risolvere i problemi relativi all'audio nella tua app.

Controllare i log

Se utilizzi il client web in un browser Chrome:

  1. Apri una nuova scheda e inserisci nella barra degli indirizzi: chrome://webrtc-internals.
  2. Vai alla sezione etichettata Stats graph for inbound-rtp.
  3. Esamina ogni grafico audio per verificare se i pacchetti vengono ricevuti.

Se utilizzi il client di riferimento C++, controlla se OnAudioFrame viene mai chiamato.

Verificare gli ambiti OAuth

L'audio viene trasmesso solo se l'ambito corretto viene fornito con la richiesta di connessione iniziale. Per risolvere l'errore, assicurati di fornire gli ambiti OAuth 2.0 corretti. Per ulteriori informazioni, consulta Ambiti dell'API Meet Media.

Verificare che la conferenza sia configurata correttamente

Verificare il segnale per l'audio

Meet fornisce audio solo se lo indichi nell'offerta SDP . Nell'offerta devono esistere tre, descrizioni dei contenuti multimediali audio di sola ricezione 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
. . .

Se i server di Meet ricevono un'offerta valida, rispondono con una risposta SDP con tre descrizioni dei contenuti multimediali audio di solo invio.

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
. . .

Controllare l'implementazione dell'observer

Assicurati di creare copie dei dati audio se sposti l'elaborazione dei dati in un thread diverso. AudioFrame.pcm16 è effettivamente un riferimento ai dati sottostanti, quindi il tentativo di accedervi dopo OnAudioFrame comporta un comportamento indefinito, ad esempio un errore di segmentazione.

Risolvere i problemi con i video

Le seguenti sezioni possono aiutarti a risolvere i problemi relativi ai video nella tua app.

Controllare i log

Se utilizzi il client web in un browser Chrome:

  1. Apri una nuova scheda e inserisci nella barra degli indirizzi: chrome://webrtc-internals.
  2. Vai alla sezione etichettata Stats graph for inbound-rtp.
  3. Esamina ogni grafico video per verificare se i pacchetti vengono ricevuti.

Se utilizzi il client di riferimento C++, controlla se OnVideoFrame viene mai chiamato.

Verificare gli ambiti OAuth

Il video viene trasmesso solo se l'ambito corretto viene fornito con la richiesta di connessione iniziale. Per risolvere l'errore, assicurati di fornire gli ambiti OAuth 2.0 corretti. Per ulteriori informazioni, consulta Ambiti dell'API Meet Media.

Verificare che la conferenza sia configurata correttamente

  • Quando il client si connette ai server di Meet, non viene ammesso automaticamente alla conferenza. Assicurati di aver ricevuto un aggiornamento della risorsa di Controllo sessione sul canale di dati di Controllo sessione con uno stato STATE_JOINED.

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Verifica che siano presenti altri partecipanti alla conferenza i cui stream video non siano disattivati.

Verificare il segnale per il video

Meet fornisce video solo se è indicato nell'offerta SDP. Nell'offerta devono esistere fino a tre descrizioni dei contenuti multimediali video di sola ricezione.

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
. . .

Se Meet riceve un'offerta valida, risponde con una risposta SDP con n descrizioni dei contenuti multimediali video di solo invio, dove n è il numero di descrizioni dei contenuti multimediali video nell'offerta SDP.

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
. . .

Risolvere i problemi relativi alla mancanza di video

  • Verifica che m=video … esista nell'offerta SDP inviata ai server di Meet.
  • Verifica che a=recvonly sia un attributo in ogni riga m=video.
  • Verifica che nella risposta SDP esista un numero uguale di righe m=video.
  • Verifica che a=sendonly o a=sendrecv siano attributi in ogni riga m=video nella risposta SDP.
  • Verifica che una VideoAssignmentRequest sia stata inviata e ricevuta correttamente dai server di Meet. L'esito positivo o negativo deve essere comunicato al client sullo stesso canale di dati.

Risolvere i problemi relativi a un numero di stream video inferiore al previsto

  • Verifica che l'offerta SDP contenga il numero corretto di righe m=video ….
  • Assicurati che tutte le descrizioni m=video nella risposta SDP contengano un attributo a=sendonly o a=sendrecv. Le righe contrassegnate con a=recvonly nella risposta riducono di altrettanto la quantità di stream inviati al client.

Controllare l'implementazione dell'observer

Assicurati di creare copie dei dati video se sposti l'elaborazione dei dati in un thread diverso. VideoFrame.frame è effettivamente un riferimento ai dati sottostanti, quindi il tentativo di accedervi dopo OnVideoFrame comporta un comportamento indefinito, ad esempio un errore di segmentazione.