Построение сообщения SDP? - PullRequest
0 голосов
/ 15 февраля 2010

Мне было интересно, может кто-нибудь указать мне хороший учебник о том, как создать сообщение SDP.

Я прочитал основы и могу построить и понять параметры, но я просто не могу заставить его работать.

Я либо получаю здесь неприемлемый ответ, либо вообще не отвечаю, это после того, как я получу 100 попыток и 180 звонков.

Так что мой SIP работает, но ему не нравятся данные SDP.

В настоящее время он построен так:

String sdpData = "v=0\r\n"
            + "o=- 019078020 0"
            + " IN IP4  sip.ciceronetworks.com\r\n" + "s=MySession\r\n"
            + "c=IN IP4  sip.ciceronetworks.com\r\n"
            + "t=0 0\r\n" + "m=audio 6002 RTP/AVP 0\r\n"
            + "a=sendrecv\r\n" + "a=rtpmap:0 PCMU/8000\r\n" + "a=ptime:20\r\n"+ "a=fmtp:97 mode=20\r\n";


    byte[] contents = sdpData.getBytes(); 

    request.setContent(contents, contentTypeHeader); 

И хотя я получаю 100, пытаясь затем 180 звонить, но когда я принимаю вызов на другом конце, я вообще ничего не получаю, кажется, что он просто падает, я также получаю «Ошибка аудиоустройства» на клиенте ПК, который Я пытаюсь позвонить.

У кого-нибудь есть идеи?

Ответы [ 3 ]

2 голосов
/ 15 февраля 2010

Проблема может быть очень простой: вы, кажется, забыли перевод строки после "a = sendrecv". : -)

Во всяком случае, вот совет: В целях тестирования вам, вероятно, лучше использовать инструмент, чем прыгать и писать части протокола. Вы можете использовать sipp для этой цели, это отличный инструмент для тестирования сетей SIP. Кроме этого, вы можете, конечно, просто прослушать сетевой трафик между двумя работающими SIP-устройствами и посмотреть, чем он отличается от вашего трафика.

EDIT:

Я пропустил это раньше: Вы должны опустить a=fmtp:97 mode=20, так как описание сеанса недопустимо: Вы можете использовать атрибут параметра формата только для кодеков, упомянутых в строке мультимедиа. Кодеки идентифицируются по номеру типа полезной нагрузки (0 = PCMU, 8 = PCMA, 18 = G723, ...). Некоторые кодеки не имеют официально назначенных номеров, для них следует использовать динамический диапазон 96-127: пользовательские агенты могут назначать номера в этом диапазоне с помощью атрибута rtpmap. Поэтому, если вы не укажете, какой кодек вы подразумеваете под 97, другой пользовательский агент не сможет узнать, к какому кодеку должны применяться параметры формата.

1 голос
/ 17 апреля 2012

Я нашел хорошую статью, которая имеет дело с SDP (протокол описания сеанса). Это также связано с SDK, который называется Ozeki VoIP SIP SDK. Если вы объедините эти вещи, вы сможете, например, создать программный телефон.

Существует также краткое описание SDP.

Работа с SDP в VoIP. SIP-звонки - интересная тема для тех, кто хочет разработать свое собственное приложение для софтфона или веб-телефона или то, что вы хотите.

SDP описывает мультимедийный сеанс связи для целей объявления сеанса, приглашения сеанса и согласования параметров.

Использование SDK может обременить гибкость плеча и гарантирует высокую совместимость.

Для получения дополнительной информации о SDP в связи с SDK для создания собственных приложений, вы можете взглянуть на упомянутую статью, если вы в Google: "Работа с SDP в вызовах VoIP SIP"

1 голос
/ 27 февраля 2010

Паприка права: режим a = fmtp: 97 = 20 просто неправильный (и, похоже, он является частью предложения кодеков iLBC). Вы не предлагали кодек 97, вы предлагали кодек 0 (PCMU).

Обратите внимание, что a = fmtp: 97 не должен причинять вам вреда, это просто фальсификация.

Наиболее вероятная проблема заключается в том, что вы не являетесь sip.ciceronetworks.com, т. Е. Ваша линия c = (и строка m =) сказала: «отправьте мои медиаданные на порт 6002 на sip.ciceronetworks.com». Я подозреваю, что IP-адрес вашего ПК не совпадает с sip.ciceronetworks.com, и / или между вами и другим концом есть брандмауэр / NAT.

Возможно, это не ваша проблема, но строка o = не соответствует спецификации От RFC 4566 :

o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>

Заставить VoIP работать не так просто, как подразумевается в RFC или пояснениях к кулинарной книге ...

...