Panduan ini memberikan petunjuk tentang cara mengatasi error umum Google Meet Media API.
Memecahkan masalah kode error
Berikut adalah tips untuk memecahkan masalah kode error yang ditampilkan oleh endpoint
connectActiveConference
:
Kode error | |
---|---|
NO_ACTIVE_CONFERENCE |
Pastikan klien Meet Media API hanya mencoba terhubung setelah pengguna yang diautentikasi sudah ada dalam konferensi di ruang rapat. Jika Anda melakukan polling untuk awal konferensi, gunakan Peristiwa konferensi mulai. |
INVALID_OFFER |
Baca persyaratan penawaran untuk memeriksa apakah ada detail yang kurang, seperti membuka saluran data yang bersifat wajib. Anda juga dapat membandingkan string penawaran aplikasi Anda dengan contoh penawaran dan menyelidiki jika terdapat perbedaan. |
INCOMPATIBLE_DEVICE |
Satu atau beberapa perangkat dalam konferensi tidak kompatibel dengan klien Meet Media API. Aplikasi Anda tidak akan dapat bergabung, jadi sebaiknya sampaikan hal ini kepada pengguna akhir. Alasan perangkat tidak kompatibel mencakup jika akun yang terkait dengan perangkat dianggap di bawah umur. Untuk mengetahui informasi selengkapnya, lihat persyaratan pengguna akhir. |
UNSUPPORTED_PLATFORM_PRESENT |
Satu atau beberapa perangkat dalam konferensi tidak kompatibel dengan klien Meet Media API. Aplikasi Anda tidak akan dapat bergabung, jadi sebaiknya sampaikan hal ini kepada pengguna akhir. Alasan platform tidak didukung mencakup aplikasi seluler yang tidak memenuhi versi minimum aplikasi seluler dan bergabung dari platform yang tidak didukung. Untuk mengetahui informasi selengkapnya, lihat persyaratan pengguna akhir. |
CONNECTIONS_EXHAUSTED |
Hanya satu klien Meet Media API yang dapat terhubung ke konferensi dalam satu waktu. Jika aplikasi Anda mengalami crash, Anda mungkin melihat error ini jika aplikasi mencoba terhubung kembali. Dalam hal ini, tunggu sekitar 30 detik hingga Meet menghentikan koneksi sebelumnya. Kemudian, coba lagi. |
CONSENTER_ABSENT |
Tidak ada pemberi izin yang memenuhi syarat dalam rapat. Untuk rapat yang dimiliki konsumen, pastikan inisiator berada dalam rapat. Untuk rapat pemilik ruang kerja, harus ada setidaknya satu anggota organisasi yang memiliki rapat tersebut. Untuk mengetahui informasi selengkapnya, lihat persyaratan pemberi izin. |
DISABLED_BY_ADMIN |
Administrator telah menonaktifkan Meet Media API untuk organisasi mereka. Jika Anda mengalami hal ini, hal ini tidak dapat diubah selama durasi rapat. Untuk mengetahui informasi selengkapnya, lihat Gambar 3 di Siklus proses Meet Media API. |
DISABLED_BY_HOST_CONROL |
Penyelenggara telah menonaktifkan Meet Media API untuk rapat. Aplikasi Anda tidak akan dapat bergabung, jadi sebaiknya sampaikan hal ini kepada pengguna akhir. Untuk mengetahui informasi selengkapnya, lihat Gambar 5 di Siklus proses Meet Media API. |
DISABLED_DUE_TO_WATERMARKING |
Jika pemberian watermark diaktifkan, Meet Media API tidak diizinkan masuk ke rapat. Anda dapat mengomunikasikannya kepada pengguna akhir Anda. Untuk mengetahui informasi selengkapnya, lihat Gambar 2 di Memenuhi siklus proses Media API. |
DISABLED_DUE_TO_ENCRYPTION |
Jika enkripsi diaktifkan, Meet Media API tidak diizinkan masuk ke rapat. Setelan ini tidak dapat diubah selama panggilan Meet. Anda dapat mengomunikasikannya kepada pengguna akhir Anda. Untuk mengetahui informasi selengkapnya, lihat Gambar 2 di Memenuhi siklus proses Media API. |
Unified plan
Jika saluran data tidak pernah terbuka dan Anda tidak pernah menerima audio atau video, periksa apakah hanya Unified Plan yang digunakan saat mengonfigurasi koneksi peer lokal.
Error urutan deskripsi media
Saat membuat koneksi peer-to-peer dengan penawaran Session Description Protocol (SDP), Anda mungkin melihat error:
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.
Artinya, baris deskripsi media dalam jawaban SDP tidak cocok dengan deskripsi media dalam penawaran SDP:
Penawaran SDP | Jawaban 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 |
Untuk memperbaiki error ini, pastikan jenis media serupa dikonfigurasi dengan benar dan dikelompokkan saat menyetel objek koneksi peer. Deskripsi media dengan interleaving tidak didukung.
Contoh kode berikut menunjukkan cara mencocokkan deskripsi media dengan benar:
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'});
Error atribut peran DTLS
Saat menyetel atribut peran DTLS, Anda mungkin melihat error:
All DTLS roles must be one of [ACTIVE, ACTPASS].
Error ini terjadi saat atribut a=setup:< >
tidak disetel dengan benar untuk semua
deskripsi media dalam penawaran SDP.
Untuk memperbaiki error ini, pastikan setiap deskripsi media dalam penawaran SDP memiliki salah satu atribut wajib berikut:
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
. . .
Memecahkan masalah audio
Bagian berikut dapat membantu menyelesaikan masalah audio di aplikasi Anda.
Memeriksa log
Jika Anda menggunakan klien web di browser Chrome:
- Buka tab baru dan masukkan ke kolom URL:
chrome://webrtc-internals
. - Buka bagian berlabel
Stats graph for inbound-rtp
. - Periksa setiap grafik audio untuk melihat apakah paket diterima.
Jika Anda menggunakan klien C++ reference, periksa apakah
OnAudioFrame
pernah dipanggil.
Verifikasi cakupan OAuth
Audio hanya ditransmisikan jika cakupan yang tepat diberikan dengan permintaan koneksi awal. Untuk mengatasi error ini, pastikan Anda memberikan cakupan OAuth 2.0 yang benar. Untuk mengetahui informasi selengkapnya, lihat cakupan Meet Media API.
Pastikan konferensi disiapkan dengan benar
Saat terhubung dengan server Google Meet, klien tidak otomatis diizinkan masuk ke konferensi. Pastikan Anda telah menerima pembaruan resource kontrol sesi melalui saluran data kontrol sesi dengan status
STATE_JOINED
.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Pastikan ada peserta konferensi lain yang aliran audionya tidak dibisukan.
Pastikan Anda menyertakan sinyal untuk audio
Meet hanya menyediakan audio jika Anda menyertakan sinyalnya dalam penawaran SDP. Harus ada tiga, deskripsi media audio hanya terima, dalam penawaran.
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
. . .
Jika penawaran yang valid diterima oleh server Meet, server akan merespons dengan jawaban SDP dengan tiga deskripsi media audio hanya kirim.
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
. . .
Memeriksa penerapan pengamat
Pastikan untuk membuat salinan data audio jika Anda memindahkan pemrosesan data ke thread lain.
AudioFrame.pcm16
secara efektif merupakan referensi ke data pokok, sehingga mencoba mengaksesnya setelah
OnAudioFrame
akan menghasilkan perilaku yang tidak terdefinisi, seperti kesalahan segmentasi.
Memecahkan masalah video
Bagian berikut dapat membantu menyelesaikan masalah video di aplikasi Anda.
Memeriksa log
Jika Anda menggunakan klien web di browser Chrome:
- Buka tab baru dan masukkan ke kolom URL:
chrome://webrtc-internals
. - Buka bagian berlabel
Stats graph for inbound-rtp
. - Periksa setiap grafik video untuk melihat apakah paket diterima.
Jika Anda menggunakan klien C++ reference, periksa apakah
OnVideoFrame
pernah dipanggil.
Verifikasi cakupan OAuth
Video hanya ditransmisikan jika cakupan yang tepat diberikan dengan permintaan koneksi awal. Untuk mengatasi error ini, pastikan Anda memberikan cakupan OAuth 2.0 yang benar. Untuk mengetahui informasi selengkapnya, lihat cakupan Meet Media API.
Pastikan konferensi disiapkan dengan benar
Saat terhubung dengan server Meet, klien tidak otomatis diizinkan masuk ke konferensi. Pastikan Anda telah menerima pembaruan resource kontrol sesi melalui saluran data kontrol sesi dengan status
STATE_JOINED
.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Pastikan ada peserta konferensi lain yang aliran videonya tidak dibisukan.
Pastikan Anda menyertakan sinyal untuk video
Meet hanya menyediakan video jika sinyalnya disertakan dalam penawaran SDP. Harus ada hingga tiga deskripsi media video hanya terima dalam penawaran.
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
. . .
Jika menerima penawaran yang valid, Meet akan merespons dengan jawaban SDP
dengan n
deskripsi media video hanya kirim. n
merupakan jumlah deskripsi media
video dalam penawaran 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
. . .
Memecahkan masalah tidak ada video
- Pastikan
m=video …
ada dalam penawaran SDP yang dikirim ke server Meet. - Pastikan
a=recvonly
adalah atribut di setiap barism=video
. - Periksa apakah jumlah baris
m=video
yang sama ada dalam jawaban SDP. - Pastikan
a=sendonly
ataua=sendrecv
adalah atribut di setiap barism=video
dalam jawaban SDP. - Periksa apakah
VideoAssignmentRequest
yang berhasil dikirim dan diterima oleh server Meet. Keberhasilan atau kegagalan harus dikomunikasikan kembali kepada klien melalui saluran data yang sama.
Memecahkan masalah jumlah aliran video yang lebih sedikit dari yang diharapkan
- Pastikan penawaran SDP berisi jumlah baris
m=video …
yang benar. - Pastikan semua deskripsi
m=video
dalam jawaban SDP berisi atributa=sendonly
ataua=sendrecv
. Setiap baris yang ditandaia=recvonly
dalam jawaban akan mengurangi jumlah aliran yang dikirim ke klien sebanyak itu.
Memeriksa penerapan pengamat
Pastikan untuk membuat salinan data video jika Anda memindahkan pemrosesan data ke thread lain.
VideoFrame.frame
secara efektif merupakan referensi ke data pokok, sehingga mencoba mengaksesnya setelah
OnVideoFrame
akan menghasilkan perilaku yang tidak terdefinisi, seperti kesalahan segmentasi.