Dépanner et corriger les erreurs de l'API Meet Media

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

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 :

  1. Ouvrez un nouvel onglet et saisissez chrome://webrtc-internals dans la barre d'adresse.
  2. Accédez à la section intitulée Stats graph for inbound-rtp.
  3. 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 :

  1. Ouvrez un nouvel onglet et saisissez chrome://webrtc-internals dans la barre d'adresse.
  2. Accédez à la section intitulée Stats graph for inbound-rtp.
  3. 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=recvonly est un attribut sous chaque ligne m=video.
  • Vérifiez qu'un nombre égal de lignes m=video existe dans la réponse SDP.
  • Vérifiez que a=sendonly ou a=sendrecv sont des attributs sous chaque ligne m=video dans la réponse SDP.
  • Vérifiez qu'une requête VideoAssignmentRequest a é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=video dans la réponse SDP contiennent un attribut a=sendonly ou a=sendrecv. Toutes les lignes marquées a=recvonly dans 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.