Какой самый лучший SIP-совместимый тип кодека для Android - PullRequest
2 голосов
/ 31 марта 2011

Я хочу разработать приложение для Android, которое будет использовать SIP-сервер моего клиента.Мой клиент выставляет пару REST API с SIP-сервера для связи с приложениями.

Я хочу знать, какой из них лучший тип кодека для этого приложения?

По сути, я хочу создать SIP-стек и отправить SIP-пакеты на сервер .Итак, для пакетов должна быть система кодирования и декодирования.Мой клиент предпочитает 16 кбит / с, но я не уверен, что мне использовать.

Ответы [ 5 ]

10 голосов
/ 01 апреля 2011

Как уже говорили другие, SIP не передает аудио или видео. Хотя теоретически вы можете отправлять данные через любой транспорт, включая ATM, аналоговые линии, DS0 и т. Д., В реальном мире RTP является наиболее распространенным. RTP (протокол реального времени) и RTCP (протокол управления в реальном времени) или SRTP (безопасный RTP) обычно передают аудио и видео.

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

G.711 - Платное качество (т. Е. Хорошо, как хорошая аналоговая телефонная линия, или даже немного лучше). «Универсальный» в том, что практически каждое устройство поддерживает G.711. Занимает большую полосу пропускания, на самом деле не сжимает данные (G.711 - «компандер»). Базовая линия G.711 довольно проста (это действительно пара справочных таблиц). В добавлении I добавлено маскирование потери пакетов (PLC), а в добавлении II добавлено подавление паузы и генерация комфортного шума.

GSM - используется на мобильных телефонах, звучит нормально, хороший ПЛК, хорошее сжатие

G.729A - широко используется, почти платного качества, хорошее сжатие (8 Кбит / с)

G.723.1 - широко используется, почти так же хорошо, как G.729, лучшее сжатие (4-5Kbps)

G.722 - звучит лучше, чем G.711, широкополосный (вдвое больше полосы пропускания звука по G.711 или аналоговому вызову), такая же полоса пропускания, что и G.711

GIPS - существуют различные реализации, одна бесплатная. IIRC, использует около 13,5 Кбит / с на линии, звук не так хорош, как G.723.1 (но это метрика восприятия, YMMV) Занимает много процессора.

Все кодеки используют некоторый процессор и другие системные ресурсы. Как правило, чем более агрессивен кодек (чем меньше пропускная способность), тем больше используется процессор. Кроме того, все эти конкретные кодеки являются кодеками с потерями - они теряют часть данных. Это означает, что существует сжатие, а не то, что части аудио отбрасываются из-за плохой маршрутизации и низкого качества линии. Так же, как MP3 считается кодек потери, в то время как FLAC считается без потерь. Если вам интересно, следующая статья в Википедии объясняет более подробно: http://en.wikipedia.org/wiki/Lossy_compression

4 голосов
/ 08 апреля 2011

Вам необходимо знать, какие кодеки и протоколы будет поддерживать этот SIP-сервер. Если вы контролируете оба конца и хотите придерживаться скорости 16 Кбит / с, вам понадобится iLBC (без лицензионных платежей) или G.729 (применяются лицензионные платежи). G.711 и (сейчас) G.722 также не имеют лицензионных отчислений, но оба используют ~ 64Kbps.

Список, приведенный ранее, хорош, с несколькими проблемами.

GIPS - существуют различные реализации, одна бесплатная. IIRC, использует около 13,5 Кбит / с на линии, звук не так хорош, как G.723.1 (но это метрика восприятия, YMMV) Занимает много процессора.

GIPS не является кодеком - iLBC и iSAC - это кодеки, разработанные GIPS. iLBC является бесплатным и стандартизированным. iLBC имеет высокое качество, 13 или 15 Кбит / с, и очень устойчив к потере пакетов по сравнению с G.729 или даже G.711. С iLBC вы можете потерять 30 или даже 50%, но все равно вас поймут. Я не уверен, что скажу, что он использует много ресурсов ЦП по сравнению с G.729.

Все кодеки используют некоторый процессор и другие системные ресурсы. Как правило, чем более агрессивен кодек (чем меньше пропускная способность), тем больше используется процессор. Кроме того, все кодеки являются кодеками с потерями - они теряют часть данных.

Ну, G.711 на самом деле не с потерями как таковыми (теоретически да, но это почти больше потерь на уровне квантования). 64K G.722 тоже не очень с потерями. G.723 высасывает мертвых песчанок через садовые шланги. : -)

1 голос
/ 31 марта 2011

Звучит как плохая идея сделать это самостоятельно.Разработка sip-клиента не является тривиальной задачей, поскольку вам нужно реализовать несколько протоколов.Выбор кода не является очень важным решением по сравнению с остальными.

imho вам следует использовать один из доступных стеков SIP с открытым исходным кодом (например, pjsip) или создать свое приложение поверх sip-клиента с открытым исходным кодом (например, Sipdroid).).

Но так как вы попросили кодек: используйте кодек GSM.Сохранена пропускная способность и звучит ок.В остальном G.711 является стандартным кодеком, который поддерживают 99% всех sip-серверов.

0 голосов
/ 28 октября 2011

Здесь необходимо принять во внимание две вещи:

  • Какие другие устройства / серверы, которые обрабатывают носители, развертываются или планируются к развертыванию
  • Является ли ваш клиентищите узкополосное или широкополосное решение - это сильно повлияет на качество голосовой связи

После того, как вы пригвоздите ответы на два вопроса выше, вы сможете выбрать.Для мобильных устройств обычно используются голосовые кодеки AMR-NB или AMR-WB.Для SIP это обычно G.729 или G.722.x.У вас также есть Speex, ISAC и SILK на выбор.Вам, вероятно, в любом случае потребуется выполнить G.711, чтобы взаимодействовать со всем - хотя пропускная способность будет выше.

Здесь нет простого ответа.Если ваш клиент может выбрать или указать, какие другие устройства используются, вам будет легче выбрать его.

0 голосов
/ 31 марта 2011

Любой

SIP не отправляет и не обрабатывает ЛЮБЫЕ пакеты данных. SIP - это протокол инициации сеанса, который обрабатывает ПЕРЕГОВОРЫ СЕССИЙ.

Сеансы затем arae - в случае auio и видео - основаны на RTP и используют RTSP для передачи сигналов. Таким образом, ваш вопрос указывает на НАСТОЯЩЕЕ отсутствие знаний о том, что вам нужно делать - реальная проблема заключается в следующем: вам нужен кодек, совместимый с RTP.

Что похоже бессмысленно. RTP является только протоколом связи. Это все равно что спросить «что такое HTTP-совместимый формат изображения». HTTP не волнует. Браузер делает.

В случае RTP это означает - RTP не волнует. Он может транспортировать любые данные. Важно то, что ОБА СТОРОНЫ знают один и тот же кодек. Итак, в вашем случае это означает:

  • Если вы программируете обе стороны, тогда это ваш выбор.
  • Если вы программируете только один sidwe (как система SIP-телефона), то вопрос в том, что «нормальные» программы обрабатывают.
...