Memecahkan masalah dan memperbaiki error Meet Media API

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:

  1. Buka tab baru dan masukkan ke kolom URL: chrome://webrtc-internals.
  2. Buka bagian berlabel Stats graph for inbound-rtp.
  3. 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:

  1. Buka tab baru dan masukkan ke kolom URL: chrome://webrtc-internals.
  2. Buka bagian berlabel Stats graph for inbound-rtp.
  3. 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 baris m=video.
  • Periksa apakah jumlah baris m=video yang sama ada dalam jawaban SDP.
  • Pastikan a=sendonly atau a=sendrecv adalah atribut di setiap baris m=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 atribut a=sendonly atau a=sendrecv. Setiap baris yang ditandai a=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.