Hướng dẫn này cung cấp hướng dẫn về cách giải quyết các lỗi thường gặp với API nội dung nghe nhìn của Google Meet.
Khắc phục sự cố theo mã lỗi
Dưới đây là các mẹo khắc phục sự cố về mã lỗi do điểm cuối connectActiveConference
trả về:
Mã lỗi | |
---|---|
NO_ACTIVE_CONFERENCE |
Kiểm tra để đảm bảo ứ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 họp. |
INVALID_OFFER |
Đọc kỹ các yêu cầu về ưu đãi để kiểm tra xem có thông tin chi tiết nào bị thiếu hay không, chẳng hạn như các kênh bắt buộc phải mở dữ liệu. 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à tìm hiểu mọi điểm khác biệt. |
INCOMPATIBLE_DEVICE |
Một hoặc nhiều thiết bị trong cuộc họp 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. |
CONNECTIONS_EXHAUSTED |
Tại mỗi thời điểm, chỉ một ứng dụng Meet Media API mới có thể kết nối với một cuộc họp. Nếu ứng dụng của bạn 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. |
Kế hoạch 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ỉ sử dụng Kế hoạch hợp nhất 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 một ư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 đa phương tiện trong câu trả lời SDP không khớp với nội dung mô tả nội dung đa phương tiện trong mặt hàng 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. Không hỗ trợ nội dung mô tả nội dung nghe nhìn xen kẽ.
Mã mẫu sau đây cho biết cách so khớp chính xác 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 bạn không thiết lập đúng thuộc tính a=setup:< >
cho tất cả nội dung mô tả nội dung nghe nhìn trong mặt hàng 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 mặt hàng SDP đều có một trong các thuộc tính bắt buộc sau:
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
. . .
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 vào thanh địa chỉ:
chrome://webrtc-internals
. - Chuyển đến phần có nhãn
Stats graph for inbound-rtp
. - Kiểm tra từng biểu đồ âm thanh để xem liệu 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ó đượ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. Để khắc phục lỗi này, hãy nhớ cung cấp đúng phạm vi OAuth 2.0. Để biết thêm thông tin, hãy xem phần Phạm vi của API Media Meet.
Xác minh rằng cuộc họp đã đượ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 vào cuộc họp. Đả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 là
STATE_JOINED
.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Xác nhận rằng có các người tham gia khác trong cuộc họp có luồng âm thanh không bị tắt tiếng.
Xác minh tín hiệu â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. Phải có 3 bản 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 đề nghị 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 được.
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 cách triển khai trình quan sát
Hãy nhớ sao chép 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
là một tệp tham chiếu hiệu quả đến dữ liệu cơ bản, vì vậy, việc cố gắng truy cập vào tệp 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 bạn giải quyết các vấn đề về video trong ứng dụng.
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 vào thanh địa chỉ:
chrome://webrtc-internals
. - Chuyển đến phần có nhãn
Stats graph for inbound-rtp
. - Kiểm tra từng biểu đồ video để xem có nhận được gói 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ó đượ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. Để khắc phục lỗi này, hãy nhớ cung cấp đúng phạm vi OAuth 2.0. Để biết thêm thông tin, hãy xem phần Phạm vi của API Media Meet.
Xác minh rằng cuộc họp đã được thiết lập đúng cách
Khi kết nối với máy chủ Meet, ứng dụng khách sẽ không được tự động chấp nhận vào cuộc họp. Đả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 trên kênh dữ liệu kiểm soát phiên có trạng thái là
STATE_JOINED
.{"sessionStatus":{"connectionState":"STATE_JOINED"}}
Xác nhận rằng có những người tham gia khác trong cuộc họp có luồng video không bị tắt tiếng.
Xác minh tín hiệu video
Meet chỉ cung cấp video nếu video được báo hiệu trong ưu đãi SDP. Phải có tối đa 3 nội dung mô tả nội dung nghe nhìn dạng video chỉ nhận được trong mặt hàng.
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 nhận được một ưu đãi hợp lệ, Meet sẽ phản hồi bằng câu trả lời SDP có n
nội dung mô tả nội dung nghe nhìn dạng video chỉ gửi, trong đó n
là số lượng nội dung mô tả nội dung nghe nhìn dạng video 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
m=video …
tồn tại trong ưu đãi SDP được gửi đến máy chủ Meet. - Kiểm tra để đảm bảo
a=recvonly
là một thuộc tính trong mỗi dòngm=video
. - Kiểm tra để đảm bảo có số lượng dòng
m=video
bằng nhau trong câu trả lời SDP. - Kiểm tra để đảm bảo
a=sendonly
hoặca=sendrecv
là các thuộc tính trong mỗi dòngm=video
trong câu trả lời SDP. - Kiểm tra để đảm bảo rằng máy chủ Meet đã gửi và nhận thành công
VideoAssignmentRequest
. Bạn nên thông báo lại cho ứng dụng về kết quả thành công hoặc không thành công qua cùng một kênh dữ liệu.
Khắc phục sự cố phát trực tuyến ít video hơn dự kiến
- Kiểm tra để đảm bảo ưu đãi SDP chứa đúng số lượng dòng
m=video …
. - Đảm bảo tất cả nội dung mô tả
m=video
trong câu trả lời SDP đều chứa thuộc tínha=sendonly
hoặca=sendrecv
. Mọi dòng được đánh dấu làa=recvonly
trong câu trả lời sẽ làm giảm số lượng luồng được gửi đến ứng dụng tương ứng.
Kiểm tra cách triển khai trình quan sát
Hãy nhớ sao chép 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
là một tệp tham chiếu hiệu quả đến dữ liệu cơ bản, vì vậy, việc cố gắng truy cập vào tệp tham chiế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.