Khắc phục sự cố và lỗi Meet Media API

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: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:

  1. Mở một thẻ mới rồi nhập chrome://webrtc-internals vào thanh địa chỉ.
  2. Chuyển đến phần có nhãn Stats graph for inbound-rtp.
  3. 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

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:

  1. Mở một thẻ mới rồi nhập chrome://webrtc-internals vào thanh địa chỉ.
  2. Chuyển đến phần có nhãn Stats graph for inbound-rtp.
  3. 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

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=recvonly là một thuộc tính trong mỗi dòng m=video.
  • Kiểm tra để đảm bảo rằng có số lượng dòng m=video bằng nhau trong câu trả lời SDP.
  • Kiểm tra để đảm bảo rằng a=sendonly hoặc a=sendrecv là các thuộc tính trong mỗi dòng m=video trong câu trả lời SDP.
  • Kiểm tra để đảm bảo rằng một VideoAssignmentRequest thà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=video trong câu trả lời SDP đều chứa thuộc tính a=sendonly hoặc a=sendrecv. Bất kỳ dòng nào được đánh dấu a=recvonly trong 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.