Коды ошибок медиа (mpbx-media-app, mpbx-media)
Коды, которые возвращает mpbx_media_app (W3-MAPP-01, W3-MAPP-02), прикладное медиаприложение, которое
воспроизводит приглашения, собирает DTMF, записывает голосовую почту и смешивает комнаты конференций на
простых RTP-каналах, закреплённых через rtpengine (ADR-0004). Виды сопоставляются со статусами HTTP на
уровне API так же, как в общих кодах. Сообщения никогда не содержат тела SDP, адреса,
цифры, телефонные номера или токены сессий. См. руководство по mpbx-media.
| Код | Вид | Значение | Что делать |
|---|---|---|---|
MPBX-MEDIA-SESSION-UNKNOWN | not_found | Дескриптор сессии, конференции или участника неизвестен, уже закрыт (или участник вышел), либо его токен не совпадает. Один код для всех трёх случаев, чтобы вызывающий не мог проверять наличие активных сессий. | Обычно это ошибка состояния вызова: актор вызова использовал дескриптор после его закрытия или после перезапуска mpbx-media. Откройте новую сессию. |
MPBX-MEDIA-TENANT-MISMATCH | permission_denied | Дескриптор сессии, конференции или участника одной компании использован с контекстом другой компании (включая присоединение к комнате конференции другой компании), либо приглашение другой компании передано в play. Ничего не выделено и не поставлено в очередь. | Ошибка или атака в вызывающем коде: дескрипторы и кэшированные приглашения должны оставаться у компании, которой они принадлежат. Комната конференции никогда не смешивает две компании. |
MPBX-MEDIA-CODEC-UNSUPPORTED | invalid_argument | SDP не предлагает ни одного кодека, который обрабатывает mpbx-media. mpbx-media завершает только PCMU, PCMA, G.722 и Opus (DECISIONS, раунд 10). | Попросите rtpengine транскодировать канал в сторону mpbx-media в PCMU (или G.722 для широкополосного), как это делает политика кодеков media-control. |
MPBX-MEDIA-SDP-INVALID | invalid_argument | В SDP нет пригодного аудиораздела: нет строки аудио m=, нет адреса соединения, порт 0 (отклонённый поток), неверный тип полезной нагрузки или протокол, отличный от простого RTP/AVP. | mpbx-media общается с rtpengine только простым RTP. Передавайте SDP, который создал rtpengine для канала mpbx-media (ICE удалён, без SRTP), а не собственный SDP оконечного устройства. |
MPBX-MEDIA-PROMPT-INVALID | invalid_argument | Файл приглашения не является пригодным WAV: не RIFF/WAVE, отсутствуют блоки, больше 32 МиБ, либо не 16-битный PCM / G.711 с частотой 8 кГц при 8 или 16 кГц. | Преобразуйте приглашение при загрузке (W3-TEL-07 переводит загрузки в WAV). |
MPBX-MEDIA-OVERLOADED | unavailable | mpbx-media отказал в новой работе: достигнут лимит сессий (media.max_sessions, включая участников конференций), комната конференции заполнена (media.max_conference_participants), очередь рабочих потоков полна, рабочий поток остановлен, либо в media.rtp_ports нет свободного порта RTP. Повтор возможен. | Добавьте мощности mpbx-media (ядра или экземпляры) или расширьте диапазон портов. Следите за mpbx_media_sessions и mpbx_media_tick_overruns_total. |
MPBX-MEDIA-BAD-STATE | conflict | Операция недопустима в текущем состоянии сессии, например вторая запись голосовой почты, когда одна уже идёт. | Сначала остановите текущую запись. |
MPBX-MEDIA-CRYPTO | internal | Не удалось зашифровать или расшифровать сохранённую запись: ключ файла нельзя открыть в этой компании (файл другой компании, неверный идентификатор файла), файл изменён, переупорядочен или усечён, либо это не зашифрованный файл mpbx-media. | Проверьте, что запись принадлежит компании, которая её читает, и что объект не менялся. Неверный главный ключ установки виден в журнале как MPBX-SECRETS-*. |
MPBX-MEDIA-CONFIG | config | Неверная настройка media: подстановочный или групповой bind_ip, число рабочих потоков вне диапазона 1–256, число кадров джиттер-буфера вне диапазона 1–10, неверный диапазон портов RTP, нулевой лимит, число участников конференции вне диапазона 2–1000, либо служба запущена вне среды выполнения tokio. | Исправьте настройку. bind_ip должен быть внутренним адресом, до которого дотягивается rtpengine (loopback на одном хосте). |
MPBX-MEDIA-IO | internal | Сбой операции с сокетом (привязка, отправка, запуск рабочего потока). | Проверьте адрес привязки и лимиты процесса (открытые файлы, потоки). |
MPBX-MEDIA-CODEC | internal | Кодек не инициализировался, не смог закодировать или декодировать данные. Повреждённая полезная нагрузка при приёме скрывается, поэтому эта ошибка редкая. | Сообщите о проблеме вместе со строкой журнала. |
MPBX-MEDIA-PROTOCOL | invalid_argument | Соединение управления медиа между движком и отдельным mpbx-media нарушило протокол (MVP-GAP-02): кадр не прошёл аутентификацию (изменён, повторён, переупорядочен или пришёл из другого соединения), его длина выходит за границы, либо сообщение повреждено или неизвестно. Соединение закрывается; вызовы на нём завершаются. | Ошибка или атака во внутренней сети. Проверьте, что обе стороны работают одним выпуском, и смотрите mpbx_media_control_frames_rejected_total. |
MPBX-MEDIA-REMOTE-UNAVAILABLE | unavailable | У движка нет аутентифицированного соединения с удалённым mpbx-media ([media] mode = "remote"): ни один из адресов [media] remote не отвечает, служба останавливается, секреты управления различаются, либо соединение потеряно (вызовы, которые были на нём, завершаются). Повтор возможен. | Проверьте службу mpbx-media и её журналы, а также что у обеих сторон один и тот же MPBX_MEDIA_CONTROL_SECRET. Оповещение MediaServiceDown срабатывает при mpbx_media_remote_up == 0. |
MPBX-MEDIA-REMOTE-TIMEOUT | unavailable | Удалённый mpbx-media не ответил на запрос управления в течение [media] request_timeout_ms, либо запрос не удалось поставить в очередь вовремя (обратное давление). Повтор возможен. | mpbx-media перегружен или внутренняя сеть перегружена: следите за mpbx_media_tick_overruns_total и добавьте мощности. |
MPBX-MEDIA-REMOTE-ERROR | (as reported) | Удалённый mpbx-media сообщил об ошибке, код которой этот движок не знает (более новый выпуск на другой стороне). Вид сохраняется. | Запустите одинаковый выпуск на движке и на mpbx-media. |
MPBX-MEDIA-ROOM-FULL | conflict | В комнате конференции уже столько участников, сколько разрешено её собственным лимитом (ConferenceOptions::max_participants, настроенный лимит комнаты для входящего набора; W6-TEL-07). Присоединяющегося не добавили; проверка и резервирование выполняются за один шаг, поэтому два вызова никогда не займут последнее место. | Ожидаемо, когда комната заполнена: комната для входящего набора проигрывает приглашение «комната заполнена» и завершает вызов. Повысьте лимит комнаты, если это случается часто. |