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:
- 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 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:
- 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 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 herm=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ındaa=sendonly
veyaa=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ına=sendonly
veyaa=sendrecv
özelliği içerdiğinden emin olun. Yanıttaa=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.