คู่มือนี้มีวิธีการแก้ข้อผิดพลาดทั่วไปของ Google Meet Media API
แก้ปัญหารหัสข้อผิดพลาด
เคล็ดลับในการแก้ปัญหารหัสข้อผิดพลาดที่ปลายทาง
connectActiveConference
แสดงผลมีดังนี้
| รหัสข้อผิดพลาด | |
|---|---|
NO_ACTIVE_CONFERENCE |
ตรวจสอบว่าไคลเอ็นต์ Meet Media API พยายามเชื่อมต่อหลังจากผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์อยู่ในการประชุมในพื้นที่การประชุมแล้วเท่านั้น หากคุณกำลังโพลเพื่อดูว่าการประชุมเริ่มขึ้นแล้วหรือยัง ให้ใช้ เหตุการณ์การเริ่มการประชุม แทน |
INVALID_OFFER |
อ่านข้อกำหนดของข้อเสนอเพื่อตรวจสอบรายละเอียดที่ขาดหายไป เช่น ช่องทางที่ต้องใช้ข้อมูลแบบเปิด นอกจากนี้ คุณยัง เปรียบเทียบสตริงข้อเสนอของแอปกับ ข้อเสนอตัวอย่าง และตรวจสอบความแตกต่างได้ด้วย |
INCOMPATIBLE_DEVICE |
อุปกรณ์อย่างน้อย 1 เครื่องในการประชุม ไม่เข้ากันกับไคลเอ็นต์ Meet Media API แอปของคุณจะเข้าร่วมไม่ได้ ดังนั้น คุณอาจต้องแจ้งให้ผู้ใช้ปลายทางทราบ เหตุผลที่อุปกรณ์ไม่เข้ากัน ได้แก่ บัญชีที่เชื่อมโยงกับอุปกรณ์มีอายุต่ำกว่าเกณฑ์ ดูข้อมูลเพิ่มเติมได้ที่ข้อกำหนดของผู้ใช้ปลายทาง |
UNSUPPORTED_PLATFORM_PRESENT |
อุปกรณ์อย่างน้อย 1 เครื่องในการประชุม ไม่เข้ากันกับไคลเอ็นต์ Meet Media API แอปของคุณจะเข้าร่วมไม่ได้ ดังนั้น คุณอาจต้องแจ้งให้ผู้ใช้ปลายทางทราบ เหตุผลที่แพลตฟอร์มไม่รองรับ ได้แก่ แอปบนอุปกรณ์เคลื่อนที่ที่ไม่เป็นไปตามเวอร์ชันขั้นต่ำของแอปบนอุปกรณ์เคลื่อนที่และการเข้าร่วมจากแพลตฟอร์มที่ไม่รองรับ ดูข้อมูลเพิ่มเติมได้ที่ข้อกำหนดของผู้ใช้ปลายทาง |
CONNECTIONS_EXHAUSTED |
ไคลเอ็นต์ Meet Media API เชื่อมต่อกับการประชุมได้ครั้งละ 1 รายการเท่านั้น หากแอป ขัดข้อง คุณอาจเห็นข้อผิดพลาดนี้หากแอปพยายามเชื่อมต่ออีกครั้ง ในกรณีนี้ ให้รอประมาณ 30 วินาทีเพื่อให้ Meet หมดเวลาการเชื่อมต่อก่อนหน้า แล้วลองอีกครั้ง |
CONSENTER_ABSENT |
ไม่มีผู้ให้ความยินยอมที่มีสิทธิ์ในการประชุม สำหรับการประชุมที่ผู้ใช้เป็นเจ้าของ ให้ตรวจสอบว่าผู้เริ่มการประชุมอยู่ในการประชุม สำหรับการประชุมที่เจ้าของ Workspace เป็นผู้จัด ควรมีสมาชิกในองค์กรอย่างน้อย 1 คนที่เป็นเจ้าของการประชุม ดูข้อมูลเพิ่มเติมได้ที่ข้อกำหนดของผู้ให้ความยินยอม |
DISABLED_BY_ADMIN |
ผู้ดูแลระบบปิดใช้ Meet Media API สำหรับองค์กร หากพบข้อผิดพลาดนี้ คุณจะเปลี่ยนการตั้งค่านี้ไม่ได้ในระหว่างการ ประชุม ดูข้อมูลเพิ่มเติมได้ที่รูปที่ 3 ใน วงจรชีวิตของ Meet Media API |
DISABLED_BY_HOST_CONTROL |
ผู้จัดปิดใช้ Meet Media API สำหรับการประชุม แอปของคุณจะเข้าร่วมไม่ได้ ดังนั้น คุณอาจต้องแจ้งให้ผู้ใช้ปลายทางทราบ ดูข้อมูลเพิ่มเติมได้ที่รูปที่ 5 ใน วงจรชีวิตของ Meet Media API |
DISABLED_DUE_TO_WATERMARKING |
เมื่อเปิดใช้ลายน้ำ ระบบจะไม่อนุญาตให้ Meet Media API เข้าร่วมการประชุม คุณอาจต้องแจ้งให้ผู้ใช้ปลายทางทราบ ดูข้อมูลเพิ่มเติมได้ที่รูปที่ 2 ใน วงจรชีวิตของ Meet Media API |
DISABLED_DUE_TO_ENCRYPTION |
เมื่อเปิดใช้การเข้ารหัส ระบบจะไม่อนุญาตให้ Meet Media API เข้าร่วมการประชุม คุณจะเปลี่ยนการตั้งค่านี้ไม่ได้ในระหว่างการโทรผ่าน Meet คุณอาจต้องแจ้งให้ผู้ใช้ปลายทางทราบ ดูข้อมูลเพิ่มเติมได้ที่รูปที่ 2 ใน วงจรชีวิตของ Meet Media API |
แพ็กเกจ Unified
หากช่องข้อมูลไม่เปิดขึ้นและคุณไม่ได้รับเสียงหรือวิดีโอ ให้ตรวจสอบว่าใช้ Unified Plan เท่านั้นเมื่อกำหนดค่าการเชื่อมต่อเพียร์ในเครื่อง
ข้อผิดพลาดเกี่ยวกับลำดับคำอธิบายสื่อ
เมื่อสร้างการเชื่อมต่อแบบเพียร์ทูเพียร์ด้วยข้อเสนอ Session Description Protocol (SDP) คุณอาจเห็นข้อผิดพลาดต่อไปนี้
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.
ซึ่งหมายความว่าบรรทัดคำอธิบายสื่อในการตอบกลับ SDP ไม่ตรงกับคำอธิบายสื่อในข้อเสนอ SDP
| ข้อเสนอ SDP | การตอบกลับ 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 |
หากต้องการแก้ไขข้อผิดพลาดนี้ ให้ตรวจสอบว่ามีการกำหนดค่าประเภทสื่อที่คล้ายกันอย่างถูกต้องและจัดกลุ่มไว้ด้วยกันเมื่อตั้งค่าออบเจ็กต์การเชื่อมต่อเพียร์ ระบบไม่รองรับคำอธิบายสื่อแบบสลับกัน
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีจับคู่คำอธิบายสื่ออย่างถูกต้อง
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
เมื่อตั้งค่าแอตทริบิวต์บทบาท DTLS คุณอาจเห็นข้อผิดพลาดต่อไปนี้
All DTLS roles must be one of [ACTIVE, ACTPASS].
ข้อผิดพลาดนี้เกิดขึ้นเมื่อไม่ได้ตั้งค่าแอตทริบิวต์ a=setup:< > อย่างถูกต้องสำหรับ
คำอธิบายสื่อทั้งหมดในข้อเสนอ SDP
หากต้องการแก้ไขข้อผิดพลาดนี้ ให้ตรวจสอบว่าคำอธิบายสื่อแต่ละรายการในข้อเสนอ SDP มีแอตทริบิวต์ที่จำเป็นต่อไปนี้อย่างน้อย 1 รายการ
a=setup:actpassa=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
. . .
แก้ปัญหาเกี่ยวกับเสียง
ส่วนต่อไปนี้สามารถช่วยแก้ปัญหาเกี่ยวกับเสียงในแอปได้
ตรวจสอบบันทึก
หากใช้เว็บไคลเอ็นต์ในเบราว์เซอร์ Chrome ให้ทำดังนี้
- เปิดแท็บใหม่และป้อน
chrome://webrtc-internalsในแถบที่อยู่ - ไปที่ส่วนที่มีป้ายกำกับว่า
Stats graph for inbound-rtp - ตรวจสอบกราฟเสียงแต่ละรายการเพื่อดูว่าได้รับแพ็กเก็ตหรือไม่
หากใช้ไคลเอ็นต์อ้างอิง C++ ให้ตรวจสอบว่ามีการเรียก
OnAudioFrame
หรือไม่
ยืนยันขอบเขต OAuth
ระบบจะส่งเสียงก็ต่อเมื่อมีการระบุขอบเขตที่เหมาะสมในคำขอการเชื่อมต่อเริ่มต้น หากต้องการแก้ไขข้อผิดพลาด ให้ตรวจสอบว่าได้ระบุขอบเขต OAuth 2.0 ที่ถูกต้อง ดูข้อมูลเพิ่มเติมได้ที่ขอบเขต Meet Media API
ตรวจสอบว่าตั้งค่าการประชุมอย่างถูกต้อง
เมื่อไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์ Google Meet ระบบจะไม่ยอมรับไคลเอ็นต์เข้าสู่การประชุมโดยอัตโนมัติ ตรวจสอบว่าคุณได้รับการอัปเดตทรัพยากรการควบคุมเซสชันผ่านช่องข้อมูลการควบคุมเซสชันที่มีสถานะเป็น
STATE_JOINED{"sessionStatus":{"connectionState":"STATE_JOINED"}}ยืนยันว่ามีผู้เข้าร่วมการประชุมคนอื่นๆ ที่ไม่ได้ปิดเสียงสตรีมเสียง
ตรวจสอบสัญญาณเสียง
Meet จะให้เสียงก็ต่อเมื่อคุณส่งสัญญาณนี้ในข้อเสนอ SDP offer ข้อเสนอต้องมีคำอธิบายสื่อเสียงแบบรับอย่างเดียว สาม รายการใน ข้อเสนอ
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 ได้รับข้อเสนอที่ถูกต้อง เซิร์ฟเวอร์จะตอบกลับด้วยการตอบกลับ SDP ที่มีคำอธิบายสื่อเสียงแบบส่งอย่างเดียว 3 รายการ
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
. . .
ตรวจสอบการใช้งานออบเซิร์ฟเวอร์
อย่าลืมทำสำเนาข้อมูลเสียงหากคุณย้ายการประมวลผลข้อมูลไปยังเธรดอื่น
AudioFrame.pcm16
เป็นการอ้างอิงข้อมูลพื้นฐานอย่างมีประสิทธิภาพ ดังนั้นการพยายามเข้าถึงข้อมูลนี้หลังจาก
OnAudioFrame
จะทำให้เกิดลักษณะการทำงานที่ไม่แน่นอน เช่น ข้อผิดพลาดในการแบ่งส่วน
แก้ปัญหาเกี่ยวกับวิดีโอ
ส่วนต่อไปนี้สามารถช่วยแก้ปัญหาเกี่ยวกับวิดีโอในแอปได้
ตรวจสอบบันทึก
หากใช้เว็บไคลเอ็นต์ในเบราว์เซอร์ Chrome ให้ทำดังนี้
- เปิดแท็บใหม่และป้อน
chrome://webrtc-internalsในแถบที่อยู่ - ไปที่ส่วนที่มีป้ายกำกับว่า
Stats graph for inbound-rtp - ตรวจสอบกราฟวิดีโอแต่ละรายการเพื่อดูว่าได้รับแพ็กเก็ตหรือไม่
หากใช้ไคลเอ็นต์อ้างอิง C++ ให้ตรวจสอบว่ามีการเรียก
OnVideoFrame
หรือไม่
ยืนยันขอบเขต OAuth
ระบบจะส่งวิดีโอก็ต่อเมื่อมีการระบุขอบเขตที่เหมาะสมในคำขอการเชื่อมต่อเริ่มต้น หากต้องการแก้ไขข้อผิดพลาด ให้ตรวจสอบว่าได้ระบุขอบเขต OAuth 2.0 ที่ถูกต้อง ดูข้อมูลเพิ่มเติมได้ที่ขอบเขต Meet Media API
ตรวจสอบว่าตั้งค่าการประชุมอย่างถูกต้อง
เมื่อไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์ Meet ระบบจะไม่ยอมรับไคลเอ็นต์เข้าสู่การประชุมโดยอัตโนมัติ ตรวจสอบว่าคุณได้รับการอัปเดตทรัพยากรการควบคุมเซสชันผ่านช่องข้อมูลการควบคุมเซสชันที่มีสถานะเป็น
STATE_JOINED{"sessionStatus":{"connectionState":"STATE_JOINED"}}ยืนยันว่ามีผู้เข้าร่วมการประชุมคนอื่นๆ ที่ไม่ได้ปิดเสียงสตรีมวิดีโอ
ตรวจสอบสัญญาณวิดีโอ
Meet จะให้วิดีโอก็ต่อเมื่อมีการส่งสัญญาณในข้อเสนอ SDP offer ข้อเสนอต้องมีคำอธิบายสื่อวิดีโอแบบรับอย่างเดียวไม่เกิน 3 รายการ
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 ได้รับข้อเสนอที่ถูกต้อง เซิร์ฟเวอร์จะตอบกลับด้วยการตอบกลับ SDP ที่มีคำอธิบายสื่อวิดีโอแบบส่งอย่างเดียว n รายการ โดยที่ n คือจำนวนคำอธิบายสื่อวิดีโอในข้อเสนอ 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
. . .
แก้ปัญหาที่ไม่มีวิดีโอ
- ตรวจสอบว่า
m=video …อยู่ในข้อเสนอ SDP ที่ส่งไปยังเซิร์ฟเวอร์ Meet - ตรวจสอบว่า
a=recvonlyเป็นแอตทริบิวต์ใต้บรรทัดm=videoทุกบรรทัด - ตรวจสอบว่ามีการระบุบรรทัด
m=videoจำนวนเท่ากันในการตอบกลับ SDP - ตรวจสอบว่า
a=sendonlyหรือa=sendrecvเป็นแอตทริบิวต์ใต้บรรทัดm=videoทุกบรรทัดในการตอบกลับ SDP - ตรวจสอบว่ามีการส่งและรับ
VideoAssignmentRequestที่สำเร็จไปยังเซิร์ฟเวอร์ Meet ระบบควรแจ้งผลลัพธ์ (สำเร็จหรือไม่สำเร็จ) กลับไปยังไคลเอ็นต์ผ่านช่องข้อมูลเดียวกัน
แก้ปัญหาสตรีมวิดีโอน้อยกว่าที่คาดไว้
- ตรวจสอบว่าข้อเสนอ SDP มีบรรทัด
m=video …จำนวนที่ถูกต้อง - ตรวจสอบว่าคำอธิบาย
m=videoทั้งหมดในการตอบกลับ SDP มีแอตทริบิวต์a=sendonlyหรือa=sendrecvบรรทัดที่ทำเครื่องหมายa=recvonlyในการตอบกลับจะลดจำนวนสตรีมที่ส่งไปยังไคลเอ็นต์ตามจำนวนบรรทัดดังกล่าว
ตรวจสอบการใช้งานออบเซิร์ฟเวอร์
อย่าลืมทำสำเนาข้อมูลวิดีโอหากคุณย้ายการประมวลผลข้อมูลไปยังเธรดอื่น
VideoFrame.frame
เป็นการอ้างอิงข้อมูลพื้นฐานอย่างมีประสิทธิภาพ ดังนั้นการพยายามเข้าถึงข้อมูลนี้หลังจาก
OnVideoFrame
จะทำให้เกิดลักษณะการทำงานที่ไม่แน่นอน เช่น ข้อผิดพลาดในการแบ่งส่วน