คู่มือนี้จะแสดงวิธีการแก้ไขข้อผิดพลาดที่พบบ่อยของ Google Meet Media API
แก้ปัญหารหัสข้อผิดพลาด
เคล็ดลับในการแก้ปัญหารหัสข้อผิดพลาดที่แสดงโดยปลายทาง connectActiveConference
มีดังนี้
รหัสข้อผิดพลาด | |
---|---|
NO_ACTIVE_CONFERENCE |
ตรวจสอบว่าไคลเอ็นต์ Meet Media API จะพยายามเชื่อมต่อหลังจากที่ผู้ใช้ที่ตรวจสอบสิทธิ์แล้วเข้าร่วมการประชุมในพื้นที่การประชุมแล้วเท่านั้น |
INVALID_OFFER |
อ่านข้อกำหนดของข้อเสนอเพื่อตรวจสอบรายละเอียดที่ขาดหายไป เช่น ช่องทางที่ต้องเปิดเพื่อส่งข้อมูล นอกจากนี้ คุณยังเปรียบเทียบสตริงข้อเสนอของแอปกับตัวอย่างข้อเสนอและตรวจสอบความแตกต่างได้ด้วย |
INCOMPATIBLE_DEVICE |
อุปกรณ์อย่างน้อย 1 เครื่องในการประชุมใช้ร่วมกับไคลเอ็นต์ Meet Media API ไม่ได้ แอปของคุณจะเข้าร่วมไม่ได้ คุณจึงควรแจ้งเรื่องนี้ให้ผู้ใช้ปลายทางทราบ |
CONNECTIONS_EXHAUSTED |
มีเพียงไคลเอ็นต์ Meet Media API เพียงรายเดียวเท่านั้นที่เชื่อมต่อกับการประชุมได้ในแต่ละครั้ง หากแอปขัดข้อง คุณอาจเห็นข้อผิดพลาดนี้หากแอปพยายามเชื่อมต่ออีกครั้ง ในกรณีนี้ ให้รอประมาณ 30 วินาทีเพื่อให้ Meet หมดเวลาการเชื่อมต่อก่อนหน้า แล้วลองอีกครั้ง |
แผนแบบรวม
หากแชแนลข้อมูลไม่เปิดขึ้นและคุณไม่ได้ยินเสียงหรือเห็นวิดีโอ ให้ตรวจสอบว่ามีการใช้แพ็กเกจแบบรวมเท่านั้นเมื่อกำหนดค่าการเชื่อมต่อแบบ Peer ในพื้นที่
ข้อผิดพลาดเกี่ยวกับลําดับคําอธิบายสื่อ
เมื่อสร้างการเชื่อมต่อแบบ peer-to-peer ด้วยข้อเสนอ 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 |
หากต้องการแก้ไขข้อผิดพลาดนี้ ให้ตรวจสอบว่าได้กําหนดค่าประเภทสื่อที่คล้ายกันอย่างถูกต้องและจัดกลุ่มไว้ด้วยกันเมื่อตั้งค่าออบเจ็กต์การเชื่อมต่อแบบ Peer ไม่รองรับคำอธิบายสื่อแบบสลับช่อง
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีจับคู่คำอธิบายสื่ออย่างถูกต้อง
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 มีแอตทริบิวต์ที่ต้องระบุอย่างใดอย่างหนึ่งต่อไปนี้
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
. . .
แก้ปัญหาเกี่ยวกับเสียง
ส่วนต่อไปนี้จะช่วยแก้ปัญหาเกี่ยวกับเสียงในแอป
ตรวจสอบบันทึก
หากคุณใช้เว็บไคลเอ็นต์ในเบราว์เซอร์ 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 ข้อเสนอต้องมีคำอธิบายสื่อเสียงแบบรับอย่างเดียว 3 รายการ
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 คำอธิบายสื่อวิดีโอแบบรับอย่างเดียวต้องมีไม่เกิน 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 - ตรวจสอบว่าเซิร์ฟเวอร์ Meet ส่งและรับ
VideoAssignmentRequest
สำเร็จ ควรแจ้งสถานะ "สำเร็จ" หรือ "ไม่สำเร็จ" กลับไปยังไคลเอ็นต์ผ่านช่องทางข้อมูลเดียวกัน
แก้ปัญหาสตรีมวิดีโอน้อยกว่าที่คาดไว้
- ตรวจสอบว่าข้อเสนอ SDP มีจำนวนบรรทัด
m=video …
ที่ถูกต้อง - ตรวจสอบว่าคำอธิบาย
m=video
ทั้งหมดในคำตอบ SDP มีแอตทริบิวต์a=sendonly
หรือa=sendrecv
บรรทัดที่มีเครื่องหมายa=recvonly
ในคําตอบจะลดจํานวนสตรีมที่ส่งไปยังไคลเอ็นต์ลงตามจํานวนนั้น
ตรวจสอบการติดตั้งใช้งานเครื่องมือวัด
อย่าลืมทำสำเนาข้อมูลวิดีโอหากคุณย้ายการประมวลผลข้อมูลไปยังชุดข้อความอื่น
VideoFrame.frame
เป็นข้อมูลอ้างอิงถึงข้อมูลพื้นฐาน ดังนั้นการพยายามเข้าถึงหลังจากนั้น
OnVideoFrame
จะส่งผลให้เกิดลักษณะการทำงานที่ไม่ระบุ เช่น ข้อผิดพลาดการแบ่งกลุ่ม