Устранение и исправление ошибок Meet Media API

В этом руководстве содержатся инструкции по устранению распространенных ошибок API Google Meet Media.

Устранение кодов ошибок

Ниже приведены советы по устранению кодов ошибок, возвращаемых конечной точкой connectActiveConference :

Коды ошибок
NO_ACTIVE_CONFERENCE Убедитесь, что клиент API Meet Media пытается подключиться только после того, как аутентифицированный пользователь уже присутствует в конференции в конференц-зале . Если вы опрашиваете начало конференции, используйте события начала конференции .
INVALID_OFFER Внимательно ознакомьтесь с требованиями предложения , чтобы убедиться в отсутствии недостающих деталей, например, в необходимости открытия каналов передачи данных. Вы также можете сравнить строку предложения вашего приложения с примером предложения и выявить различия.
INCOMPATIBLE_DEVICE Одно или несколько устройств в конференции несовместимы с клиентами API Meet Media. Ваше приложение не сможет присоединиться, поэтому вам следует сообщить об этом конечным пользователям. Несовместимость устройств может возникать, если учётная запись, связанная с устройством, считается несовершеннолетней. Подробнее см. в разделе «Требования к конечным пользователям» .
UNSUPPORTED_PLATFORM_PRESENT Одно или несколько устройств в конференции несовместимы с клиентами API Meet Media. Ваше приложение не сможет присоединиться, поэтому вам следует сообщить об этом конечным пользователям. Причинами отсутствия поддержки платформы могут быть мобильные приложения, не соответствующие минимальным версиям, и подключение с неподдерживаемых платформ. Подробнее см. в разделе «Требования к конечным пользователям» .
CONNECTIONS_EXHAUSTED К конференции одновременно может подключаться только один клиент API Meet Media. Если приложение аварийно завершит работу, при попытке повторного подключения может возникнуть эта ошибка. В этом случае подождите около 30 секунд, пока Meet не завершит предыдущее подключение. Затем повторите попытку.
CONSENTER_ABSENT На встрече нет лица, имеющего право на согласие. Для встреч, организованных клиентами, убедитесь, что инициатор присутствует на встрече. Для встреч, организованных владельцами рабочих пространств, должен быть хотя бы один представитель организации, которая является организатором встречи. Подробнее см. в разделе «Требования к лицам, осуществляющим согласие» .
DISABLED_BY_ADMIN Администратор отключил API Meet Media для своей организации. Если вы столкнулись с этой проблемой, её нельзя будет изменить в течение конференции. Подробнее см. на рисунке 3 в разделе «Жизненный цикл API Meet Media» .
DISABLED_BY_HOST_CONROL Организатор отключил API Meet Media для этой встречи. Ваше приложение не сможет присоединиться, поэтому вам следует сообщить об этом конечным пользователям. Подробнее см. на рисунке 5 в разделе «Жизненный цикл API Meet Media» .
DISABLED_DUE_TO_WATERMARKING При включении водяных знаков API Meet Media не будет доступен для участия в конференции. Вы можете сообщить об этом своим конечным пользователям. Подробнее см. рисунок 2 в разделе «Жизненный цикл API Meet Media» .
DISABLED_DUE_TO_ENCRYPTION При включенном шифровании API Meet Media недоступен для участия в конференции. Это невозможно изменить во время вызова Meet. Вы можете сообщить об этом своим конечным пользователям. Подробнее см. на рисунке 2 в разделе «Жизненный цикл API Meet Media» .

Единый план

Если каналы передачи данных никогда не открываются и вы не получаете аудио или видео, проверьте, используется ли только Унифицированный план при настройке локального однорангового соединения.

Ошибка порядка описания носителя

При создании однорангового соединения с предложением протокола описания сеанса (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:

предложение СДП ответ СДП
m=audio 9 UDP/TLS/RTP/SAVPF 111m=audio 9 UDP/TLS/RTP/SAVPF 111
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99m=audio 9 UDP/TLS/RTP/SAVPF 111
m=audio 9 UDP/TLS/RTP/SAVPF 111m=audio 9 UDP/TLS/RTP/SAVPF 111
m=audio 9 UDP/TLS/RTP/SAVPF 111m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99

Чтобы исправить эту ошибку, убедитесь, что похожие типы медиа-данных настроены правильно и сгруппированы при настройке объекта однорангового соединения. Чередующиеся описания медиа-данных не поддерживаются.

В следующем примере кода показано, как правильно сопоставлять описания медиа-объектов:

С++

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:

  1. Откройте новую вкладку и введите в адресную строку: chrome://webrtc-internals .
  2. Перейдите в раздел « Stats graph for inbound-rtp .
  3. Проверьте каждый аудиографик, чтобы увидеть, принимаются ли пакеты.

Если вы используете эталонный клиент C++, проверьте, вызывается ли OnAudioFrame .

Проверьте области действия OAuth

Аудио передается только в том случае, если в первоначальном запросе на подключение указана правильная область действия. Чтобы устранить эту ошибку, убедитесь, что указаны правильные области действия OAuth 2.0. Подробнее см. в разделе Области действия API Meet Media .

Убедитесь, что конференция правильно настроена.

  • При подключении клиента к серверам Google Meet он не автоматически подключается к конференции. Убедитесь, что вы получили обновление ресурса управления сеансом по каналу данных управления сеансом с состоянием STATE_JOINED .

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Убедитесь, что есть и другие участники конференции, чьи аудиопотоки не отключены.

Убедитесь, что вы подаете звуковой сигнал

Meet предоставляет аудио только в том случае, если вы указали это в предложении SDP . В предложении должны быть три описания аудионосителей, предназначенных только для приёма .

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 с тремя аудиоописаниями медиаконтента, доступными только для отправки.

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:

  1. Откройте новую вкладку и введите в адресную строку: chrome://webrtc-internals .
  2. Перейдите в раздел « Stats graph for inbound-rtp .
  3. Проверьте каждый видеографик, чтобы увидеть, принимаются ли пакеты.

Если вы используете эталонный клиент C++, проверьте, вызывается ли OnVideoFrame .

Проверьте области действия OAuth

Видео передается только в том случае, если в первоначальном запросе на подключение указана правильная область действия. Чтобы устранить эту ошибку, убедитесь, что указаны правильные области действия OAuth 2.0. Подробнее см. в разделе Области действия API Meet Media .

Убедитесь, что конференция правильно настроена.

  • При подключении клиента к серверам Meet он не автоматически подключается к конференции. Убедитесь, что вы получили обновление ресурса управления сеансом по каналу данных управления сеансом с состоянием STATE_JOINED .

    {"sessionStatus":{"connectionState":"STATE_JOINED"}}
    
  • Убедитесь, что есть и другие участники конференции, у которых не отключен звук видеопотоков.

Убедитесь, что вы включили видеосигнал

Meet предоставляет видео только в том случае, если это указано в предложении SDP . В предложении должно быть до трёх описаний видеоконтента, предназначенных только для приёма.

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 .
  • Проверьте, что в ответе SDP содержится одинаковое количество m=video .
  • Проверьте, что a=sendonly или a=sendrecv являются атрибутами под каждой строкой m=video в ответе SDP.
  • Убедитесь, что запрос VideoAssignmentRequest был успешно отправлен и получен серверами Meet. Информация об успешном или неудачном выполнении должна быть передана клиенту по тому же каналу данных.

Устранение неполадок, связанных с меньшим количеством видеопотоков, чем ожидалось

  • Проверьте, что предложение SDP содержит правильное количество строк m=video … .
  • Убедитесь, что все описания m=video в ответе SDP содержат атрибут a=sendonly или a=sendrecv . Любые строки с пометкой a=recvonly в ответе уменьшают количество потоков, отправляемых клиенту, на указанную величину.

Проверьте реализацию вашего наблюдателя

Обязательно сделайте копии видеоданных, если переносите обработку данных в другой поток. VideoFrame.frame фактически является ссылкой на базовые данные, поэтому попытка доступа к нему после OnVideoFrame приведёт к неопределённому поведению, например, к ошибке сегментации.