Ce guide explique comment résoudre les erreurs courantes de l'API Google Meet Media.
Résoudre les problèmes liés aux codes d'erreur
Voici quelques conseils pour résoudre les problèmes liés aux codes d'erreur renvoyés par le
connectActiveConference
point de terminaison :
| Codes d'erreur | |
|---|---|
NO_ACTIVE_CONFERENCE |
Vérifiez que le client de l'API Meet Media ne tente de se connecter qu'une fois que l' utilisateur authentifié est déjà présent dans une conférence sur l' espace de réunion. Si vous interrogez le démarrage de la conférence, utilisez plutôt les événements de démarrage de la conférence. |
INVALID_OFFER |
Lisez attentivement les exigences de l'offre pour vérifier si des informations sont manquantes, par exemple l'ouverture des canaux de données requis. Vous pouvez également comparer la chaîne d'offre de votre application à l' exemple d'offre et examiner les différences. |
INCOMPATIBLE_DEVICE |
Un ou plusieurs appareils de la conférence ne sont pas compatibles avec les clients de l'API Meet Media. Votre application ne pourra pas rejoindre la conférence. Vous pouvez donc en informer vos utilisateurs finaux. Les appareils peuvent être incompatibles, par exemple si le compte associé à l'appareil est considéré comme mineur. Pour en savoir plus, consultez les exigences concernant les utilisateurs finaux. |
UNSUPPORTED_PLATFORM_PRESENT |
Un ou plusieurs appareils de la conférence ne sont pas compatibles avec les clients de l'API Meet Media. Votre application ne pourra pas rejoindre la conférence. Vous pouvez donc en informer vos utilisateurs finaux. Les plates-formes peuvent être non compatibles, par exemple si les applications mobiles ne respectent pas les versions minimales requises ou si la participation se fait à partir de plates-formes non compatibles. Pour en savoir plus, consultez les exigences concernant les utilisateurs finaux. |
CONNECTIONS_EXHAUSTED |
Un seul client de l'API Meet Media peut se connecter à une conférence à la fois. Si votre application plante, cette erreur peut s'afficher si elle tente de se reconnecter. Dans ce cas, attendez environ 30 secondes que Meet expire la connexion précédente. Effectuez ensuite une nouvelle tentative. |
CONSENTER_ABSENT |
Il n'y a pas de personne autorisée éligible dans la réunion. Pour les réunions appartenant à des consommateurs assurez-vous que l'initiateur participe à la réunion. Pour les réunions appartenant à des propriétaires d'espace de travail, au moins un membre de cette organisation doit être propriétaire de la réunion. Pour en savoir plus, consultez les exigences concernant les personnes autorisées. |
DISABLED_BY_ADMIN |
L'administrateur a désactivé l'API Meet Media pour son organisation. Si vous rencontrez ce problème, il ne peut pas être résolu pendant la durée d'une réunion. Pour en savoir plus, consultez la figure 3 du cycle de vie de l'API Meet Media. |
DISABLED_BY_HOST_CONTROL |
L'organisateur a désactivé l'API Meet Media pour la réunion. Votre application ne pourra pas rejoindre la conférence. Vous pouvez donc en informer vos utilisateurs finaux. Pour en savoir plus, consultez la figure 5 du cycle de vie de l'API Meet Media. |
DISABLED_DUE_TO_WATERMARKING |
Lorsque le tatouage est activé, l'API Meet Media n'est pas autorisée dans la réunion. Vous pouvez en informer vos utilisateurs finaux. Pour en savoir plus, consultez la figure 2 du cycle de vie de l'API Meet Media. |
DISABLED_DUE_TO_ENCRYPTION |
Lorsque le chiffrement est activé, l'API Meet Media n'est pas autorisée dans la réunion. Ce paramètre ne peut pas être modifié pendant un appel Meet. Vous pouvez en informer vos utilisateurs finaux. Pour en savoir plus, consultez la figure 2 du cycle de vie de l'API Meet Media. |
Plan unifié
Si les canaux de données ne s'ouvrent jamais et que vous ne recevez jamais de contenu audio ou vidéo, vérifiez que seul le plan unifié est utilisé lors de la configuration de la connexion appairée locale.
Erreur d'ordre de description des contenus multimédias
Lorsque vous créez une connexion peer-to-peer avec une offre Session Description Protocol (SDP), l'erreur suivante peut s'afficher :
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.
Cela signifie que les lignes de description des contenus multimédias dans la réponse SDP ne correspondent pas aux descriptions des contenus multimédias dans l'offre SDP :
| Offre SDP | Réponse 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 |
Pour corriger cette erreur, assurez-vous que les types de contenus multimédias similaires sont correctement configurés et regroupés lors de la définition de l'objet de connexion appairée. Les descriptions de contenus multimédias entrelacées ne sont pas acceptées.
L'exemple de code suivant montre comment faire correspondre correctement les descriptions des contenus multimédias :
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'});
Erreur d'attribut de rôle DTLS
Lorsque vous définissez l'attribut de rôle DTLS, l'erreur suivante peut s'afficher :
All DTLS roles must be one of [ACTIVE, ACTPASS].
Cette erreur se produit lorsque l'attribut a=setup:< > n'est pas correctement défini pour toutes les
descriptions de contenus multimédias dans l'offre SDP.
Pour corriger cette erreur, assurez-vous que chaque description de contenu multimédia dans l'offre SDP comporte l'un des attributs requis suivants :
a=setup:actpassa=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
. . .
Résoudre les problèmes audio
Les sections suivantes peuvent vous aider à résoudre les problèmes audio dans votre application.
Vérifier les journaux
Si vous utilisez le client Web dans un navigateur Chrome :
- Ouvrez un nouvel onglet et saisissez
chrome://webrtc-internalsdans la barre d'adresse. - Accédez à la section intitulée
Stats graph for inbound-rtp. - Inspectez chaque graphique audio pour voir si des paquets sont reçus.
Si vous utilisez le client de référence C++, vérifiez si
OnAudioFrame
est appelé.
Vérifier les champs d'application OAuth
Le contenu audio n'est transmis que si le champ d'application approprié est fourni avec la requête de connexion initiale. Pour résoudre l'erreur, assurez-vous de fournir les champs d'application OAuth 2.0 corrects. Pour en savoir plus, consultez les champs d'application de l'API Meet Media.
Vérifier que la conférence est correctement configurée
Lorsque le client se connecte aux serveurs Google Meet, il n'est pas automatiquement admis à la conférence. Assurez-vous d'avoir reçu une mise à jour de la ressource de contrôle de session sur le canal de données de contrôle de session avec l'état
STATE_JOINED.{"sessionStatus":{"connectionState":"STATE_JOINED"}}Vérifiez qu'il existe d'autres participants à la conférence dont les flux audio ne sont pas désactivés.
Vérifier que vous signalez le contenu audio
Meet ne fournit du contenu audio que si vous le signalez dans l'offre SDP. L'offre doit contenir trois, descriptions de contenus multimédias audio en réception seule dans l'offre.
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 les serveurs Meet reçoivent une offre valide, ils répondent avec une réponse SDP contenant trois descriptions de contenus multimédias audio en envoi seul.
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
. . .
Vérifier l'implémentation de votre observateur
Veillez à créer des copies des données audio si vous déplacez le traitement des données vers un autre thread.
AudioFrame.pcm16
est en fait une référence aux données sous-jacentes. Par conséquent, toute tentative d'accès après
OnAudioFrame
entraîne un comportement indéfini, tel qu'une erreur de segmentation.
Résoudre les problèmes liés aux vidéos
Les sections suivantes peuvent vous aider à résoudre les problèmes liés aux vidéos dans votre application.
Vérifier les journaux
Si vous utilisez le client Web dans un navigateur Chrome :
- Ouvrez un nouvel onglet et saisissez
chrome://webrtc-internalsdans la barre d'adresse. - Accédez à la section intitulée
Stats graph for inbound-rtp. - Inspectez chaque graphique vidéo pour voir si des paquets sont reçus.
Si vous utilisez le client de référence C++, vérifiez si
OnVideoFrame
est appelé.
Vérifier les champs d'application OAuth
Le contenu vidéo n'est transmis que si le champ d'application approprié est fourni avec la requête de connexion initiale. Pour résoudre l'erreur, assurez-vous de fournir les champs d'application OAuth 2.0 corrects. Pour en savoir plus, consultez les champs d'application de l'API Meet Media.
Vérifier que la conférence est correctement configurée
Lorsque le client se connecte aux serveurs Meet, il n'est pas automatiquement admis à la conférence. Assurez-vous d'avoir reçu une mise à jour de la ressource de contrôle de session sur le canal de données de contrôle de session avec l'état
STATE_JOINED.{"sessionStatus":{"connectionState":"STATE_JOINED"}}Vérifiez qu'il existe d'autres participants à la conférence dont les flux vidéo ne sont pas désactivés.
Vérifier que vous signalez le contenu vidéo
Meet ne fournit du contenu vidéo que s'il est signalé dans l'offre SDP. L'offre doit contenir jusqu'à trois descriptions de contenus multimédias vidéo en réception seule.
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 reçoit une offre valide, il répond avec une réponse SDP contenant n descriptions de contenus multimédias vidéo en envoi seul, où n correspond au nombre de descriptions de contenus multimédias vidéo dans l'offre 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
. . .
Résoudre les problèmes liés à l'absence de vidéo
- Vérifiez que
m=video …existe dans l'offre SDP envoyée aux serveurs Meet. - Vérifiez que
a=recvonlyest un attribut sous chaque lignem=video. - Vérifiez qu'un nombre égal de lignes
m=videoexiste dans la réponse SDP. - Vérifiez que
a=sendonlyoua=sendrecvsont des attributs sous chaque lignem=videodans la réponse SDP. - Vérifiez qu'une requête
VideoAssignmentRequesta été envoyée et reçue par les serveurs Meet. La réussite ou l'échec doit être communiqué au client sur le même canal de données.
Résoudre les problèmes liés à un nombre de flux vidéo inférieur à celui attendu
- Vérifiez que l'offre SDP contient le nombre correct de lignes
m=video …. - Assurez-vous que toutes les descriptions
m=videodans la réponse SDP contiennent un attributa=sendonlyoua=sendrecv. Toutes les lignes marquéesa=recvonlydans la réponse réduisent d'autant le nombre de flux envoyés au client.
Vérifier l'implémentation de votre observateur
Veillez à créer des copies des données vidéo si vous déplacez le traitement des données vers un autre thread.
VideoFrame.frame
est en fait une référence aux données sous-jacentes. Par conséquent, toute tentative d'accès après
OnVideoFrame
entraîne un comportement indéfini, tel qu'une erreur de segmentation.