En esta guía, se proporcionan instrucciones para resolver errores comunes de la API de Media de Google Meet.
Soluciona 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 devuelve 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. Si sondeos para el inicio de la conferencia, usa Eventos de inicio de la conferencia. |
INVALID_OFFER |
Lee los requisitos de la oferta para verificar si falta algún detalle, como la apertura de los canales de datos requeridos. 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 puedes comunicarles esto a tus usuarios finales. Entre los motivos por los que un dispositivo puede ser incompatible, se incluye el caso en que la cuenta asociada al dispositivo se considere de menor de edad. Para obtener más información, consulta los requisitos del usuario final. |
UNSUPPORTED_PLATFORM_PRESENT |
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 puedes comunicarles esto a tus usuarios finales. Entre los motivos por los que una plataforma no es compatible, se incluyen las apps para dispositivos móviles que no cumplen con las versiones mínimas de las apps para dispositivos móviles y la unión desde plataformas no compatibles. Para obtener más información, consulta los requisitos del usuario final. |
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. |
CONSENTER_ABSENT |
No hay un otorgante de consentimiento apto en la reunión. En el caso de las reuniones propiedad del consumidor, asegúrate de que el iniciador esté en la reunión. En el caso de las reuniones de propietarios de espacios de trabajo, debe haber al menos un miembro de esa organización que sea propietario de la reunión. Para obtener más información, consulta los requisitos de consentimiento. |
DISABLED_BY_ADMIN |
El administrador inhabilitó la API de Meet Media para su organización. Si esto sucede, no se podrá cambiar durante la duración de la reunión. Para obtener más información, consulta la Figura 3 en Ciclo de vida de la API de Meet Media. |
DISABLED_BY_HOST_CONROL |
El organizador inhabilitó la API de Meet Media para la reunión. Tu app no podrá unirse, por lo que puedes comunicarles esto a tus usuarios finales. Para obtener más información, consulta la figura 5 en Ciclo de vida de la API de Meet Media. |
DISABLED_DUE_TO_WATERMARKING |
Cuando se habilita la marca de agua, no se permite el acceso de la API de Meet Media a la reunión. Puedes comunicar esto a tus usuarios finales. Para obtener más información, consulta la Figura 2 en Conoce el ciclo de vida de la API de Media. |
DISABLED_DUE_TO_ENCRYPTION |
Cuando la encriptación está habilitada, no se permite el acceso de la API de Meet Media a la reunión. Esto no se puede cambiar durante una llamada de Meet. Puedes comunicar esto a tus usuarios finales. Para obtener más información, consulta la Figura 2 en Conoce el ciclo de vida de la API de Media. |
Plan unificado
Si los canales de datos nunca se abren y nunca recibes audio o video, verifica que solo se use Unified Plan cuando configures la conexión de pares local.
Error en el orden de la descripción de los medios
Cuando creas una conexión de punto a punto con una oferta de Session Description Protocol (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 medios en la respuesta del SDP no coinciden con las descripciones de medios en la oferta del 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 establezcas el objeto de conexión entre pares. No se admiten las descripciones de medios intercaladas.
En el siguiente ejemplo 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 en el 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 se produce cuando el atributo a=setup:< >
no está configurado correctamente para todas las descripciones de medios en la oferta de SDP.
Para corregir este error, asegúrate de que cada descripción de medios 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
En las siguientes secciones, se explica cómo 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 escribe
chrome://webrtc-internals
en la barra de direcciones. - 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 alguna vez se llama a OnAudioFrame
.
Verifica los permisos de OAuth
El audio 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 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 en la conferencia. Asegúrate de haber recibido una actualización del recurso 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 en la conferencia cuyos flujos de audio no estén silenciados.
Verifica la señal de audio
Meet solo proporciona audio si lo indicas en la oferta de SDP. Debe haber tres descripciones de medios de audio de solo recepción 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 que incluye tres descripciones de medios 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 la implementación del observador
Asegúrate de hacer copias de los datos de audio si mueves el procesamiento de datos a un subproceso diferente.
AudioFrame.pcm16
es, en efecto, una referencia a los datos subyacentes, por lo que intentar acceder a ella después de
OnAudioFrame
genera un comportamiento indefinido, como un error 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 escribe
chrome://webrtc-internals
en la barra de direcciones. - 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 alguna vez 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 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 en la conferencia. Asegúrate de haber recibido una actualización del recurso 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 en la conferencia cuyos flujos de video no estén silenciados.
Verifica la señal de video
Meet solo proporciona video si se indica en la oferta de SDP. Debe haber hasta tres descripciones de medios de video de solo recepción en la oferta.
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 que incluye descripciones de medios de video de solo envío n
, donde n
es la cantidad de descripciones de medios 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 falta de video
- Comprueba que
m=video …
exista en la oferta de SDP enviada a los servidores de Meet. - Verifica que
a=recvonly
sea un atributo en cada línea dem=video
. - Verifica que haya la misma cantidad de líneas
m=video
en la respuesta del SDP. - Verifica que
a=sendonly
oa=sendrecv
sean atributos en cada línea dem=video
en la respuesta del SDP. - Verifica que se haya enviado y recibido correctamente un
VideoAssignmentRequest
en los servidores de Meet. El éxito o el fracaso se deben comunicar al cliente a través del mismo canal de datos.
Soluciona problemas relacionados con una cantidad de transmisiones de video inferior a la esperada
- 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 del SDP contengan un atributoa=sendonly
oa=sendrecv
. Las líneas marcadas comoa=recvonly
en la respuesta reducen la cantidad de transmisiones enviadas al cliente en esa cantidad.
Verifica la implementación del observador
Asegúrate de hacer copias de los datos de video si mueves el procesamiento de datos a un subproceso diferente.
VideoFrame.frame
es, en efecto, una referencia a los datos subyacentes, por lo que intentar acceder a ella después de OnVideoFrame
generará un comportamiento indefinido, como un error de segmentación.