Meet Media API hatalarını giderme

Bu kılavuzda, sık karşılaşılan Google Meet Media API hatalarının nasıl çözüleceğiyle ilgili talimatlar verilmektedir.

Hata kodlarıyla ilgili sorunları giderme

connectActiveConference uç noktası tarafından döndürülen hata kodlarıyla ilgili sorunları gidermeyle ilgili ipuçlarını aşağıda bulabilirsiniz:

Hata kodları
NO_ACTIVE_CONFERENCE Meet Media API istemcisinin yalnızca kimliği doğrulanmış kullanıcının toplantı alanında bir konferansta bulunduğunda bağlanmaya çalıştığını kontrol edin.
INVALID_OFFER Gerekli kanalları açma gibi eksik ayrıntıları kontrol etmek için fırsat koşullarını okuyun. Ayrıca, uygulamanızın teklif dizesini örnek teklifle karşılaştırıp farklılıkları inceleyebilirsiniz.
INCOMPATIBLE_DEVICE Toplantıda bulunan bir veya daha fazla cihaz, Meet Media API istemcileriyle uyumlu değildir. Uygulamanız katılamayacağından bu durumu son kullanıcılarınıza bildirebilirsiniz.
CONNECTIONS_EXHAUSTED Bir konferansa aynı anda yalnızca bir Meet Media API istemcisi bağlanabilir. Uygulamanız kilitlenirse yeniden bağlanmaya çalışırken bu hatayı görebilirsiniz. Bu durumda, Meet'in önceki bağlantının zaman aşımına uğraması için yaklaşık 30 saniye bekleyin. Daha sonra tekrar deneyin.

Birleşik plan

Veri kanalları hiç açılmazsa ve hiç ses veya video almazsanız yerel eş bağlantısı yapılandırılırken yalnızca Birleştirilmiş Plan'ın kullanıldığını kontrol edin.

Medya açıklaması sırası hatası

Oturum Açıklama Protokolü (SDP) teklifiyle eşler arası bağlantı oluştururken aşağıdaki hatayı görebilirsiniz:

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.

Bu, SDP yanıtındaki medya açıklaması satırlarının SDP teklifindeki medya açıklamalarıyla eşleşmediği anlamına gelir:

SDP teklifi SDP yanıtı
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

Bu hatayı düzeltmek için benzer medya türlerinin doğru şekilde yapılandırıldığından ve eş bağlantı nesnesi ayarlanırken birlikte gruplandırıldığından emin olun. Aralıklı medya açıklamaları desteklenmez.

Aşağıdaki kod örneğinde, medya açıklamalarının nasıl doğru şekilde eşleştirileceği gösterilmektedir:

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'});

DTLS rol özelliği hatası

DTLS rol özelliğini ayarlarken şu hatayı görebilirsiniz:

All DTLS roles must be one of [ACTIVE, ACTPASS].

Bu hata, a=setup:< > özelliği SDP teklifindeki tüm medya açıklamaları için düzgün şekilde ayarlanmadığında ortaya çıkar.

Bu hatayı düzeltmek için SDP teklifindeki her medya açıklamasında aşağıdaki zorunlu özelliklerden birinin bulunduğundan emin olun:

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

Sesle ilgili sorunları giderme

Aşağıdaki bölümler, uygulamanızdaki ses sorunlarını çözmenize yardımcı olabilir.

Günlükleri kontrol etme

Web istemcisini Chrome tarayıcıda kullanıyorsanız:

  1. Yeni bir sekme açın ve adres çubuğuna chrome://webrtc-internals yazın.
  2. Stats graph for inbound-rtp etiketli bölüme gidin.
  3. Paketlerin alınıp alınmadığını görmek için her ses grafiğini inceleyin.

C++ referans müşterisini kullanıyorsanız OnAudioFrame işlevinin hiç çağrılıp çağrılmadığını kontrol edin.

OAuth kapsamlarını doğrulama

Ses yalnızca ilk bağlantı isteğiyle birlikte uygun kapsam sağlanırsa iletilir. Hatayı çözmek için doğru OAuth 2.0 kapsamlarını sağladığınızdan emin olun. Daha fazla bilgi için Meet Media API kapsamları başlıklı makaleyi inceleyin.

Konferansın doğru şekilde ayarlandığını doğrulama

  • İstemci Google Meet sunucularına bağlandığında otomatik olarak konferansa kabul edilmez. Oturum denetimi veri kanalı üzerinden STATE_JOINED durumuyla bir oturum denetimi kaynak güncellemesi aldığınızdan emin olun.

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Ses akışları kapatılmamış başka konferans katılımcıları olduğunu onaylayın.

Ses sinyalini doğrulama

Meet yalnızca SDP teklifinde bu durumu belirtirseniz ses sağlar. Teklifte üç adet yalnızca alıcı sesli medya açıklaması bulunmalıdır.

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

Meet sunucuları geçerli bir teklif alırsa üç adet yalnızca gönderme amaçlı ses medyası açıklaması içeren bir SDP yanıtı verir.

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

Gözlemci uygulamanızı kontrol etme

Veri işlemeyi farklı bir ileti dizisine taşırsanız ses verilerinin kopyalarını oluşturduğunuzdan emin olun. AudioFrame.pcm16, temel verilere referans olduğundan OnAudioFrame AudioFrame.pcm16'a erişmeye çalışmak segmentasyon hatası gibi tanımlanmamış davranışlara neden olur.

Görüntülü görüşme sorunlarını giderme

Aşağıdaki bölümler, uygulamanızdaki video sorunlarını çözmenize yardımcı olabilir.

Günlükleri kontrol etme

Web istemcisini Chrome tarayıcıda kullanıyorsanız:

  1. Yeni bir sekme açın ve adres çubuğuna chrome://webrtc-internals yazın.
  2. Stats graph for inbound-rtp etiketli bölüme gidin.
  3. Paketlerin alınıp alınmadığını görmek için her video grafiğini inceleyin.

C++ referans müşterisini kullanıyorsanız OnVideoFrame işlevinin hiç çağrılıp çağrılmadığını kontrol edin.

OAuth kapsamlarını doğrulama

Video yalnızca ilk bağlantı isteğiyle birlikte uygun kapsam sağlanırsa iletilir. Hatayı çözmek için doğru OAuth 2.0 kapsamlarını sağladığınızdan emin olun. Daha fazla bilgi için Meet Media API kapsamları başlıklı makaleyi inceleyin.

Konferansın doğru şekilde ayarlandığını doğrulama

  • İstemci Meet sunucularına bağlandığında konferansa otomatik olarak kabul edilmez. Oturum denetimi veri kanalı üzerinden STATE_JOINED durumuyla bir oturum denetimi kaynak güncellemesi aldığınızdan emin olun.

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Video akışlarının sesinin kapatılmadığı başka konferans katılımcıları olduğunu onaylayın.

Video için sinyalinizi doğrulama

Meet, yalnızca SDP teklifinde sinyal gönderilirse video sağlar. Teklifte en fazla üç adet yalnızca alıcı video medya açıklaması bulunmalıdır.

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

Meet geçerli bir teklif alırsa n yalnızca gönderme amaçlı video medya açıklamaları içeren bir SDP yanıtı ile yanıt verir. Burada n, SDP teklifindeki video medya açıklamalarının sayısıdır.

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

Video olmamasıyla ilgili sorunları giderme

  • Meet sunucularına gönderilen SDP teklifinde m=video … değerinin bulunduğundan emin olun.
  • a=recvonly özelliğinin her m=video satırında yer aldığını kontrol edin.
  • SDP yanıtında eşit sayıda m=video satırı bulunduğundan emin olun.
  • SDP yanıtındaki her m=video satırının altında a=sendonly veya a=sendrecv özelliklerinin bulunduğundan emin olun.
  • Meet sunucularına başarılı bir VideoAssignmentRequest gönderilip gönderilmediğini ve bu sunucuların bu isteği alıp almadığını kontrol edin. Başarı veya başarısızlık, aynı veri kanalı üzerinden istemciye geri bildirilmelidir.

Beklenenden daha az video akışı sorunu giderme

  • SDP teklifinin doğru sayıda m=video … satırı içerdiğinden emin olun.
  • SDP yanıtındaki tüm m=video açıklamalarının a=sendonly veya a=sendrecv özelliği içerdiğinden emin olun. Yanıtta a=recvonly işaretli tüm satırlar, istemciye gönderilen akış miktarını o kadar azaltır.

Gözlemci uygulamanızı kontrol etme

Veri işlemeyi farklı bir ileti dizisine taşırsanız video verilerinin kopyalarını oluşturduğunuzdan emin olun. VideoFrame.frame, temel verilere referans olduğundan OnVideoFrame VideoFrame.frame değişkenine erişmeye çalışmak segmentasyon hatası gibi tanımlanmamış davranışlara neden olur.