En esta guía, se proporcionan instrucciones para resolver errores comunes de la API de Google Meet Media.
Cómo solucionar problemas relacionados con los códigos de error
A continuación, se incluyen sugerencias para solucionar problemas relacionados con los códigos de error que muestra el extremo connectActiveConference
:
Códigos de error | |
---|---|
NO_ACTIVE_CONFERENCE |
Verifica que el cliente de la API de Meet Media solo intente conectarse después de que el usuario autenticado ya esté presente en una conferencia en el espacio de reunión. |
INVALID_OFFER |
Lee los requisitos de las ofertas para verificar si falta algún detalle, como los canales de datos de apertura obligatorios. También puedes comparar la cadena de oferta de tu app con la oferta de ejemplo y analizar las diferencias. |
INCOMPATIBLE_DEVICE |
Uno o más dispositivos de la conferencia no son compatibles con los clientes de la API de Meet Media. Tu app no podrá unirse, por lo que debes comunicar esto a los usuarios finales. |
CONNECTIONS_EXHAUSTED |
Solo un cliente de la API de Meet Media puede conectarse a una conferencia a la vez. Si tu app falla, es posible que veas este error si intenta volver a conectarse. En este caso, espera unos 30 segundos para que Meet agote el tiempo de espera de la conexión anterior. Luego, vuelve a intentarlo. |
Plan unificado
Si los canales de datos nunca se abren y nunca recibes audio ni video, verifica que solo se use el Plan unificado cuando configures la conexión de pares local.
Error en el orden de la descripción de contenido multimedia
Cuando crees una conexión entre pares con una oferta de Protocolo de descripción de sesión (SDP), es posible que veas el siguiente error:
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.
Esto significa que las líneas de descripción de los medios en la respuesta de SDP no coinciden con las descripciones de los medios en la oferta de SDP:
Oferta de SDP | Respuesta de 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 |
Para corregir este error, asegúrate de que los tipos de medios similares estén configurados correctamente y agrupados cuando configures el objeto de conexión de pares. No se admiten descripciones de contenido multimedia intercaladas.
En la siguiente muestra de código, se muestra cómo hacer coincidir correctamente las descripciones de los medios:
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'});
Error de atributo de rol de DTLS
Cuando configures el atributo de rol de DTLS, es posible que veas el siguiente error:
All DTLS roles must be one of [ACTIVE, ACTPASS].
Este error ocurre cuando el atributo a=setup:< >
no está configurado correctamente para todas las descripciones de contenido multimedia en la oferta de SDP.
Para corregir este error, asegúrate de que cada descripción de contenido multimedia en la oferta de SDP tenga uno de los siguientes atributos obligatorios:
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
. . .
Soluciona problemas de audio
Las siguientes secciones pueden ayudarte a resolver problemas de audio en tu app.
Verifica los registros
Si usas el cliente web en un navegador Chrome, haz lo siguiente:
- Abre una pestaña nueva y, en la barra de direcciones, escribe
chrome://webrtc-internals
. - Ve a la sección etiquetada como
Stats graph for inbound-rtp
. - Inspecciona cada gráfico de audio para ver si se reciben paquetes.
Si usas el cliente de referencia de C++, verifica si se llama a OnAudioFrame
.
Verifica los permisos de OAuth
El audio solo se transmite si se proporciona el permiso adecuado con la solicitud de conexión inicial. Para resolver el error, asegúrate de proporcionar los permisos de OAuth 2.0 correctos. Para obtener más información, consulta los alcances de la API de Meet Media.
Verifica que la conferencia esté configurada correctamente
Cuando el cliente se conecta con los servidores de Google Meet, no se admite automáticamente a la conferencia. Asegúrate de haber recibido una actualización de recursos de control de sesión a través del canal de datos de control de sesión con un estado de
STATE_JOINED
.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Confirma que haya otros participantes de la conferencia cuyas transmisiones de audio no estén silenciadas.
Verifica la señal de audio
Meet solo proporciona audio si lo indicas en la oferta de SDP. Debe haber tres descripciones de contenido multimedia de audio solo para recibir en la oferta.
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
. . .
Si los servidores de Meet reciben una oferta válida, responden con una respuesta de SDP con tres descripciones de contenido multimedia de audio de solo envío.
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
. . .
Verifica tu implementación del observador
Asegúrate de hacer copias de los datos de audio si trasladas el procesamiento de datos a un subproceso diferente.
AudioFrame.pcm16
es, en realidad, una referencia a los datos subyacentes, por lo que intentar acceder a ella después de OnAudioFrame
genera un comportamiento no definido, como una falla de segmentación.
Soluciona problemas de video
Las siguientes secciones pueden ayudarte a resolver problemas de video en tu app.
Verifica los registros
Si usas el cliente web en un navegador Chrome, haz lo siguiente:
- Abre una pestaña nueva y, en la barra de direcciones, escribe
chrome://webrtc-internals
. - Ve a la sección etiquetada como
Stats graph for inbound-rtp
. - Inspecciona cada gráfico de video para ver si se reciben paquetes.
Si usas el cliente de referencia de C++, verifica si se llama a OnVideoFrame
.
Verifica los permisos de OAuth
El video solo se transmite si se proporciona el alcance adecuado con la solicitud de conexión inicial. Para resolver el error, asegúrate de proporcionar los permisos de OAuth 2.0 correctos. Para obtener más información, consulta los alcances de la API de Meet Media.
Verifica que la conferencia esté configurada correctamente
Cuando el cliente se conecta con los servidores de Meet, no se admite automáticamente a la conferencia. Asegúrate de haber recibido una actualización de recursos de control de sesión a través del canal de datos de control de sesión con un estado de
STATE_JOINED
.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Confirma que haya otros participantes de la conferencia cuyas transmisiones de video no estén silenciadas.
Verifica tu señal de video
Meet solo proporciona video si se indica en la oferta de SDP. En la oferta, debe haber hasta tres descripciones de contenido multimedia de video de solo recepción.
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
. . .
Si Meet recibe una oferta válida, responde con una respuesta de SDP con n
descripciones de contenido multimedia de video de solo envío, donde n
es la cantidad de descripciones de contenido multimedia de video en la oferta de 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
. . .
Soluciona problemas relacionados con la ausencia de video
- Comprueba que
m=video …
exista en la oferta de SDP que se envió a los servidores de Meet. - Verifica que
a=recvonly
sea un atributo en cada líneam=video
. - Verifica que haya la misma cantidad de líneas
m=video
en la respuesta SDP. - Verifica que
a=sendonly
oa=sendrecv
sean atributos en cada líneam=video
de la respuesta de SDP. - Verifica que los servidores de Meet hayan enviado y recibido correctamente un
VideoAssignmentRequest
. El éxito o el error se deben comunicar al cliente a través del mismo canal de datos.
Soluciona problemas relacionados con la transmisión de menos videos de lo esperado
- Verifica que la oferta de SDP contenga la cantidad correcta de líneas
m=video …
. - Asegúrate de que todas las descripciones de
m=video
en la respuesta de SDP contengan un atributoa=sendonly
oa=sendrecv
. Cualquier línea marcada comoa=recvonly
en la respuesta reduce la cantidad de transmisiones enviadas al cliente en esa cantidad.
Verifica tu implementación del observador
Asegúrate de hacer copias de los datos de video si trasladas el procesamiento de datos a un subproceso diferente.
VideoFrame.frame
es, en realidad, una referencia a los datos subyacentes, por lo que intentar acceder a ella después de OnVideoFrame
generará un comportamiento no definido, como una falla de segmentación.