Risolvere gli errori dell'API Meet Media

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

Risolvere i problemi relativi ai codici di errore

Di seguito sono riportati alcuni suggerimenti per la risoluzione dei problemi relativi ai codici di errore restituiti dall'endpoint connectActiveConference:

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 di riunione.
INVALID_OFFER Leggi i requisiti delle offerte per verificare eventuali dettagli mancanti, ad esempio l'apertura dei canali di dati richiesti. Puoi anche confrontare la stringa dell'offerta della tua app con la offerta di esempio ed esaminare 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 agli utenti finali.
CONNECTIONS_EXHAUSTED Solo un client Meet Media API può connettersi a una conferenza alla volta. Se l'app si arresta in modo anomalo, potresti visualizzare questo errore se tenta di riconnettersi. In questo caso, attendi circa 30 secondi per consentire a Meet di terminare la connessione precedente per timeout. Dopodiché riprova l'azione.

Piano unificato

Se i canali di dati non si aprono mai e non ricevi mai audio o video, verifica che при configurazione della connessione tra pari locale venga utilizzato solo il piano unificato.

Errore nell'ordine della descrizione dei contenuti multimediali

Quando crei una connessione peer-to-peer con un'offerta Session Description Protocol (SDP), potresti visualizzare l'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 nei contenuti multimediali dell'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 media simili siano configurati correttamente e raggruppati insieme quando imposti l'oggetto di connessione peer. Le descrizioni dei contenuti multimediali interlacciati non sono supportate.

Il seguente esempio di codice mostra come associare 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 attributo ruolo DTLS

Quando imposti l'attributo del ruolo DTLS, potresti visualizzare l'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 risolvere 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 sezioni seguenti possono aiutarti a risolvere i problemi audio nella tua app.

Controlla 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. Controlla ogni grafico audio per verificare se i pacchetti vengono ricevuti.

Se utilizzi il client di riferimento C++, controlla se viene chiamata la funzione OnAudioFrame.

Verifica gli ambiti OAuth

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

Verificare che la conferenza sia configurata correttamente

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

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

Verificare il segnale per l'audio

Meet fornisce l'audio solo se lo segnali nell'offerta SDP. Nell'offerta devono essere presenti tre descrizioni di contenuti multimediali audio di sola ricezione.

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 contenente tre descrizioni dei contenuti multimediali audio di sola 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'osservatore

Assicurati di creare copie dei dati audio se sposti l'elaborazione dei dati in un altro thread. AudioFrame.pcm16 è in effetti un riferimento ai dati sottostanti, quindi tentare di accedervi dopo OnAudioFrame determina un comportamento non definito, ad esempio un errore di segmentazione.

Risolvere i problemi con i video

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

Controlla 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. Controlla ogni grafico video per verificare se i pacchetti vengono ricevuti.

Se utilizzi il client di riferimento C++, controlla se viene chiamata la funzione OnVideoFrame.

Verifica gli ambiti OAuth

Il video viene trasmesso solo se viene fornito l'ambito corretto con la richiesta di connessione iniziale. Per risolvere l'errore, assicurati di fornire gli ambiti OAuth 2.0 corretti. Per ulteriori informazioni, consulta gli scopi 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 della sessione tramite il canale di dati di controllo della sessione con un stato di STATE_JOINED.

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

Verificare l'indicatore per il video

Meet fornisce video solo se sono indicati nell'offerta SDP. Nell'offerta devono essere presenti fino a tre descrizioni di 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 di contenuti multimediali video di sola invio, dove n è il numero di descrizioni di 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 all'assenza 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 un messaggio VideoAssignmentRequest positivo sia stato inviato e ricevuto dai server di Meet. L'esito positivo o negativo deve essere comunicato al client tramite lo stesso canale di dati.

Risolvere i problemi relativi a un numero inferiore di stream video rispetto a quello 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 da a=recvonly nella risposta riducono di questa quantità la quantità di stream inviati al client.

Controllare l'implementazione dell'osservatore

Assicurati di creare copie dei dati video se sposti l'elaborazione dei dati in un altro thread. VideoFrame.frame è in pratica un riferimento ai dati sottostanti, quindi tentare di accedervi dopo OnVideoFrame comporterà un comportamento non definito, ad esempio un errore di segmentazione.