Hướng dẫn này cung cấp thông tin về cách giải quyết các lỗi thường gặp của Google Meet Media API.
Khắc phục sự cố theo mã lỗi
Dưới đây là các mẹo khắc phục sự cố theo mã lỗi do điểm cuối
connectActiveConference
trả về:
| Mã lỗi | |
|---|---|
NO_ACTIVE_CONFERENCE |
Kiểm tra để đảm bảo rằng ứng dụng Meet Media API chỉ cố gắng kết nối sau khi người dùng đã xác thực có mặt trong một hội nghị trên không gian cuộc họp. Nếu bạn đang thăm dò để biết thời điểm bắt đầu hội nghị, hãy sử dụng sự kiện Bắt đầu hội nghị thay thế. |
INVALID_OFFER |
Đọc kỹ các yêu cầu về ưu đãi để kiểm tra xem có thiếu thông tin chi tiết nào không, chẳng hạn như mở các kênh dữ liệu bắt buộc. Bạn cũng có thể so sánh chuỗi ưu đãi của ứng dụng với ưu đãi mẫu và điều tra mọi điểm khác biệt. |
INCOMPATIBLE_DEVICE |
Một hoặc nhiều thiết bị trong hội nghị không tương thích với ứng dụng Meet Media API. Ứng dụng của bạn sẽ không thể tham gia, vì vậy, bạn có thể thông báo điều này cho người dùng cuối. Lý do khiến thiết bị không tương thích là do tài khoản được liên kết với thiết bị được coi là chưa đủ tuổi. Để biết thêm thông tin, hãy xem các yêu cầu đối với người dùng cuối. |
UNSUPPORTED_PLATFORM_PRESENT |
Một hoặc nhiều thiết bị trong hội nghị không tương thích với ứng dụng Meet Media API. Ứng dụng của bạn sẽ không thể tham gia, vì vậy, bạn có thể thông báo điều này cho người dùng cuối. Lý do khiến nền tảng không được hỗ trợ là do các ứng dụng di động không đáp ứng phiên bản tối thiểu của ứng dụng di động và tham gia từ các nền tảng không được hỗ trợ. Để biết thêm thông tin, hãy xem các yêu cầu đối với người dùng cuối. |
CONNECTIONS_EXHAUSTED |
Chỉ có một ứng dụng Meet Media API có thể kết nối với một hội nghị tại một thời điểm. Nếu ứng dụng gặp sự cố, bạn có thể thấy lỗi này nếu ứng dụng cố gắng kết nối lại. Trong trường hợp này, hãy đợi khoảng 30 giây để Meet hết thời gian chờ kết nối trước đó. Sau đó, hãy thử lại. |
CONSENTER_ABSENT |
Không có người đồng ý đủ điều kiện trong cuộc họp. Đối với các cuộc họp do người tiêu dùng sở hữu hãy đảm bảo rằng người khởi xướng có mặt trong cuộc họp. Đối với các cuộc họp do chủ sở hữu không gian làm việc tổ chức, phải có ít nhất một thành viên của tổ chức đó sở hữu cuộc họp. Để biết thêm thông tin, hãy xem các yêu cầu đối với người đồng ý. |
DISABLED_BY_ADMIN |
Quản trị viên đã tắt Meet Media API cho tổ chức của họ. Nếu bạn gặp phải lỗi này, thì lỗi này không thể thay đổi trong thời gian diễn ra cuộc họp. Để biết thêm thông tin, hãy xem Hình 3 trong bài viết Vòng đời của Meet Media API. |
DISABLED_BY_HOST_CONTROL |
Người tổ chức đã tắt Meet Media API cho cuộc họp. Ứng dụng của bạn sẽ không thể tham gia, vì vậy, bạn có thể thông báo điều này cho người dùng cuối. Để biết thêm thông tin, hãy xem Hình 5 trong bài viết Vòng đời của Meet Media API. |
DISABLED_DUE_TO_WATERMARKING |
Khi tính năng đóng dấu bản quyền được bật, Meet Media API không được phép tham gia cuộc họp. Bạn có thể thông báo điều này cho người dùng cuối. Để biết thêm thông tin, hãy xem Hình 2 trong bài viết Vòng đời của Meet Media API. |
DISABLED_DUE_TO_ENCRYPTION |
Khi tính năng mã hoá được bật, Meet Media API không được phép tham gia cuộc họp. Tính năng này không thể thay đổi trong khi gọi điện qua Meet. Bạn có thể thông báo điều này cho người dùng cuối. Để biết thêm thông tin, hãy xem Hình 2 trong bài viết Vòng đời của Meet Media API. |
Gói hợp nhất
Nếu các kênh dữ liệu không bao giờ mở và bạn không bao giờ nhận được âm thanh hoặc video, hãy kiểm tra để đảm bảo rằng chỉ Gói hợp nhất được sử dụng khi định cấu hình kết nối ngang hàng cục bộ.
Lỗi thứ tự mô tả nội dung nghe nhìn
Khi tạo kết nối ngang hàng bằng ưu đãi Giao thức mô tả phiên (SDP), bạn có thể thấy lỗi:
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.
Điều này có nghĩa là các dòng mô tả nội dung nghe nhìn trong câu trả lời SDP không khớp với nội dung mô tả nội dung nghe nhìn trong ưu đãi SDP:
| Ưu đãi SDP | Câu trả lời 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 |
Để khắc phục lỗi này, hãy đảm bảo rằng các loại nội dung nghe nhìn tương tự được định cấu hình đúng cách và được nhóm lại với nhau khi thiết lập đối tượng kết nối ngang hàng. Hệ thống không hỗ trợ các nội dung mô tả nội dung nghe nhìn xen kẽ.
Mã mẫu sau đây cho biết cách khớp đúng nội dung mô tả nội dung nghe nhìn:
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'});
Lỗi thuộc tính vai trò DTLS
Khi thiết lập thuộc tính vai trò DTLS, bạn có thể thấy lỗi:
All DTLS roles must be one of [ACTIVE, ACTPASS].
Lỗi này xảy ra khi thuộc tính a=setup:< > không được thiết lập đúng cách cho tất cả
nội dung mô tả nội dung nghe nhìn trong ưu đãi SDP.
Để khắc phục lỗi này, hãy đảm bảo rằng mỗi nội dung mô tả nội dung nghe nhìn trong ưu đãi SDP có một trong các thuộc tính bắt buộc sau:
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
. . .
Khắc phục sự cố về âm thanh
Các phần sau đây có thể giúp giải quyết các vấn đề về âm thanh trong ứng dụng của bạn.
Kiểm tra nhật ký
Nếu bạn đang sử dụng ứng dụng web trong trình duyệt Chrome:
- Mở một thẻ mới rồi nhập
chrome://webrtc-internalsvào thanh địa chỉ. - Chuyển đến phần có nhãn
Stats graph for inbound-rtp. - Kiểm tra từng biểu đồ âm thanh để xem các gói có đang được nhận hay không.
Nếu bạn đang sử dụng ứng dụng tham chiếu C++, hãy kiểm tra xem
OnAudioFrame
có bao giờ được gọi hay không.
Xác minh phạm vi OAuth
Âm thanh chỉ được truyền nếu phạm vi thích hợp được cung cấp cùng với yêu cầu kết nối ban đầu. Để giải quyết lỗi này, hãy đảm bảo cung cấp đúng phạm vi OAuth 2.0. Để biết thêm thông tin, hãy xem bài viết Phạm vi Meet Media API scopes.
Xác minh rằng hội nghị được thiết lập đúng cách
Khi kết nối với máy chủ Google Meet, ứng dụng sẽ không tự động được chấp nhận tham gia hội nghị. Đảm bảo rằng bạn đã nhận được bản cập nhật tài nguyên kiểm soát phiên qua kênh dữ liệu kiểm soát phiên có trạng thái
STATE_JOINED.{"sessionStatus":{"connectionState":"STATE_JOINED"}}Xác nhận rằng có những người tham gia hội nghị khác có luồng âm thanh không bị tắt tiếng.
Xác minh tín hiệu cho âm thanh
Meet chỉ cung cấp âm thanh nếu bạn báo hiệu điều này trong ưu đãi SDP offer. Phải có 3, nội dung mô tả nội dung nghe nhìn chỉ nhận trong ưu đãi.
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
. . .
Nếu máy chủ Meet nhận được một ưu đãi hợp lệ, thì máy chủ sẽ phản hồi bằng một câu trả lời SDP có 3 nội dung mô tả nội dung nghe nhìn chỉ gửi.
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
. . .
Kiểm tra quá trình triển khai trình quan sát
Hãy nhớ tạo bản sao của dữ liệu âm thanh nếu bạn chuyển quá trình xử lý dữ liệu sang một luồng khác.
AudioFrame.pcm16
thực sự là một tham chiếu đến dữ liệu cơ bản, vì vậy, việc cố gắng truy cập vào dữ liệu này sau
OnAudioFrame
sẽ dẫn đến hành vi không xác định, chẳng hạn như lỗi phân đoạn.
Khắc phục sự cố về video
Các phần sau đây có thể giúp giải quyết các vấn đề về video trong ứng dụng của bạn.
Kiểm tra nhật ký
Nếu bạn đang sử dụng ứng dụng web trong trình duyệt Chrome:
- Mở một thẻ mới rồi nhập
chrome://webrtc-internalsvào thanh địa chỉ. - Chuyển đến phần có nhãn
Stats graph for inbound-rtp. - Kiểm tra từng biểu đồ video để xem các gói có đang được nhận hay không.
Nếu bạn đang sử dụng ứng dụng tham chiếu C++, hãy kiểm tra xem
OnVideoFrame
có bao giờ được gọi hay không.
Xác minh phạm vi OAuth
Video chỉ được truyền nếu phạm vi thích hợp được cung cấp cùng với yêu cầu kết nối ban đầu. Để giải quyết lỗi này, hãy đảm bảo cung cấp đúng phạm vi OAuth 2.0. Để biết thêm thông tin, hãy xem bài viết Phạm vi Meet Media API scopes.
Xác minh rằng hội nghị được thiết lập đúng cách
Khi kết nối với máy chủ Meet, ứng dụng sẽ không tự động được chấp nhận tham gia hội nghị. Đảm bảo rằng bạn đã nhận được bản cập nhật tài nguyên kiểm soát phiên qua kênh dữ liệu kiểm soát phiên có trạng thái
STATE_JOINED.{"sessionStatus":{"connectionState":"STATE_JOINED"}}Xác nhận rằng có những người tham gia hội nghị khác có luồng video không bị tắt tiếng.
Xác minh tín hiệu cho video
Meet chỉ cung cấp video nếu video được báo hiệu trong ưu đãi SDP offer. Phải có tối đa 3 nội dung mô tả nội dung nghe nhìn chỉ nhận trong ưu đãi.
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
. . .
Nếu Meet nhận được một ưu đãi hợp lệ, thì Meet sẽ phản hồi bằng một câu trả lời SDP có n nội dung mô tả nội dung nghe nhìn chỉ gửi, trong đó n là số nội dung mô tả nội dung nghe nhìn trong ưu đãi 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
. . .
Khắc phục sự cố không có video
- Kiểm tra để đảm bảo rằng
m=video …tồn tại trong ưu đãi SDP được gửi đến máy chủ Meet. - Kiểm tra để đảm bảo rằng
a=recvonlylà một thuộc tính trong mỗi dòngm=video. - Kiểm tra để đảm bảo rằng có số lượng dòng
m=videobằng nhau trong câu trả lời SDP. - Kiểm tra để đảm bảo rằng
a=sendonlyhoặca=sendrecvlà các thuộc tính trong mỗi dòngm=videotrong câu trả lời SDP. - Kiểm tra để đảm bảo rằng một
VideoAssignmentRequestthành công đã được gửi đến và nhận bởi máy chủ Meet. Trạng thái thành công hoặc không thành công phải được thông báo lại cho ứng dụng trên cùng một kênh dữ liệu.
Khắc phục sự cố có ít luồng video hơn dự kiến
- Kiểm tra để đảm bảo rằng ưu đãi SDP chứa đúng số dòng
m=video …. - Đảm bảo rằng tất cả nội dung mô tả
m=videotrong câu trả lời SDP đều chứa thuộc tínha=sendonlyhoặca=sendrecv. Bất kỳ dòng nào được đánh dấua=recvonlytrong câu trả lời đều làm giảm số lượng luồng được gửi đến ứng dụng.
Kiểm tra quá trình triển khai trình quan sát
Hãy nhớ tạo bản sao của dữ liệu video nếu bạn chuyển quá trình xử lý dữ liệu sang một luồng khác.
VideoFrame.frame
thực sự là một tham chiếu đến dữ liệu cơ bản, vì vậy, việc cố gắng truy cập vào dữ liệu này sau
OnVideoFrame
sẽ dẫn đến hành vi không xác định, chẳng hạn như lỗi phân đoạn.