Meet Media API hatalarını giderme

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

Hata kodlarıyla ilgili sorunları giderme

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

Hata kodları
NO_ACTIVE_CONFERENCE Meet Media API istemcisinin yalnızca kimliği doğrulanmış kullanıcı toplantı alanındaki bir konferansta bulunduktan sonra bağlanmaya çalıştığını doğrulayın. Konferansın başlangıç zamanı için anket yapıyorsanız bunun yerine Konferans başlangıcı etkinlikleri'ni kullanın.
INVALID_OFFER Fırsat koşullarını inceleyerek eksik ayrıntı olup olmadığını (ör. gerekli kanalların açılış tarihi) kontrol edin. Ayrıca, uygulamanızın teklif dizesini örnek teklifle karşılaştırıp farklılıkları da inceleyebilirsiniz.
INCOMPATIBLE_DEVICE Konferanstaki 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. Cihazların uyumsuz olmasının nedenleri arasında, cihazla ilişkili hesabın reşit olmayan bir kullanıcıya ait olması yer alır. Daha fazla bilgi için son kullanıcı şartları başlıklı makaleyi inceleyin.
UNSUPPORTED_PLATFORM_PRESENT Konferanstaki 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. Desteklenmeyen platformların nedenleri arasında, mobil uygulamaların minimum sürümlerini karşılamayan mobil uygulamalar ve desteklenmeyen platformlardan katılma yer alır. Daha fazla bilgi için son kullanıcı şartları başlıklı makaleyi inceleyin.
CONNECTIONS_EXHAUSTED Bir konferansa aynı anda yalnızca bir Meet Media API istemcisi bağlanabilir. Uygulamanız çökerse yeniden bağlanmaya çalıştığında 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.
CONSENTER_ABSENT Toplantıda uygun bir izin veren kullanıcı yoksa. Tüketicilere ait toplantılarda, toplantıyı başlatan kişinin toplantıda olduğundan emin olun. Çalışma alanı sahibi toplantılarında, toplantının sahibi olan en az bir kuruluş üyesi olmalıdır. Daha fazla bilgi için izin veren kullanıcı koşulları başlıklı makaleyi inceleyin.
DISABLED_BY_ADMIN Yönetici, kuruluşunda Meet Media API'yi devre dışı bırakmıştır. Bu durumla karşılaşırsanız toplantı süresince bu ayarı değiştiremezsiniz. Daha fazla bilgi için Meet Media API yaşam döngüsü başlıklı makaledeki Şekil 3'e bakın.
DISABLED_BY_HOST_CONTROL Toplantıyı düzenleyen kullanıcı, toplantı için Meet Media API'yi devre dışı bırakmıştır. Uygulamanız katılamayacağından bu durumu son kullanıcılarınıza bildirebilirsiniz. Daha fazla bilgi için Meet Media API yaşam döngüsü başlıklı makaledeki Şekil 5'e bakın.
DISABLED_DUE_TO_WATERMARKING Filigran özelliği etkinleştirildiğinde Meet Media API'nin toplantıya katılmasına izin verilmez. Bu durumu son kullanıcılarınıza bildirebilirsiniz. Daha fazla bilgi için Meet Media API yaşam döngüsü başlıklı makaledeki Şekil 2'ye bakın.
DISABLED_DUE_TO_ENCRYPTION Şifreleme etkinleştirildiğinde Meet Media API'nin toplantıya katılmasına izin verilmez. Bu ayar, Meet görüşmesi sırasında değiştirilemez. Bu durumu son kullanıcılarınıza bildirebilirsiniz. Daha fazla bilgi için Meet Media API yaşam döngüsü başlıklı makaledeki Şekil 2'ye bakın.

Birleşik plan

Veri kanalları hiç açılmıyorsa ve ses ya da video almıyorsanız yerel eş bağlantısı yapılandırılırken yalnızca Birleşik Plan'ın kullanıldığından emin olun.

Medya açıklaması sıralama hatası

Oturum Açıklama Protokolü (SDP) teklifiyle eşler arası bağlantı oluştururken şu 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. Araya eklenmiş 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, SDP teklifindeki tüm medya açıklamaları için a=setup:< > özelliği düzgün şekilde ayarlanmadığında oluşur.

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 edin

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 istemcisini kullanıyorsanız OnAudioFrame öğesinin ç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ğrulayın.

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

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

Ses sinyalinizi doğrulama

Meet yalnızca SDP teklifinde bunu belirtirseniz ses sağlar. Teklifte üç adet, yalnızca alıcıya yönelik 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 aldığında üç adet yalnızca gönderme amaçlı sesli medya 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 işleme taşırsanız ses verilerinin kopyalarını oluşturduğunuzdan emin olun. AudioFrame.pcm16 temel verilerin referansıdır. Bu nedenle, OnAudioFrame sonrasında 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 edin

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 istemcisini kullanıyorsanız OnVideoFrame öğesinin ç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ğrulayın.

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

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

Video için sinyalinizi doğrulama

Meet, yalnızca SDP teklifinde sinyal verildiği takdirde video sağlar. Teklifte en fazla üç adet, yalnızca alıcıya yönelik 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 send-only video medya açıklamaları içeren bir SDP yanıtı ile karşılık 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 … olup olmadığını kontrol edin.
  • a=recvonly öğesinin her m=video satırında bir özellik olarak yer aldığını kontrol edin.
  • SDP yanıtında eşit sayıda m=video satır olduğundan emin olun.
  • SDP yanıtındaki her m=video satırında a=sendonly veya a=sendrecv özelliklerinin bulunduğunu kontrol edin.
  • Meet sunucularına başarılı bir VideoAssignmentRequest gönderilip alınmadığını kontrol edin. Başarı veya başarısızlık, aynı veri kanalı üzerinden istemciye geri bildirilmelidir.

Beklenenden daha az video akışı sorununu 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ğini içerdiğinden emin olun. Yanıtın a=recvonly ile işaretlenen satırları, istemciye gönderilen yayın sayısını o kadar azaltır.

Gözlemci uygulamanızı kontrol etme

Veri işlemeyi farklı bir işleme taşırsanız video verilerinin kopyalarını oluşturduğunuzdan emin olun. VideoFrame.frame temelde temel verilerin referansıdır. Bu nedenle, OnVideoFrame sonrasında erişmeye çalışmak, segmentasyon hatası gibi tanımlanmamış davranışlara neden olur.