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:
- Yeni bir sekme açın ve adres çubuğuna
chrome://webrtc-internals
yazın. Stats graph for inbound-rtp
etiketli bölüme gidin.- 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:
- Yeni bir sekme açın ve adres çubuğuna
chrome://webrtc-internals
yazın. Stats graph for inbound-rtp
etiketli bölüme gidin.- 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 herm=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ındaa=sendonly
veyaa=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ına=sendonly
veyaa=sendrecv
özelliğini içerdiğinden emin olun. Yanıtına=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.