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 point de terminaison connectActiveConference
:
Codes d'erreur | |
---|---|
NO_ACTIVE_CONFERENCE |
Vérifiez que le client de l'API Meet Media ne tente de se connecter qu'après que l'utilisateur authentifié est déjà présent dans une conférence sur l'espace de réunion. |
INVALID_OFFER |
Consultez les conditions requises pour les offres pour vérifier si des informations sont manquantes, comme les canaux de données d'ouverture 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 y participer. Vous pouvez donc en informer vos 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 pour que Meet mette fin à la connexion précédente. Ensuite, réessayez. |
Plan unifié
Si les canaux de données ne s'ouvrent jamais et que vous ne recevez jamais d'audio ni de vidéo, vérifiez que seul le plan unifié est utilisé lors de la configuration de la connexion peer locale.
Erreur d'ordre dans la description des contenus multimédias
Lorsque vous créez une connexion peer-to-peer avec une offre Session Description Protocol (SDP), le message d'erreur suivant 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 médias dans la réponse SDP ne correspondent pas aux descriptions des mé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 médias similaires sont configurés correctement et regroupés lors de la définition de l'objet de connexion entre pairs. Les descriptions multimédias entrelacées ne sont pas acceptées.
L'exemple de code suivant montre comment faire correspondre correctement les descriptions 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 multimédias de l'offre SDP.
Pour résoudre cette erreur, assurez-vous que chaque description multimédia de l'offre SDP comporte l'un des attributs obligatoires 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:
- Ouvrez un nouvel onglet et saisissez
chrome://webrtc-internals
dans la barre d'adresse. - Accédez à la section
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
L'audio n'est transmis que si la portée appropriée est fournie avec la requête de connexion initiale. Pour résoudre l'erreur, veillez à fournir les portées OAuth 2.0 appropriées. Pour en savoir plus, consultez la section 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 via le canal de données de contrôle de session avec un état de
STATE_JOINED
.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Vérifiez que d'autres participants à la conférence ont des flux audio non coupés.
Vérifier votre signal audio
Meet ne fournit de l'audio que si vous le signalez dans l'offre SDP. L'offre doit comporter trois descriptions de médias audio en réception seule.
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 par une réponse SDP avec trois descriptions multimédias audio à envoyer uniquement.
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-internals
dans la barre d'adresse. - Accédez à la section
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
La vidéo n'est transmise que si le champ d'application approprié est fourni avec la requête de connexion initiale. Pour résoudre l'erreur, veillez à fournir les portées OAuth 2.0 appropriées. Pour en savoir plus, consultez la section 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 via le canal de données de contrôle de session avec un état de
STATE_JOINED
.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Vérifiez que d'autres participants à la conférence ont leurs flux vidéo activés.
Valider votre signal pour la vidéo
Meet ne fournit de la vidéo que si elle est signalée dans l'offre SDP. L'offre doit comporter jusqu'à trois descriptions de médias vidéo en mode réception uniquement.
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 avec n
descriptions multimédias vidéo d'envoi uniquement, où n
est le nombre de descriptions 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 de vidéo manquante
- 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 lignem=video
. - Vérifiez qu'un nombre égal de lignes
m=video
existe dans la réponse SDP. - Vérifiez que
a=sendonly
oua=sendrecv
sont des attributs sous chaque lignem=video
dans la réponse SDP. - Vérifiez qu'un
VideoAssignmentRequest
a bien été envoyé et reçu par les serveurs Meet. La réussite ou l'échec doivent être communiqués au client via le même canal de données.
Résoudre les problèmes de diffusion de moins de flux vidéo que prévu
- Vérifiez que l'offre SDP contient le bon nombre de lignes
m=video …
. - Assurez-vous que toutes les descriptions
m=video
de la réponse SDP contiennent un attributa=sendonly
oua=sendrecv
. Toute ligne marquéea=recvonly
dans la réponse réduit 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. Toute tentative d'accès après OnVideoFrame
entraînera un comportement indéfini, tel qu'une erreur de segmentation.