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

Hướng dẫn này cung cấp thông tin hướng dẫn 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

Sau đây là các mẹo khắc phục sự cố đối với 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ỉ tìm cách 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. Nếu bạn đang thăm dò ý kiến về thời điểm bắt đầu hội nghị, hãy sử dụng Sự kiện bắt đầu hội nghị.
INVALID_OFFER Đọc kỹ các yêu cầu về ưu đãi để kiểm tra xem có thiếu thông tin nào không, chẳng hạn như các kênh bắt buộc để mở dữ liệu. Bạn cũng có thể so sánh chuỗi đề nghị của ứng dụng với đề nghị 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 phòng 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. 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à tài khoản của trẻ em. Để 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 phòng 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. Lý do khiến nền tảng không được hỗ trợ bao gồm ứ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 Tại một thời điểm, chỉ có một ứng dụng Meet Media API có thể kết nối với một hội nghị. 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.
CONSENTER_ABSENT Không có người đồng ý đủ điều kiện trong cuộc họp. Đối với cuộc họp do người tiêu dùng sở hữu, hãy đảm bảo người bắt đầu có mặt trong cuộc họp. Đối với cuộc họp của chủ sở hữu không gian làm việ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 trường hợp này, thì bạn 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 Đáp ứng vòng đời của Media API.
DISABLED_BY_HOST_CONROL 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 gắn dấu hiệu nhận dạng được bật, Meet Media API sẽ 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 bạn bật tính năng mã hoá, Meet Media API sẽ không được phép tham gia cuộc họp. Bạn không thể thay đổi chế độ này trong cuộc gọi 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.

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ỉ Unified Plan được dùng khi định cấu hình kết nối ngang hàng cục bộ.

Lỗi về thứ tự mô tả nội dung nghe nhìn

Khi tạo kết nối ngang hàng bằng đề nghị 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 đề nghị 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ả về 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ể gặp 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ả đa phương tiện trong đề nghị SDP.

Để khắc phục lỗi này, hãy đảm bảo rằng mỗi nội dung mô tả đa phương tiện trong đề nghị 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 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ó đượ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 bạn cung cấp đúng phạm vi OAuth 2.0. Để biết thêm thông tin, hãy xem bài viết Đáp ứng các phạm vi Media API.

Xác minh rằng bạn đã thiết lập hội nghị đúng cách

  • Khi kết nối với máy chủ Google Meet, máy khách sẽ không tự động được chấp nhận vào 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 với trạng thái STATE_JOINED.

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Xác nhận rằng có những người tham gia khác trong hội nghị 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 SDP offer. Phải có 3 phần mô tả nội dung nghe nhìn chỉ nhận trong sản phẩm.

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 nhận được một đề nghị hợp lệ, các máy chủ Meet sẽ phản hồi bằng một câu trả lời SDP có 3 nội dung mô tả về phương tiện âm thanh 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 đối tượng theo dõi

Hãy nhớ tạo bản sao của dữ liệu âm thanh nếu bạn di chuyển quá trình xử lý dữ liệu sang một luồng khác. AudioFrame.pcm16 về cơ bản 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ó đượ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 bạn cung cấp đúng phạm vi OAuth 2.0. Để biết thêm thông tin, hãy xem bài viết Đáp ứng các phạm vi Media API.

Xác minh rằng bạn đã thiết lập hội nghị đúng cách

  • Khi kết nối với máy chủ Meet, ứng dụng sẽ không tự động được phép 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 với trạng thái STATE_JOINED.

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Xác nhận rằng có những người tham gia khác trong hội nghị 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 SDP offer (đề nghị SDP). Bạn phải có tối đa 3 nội dung mô tả về phương tiện video chỉ nhận trong sản phẩm.

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 đề nghị hợp lệ, Meet sẽ phản hồi bằng một câu trả lời SDP có n phần mô tả phương tiện video chỉ gửi, trong đó n là số lượng phần mô tả phương tiện video trong đề nghị 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 … có trong đề nghị SDP được gửi đến các 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 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. Bạn nên thông báo trạng thái thành công hoặc không thành công cho ứng dụng thông qua cùng một kênh dữ liệu.

Khắc phục vấn đề có ít luồng video hơn dự kiến

  • Kiểm tra để đảm bảo rằng đề nghị SDP chứa đúng số 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ính a=sendonly hoặc a=sendrecv. Mọi dòng được đánh dấu a=recvonly trong câu trả lời sẽ giảm số lượng luồng được gửi đến ứng dụng tương ứng.

Kiểm tra quá trình triển khai đối tượng theo dõi

Hãy nhớ sao chép dữ liệu video nếu bạn chuyển quy trình xử lý dữ liệu sang một luồng khác. VideoFrame.frame về cơ bản 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.