CobraTelecom, расширяя границы возможного  главная
Наши телефоны:
+7(495) 128-98-63
8 (909) 976-88-46
E-mail:contact@cobratelecom.ru
asterisk@cobratelecom.ru
Система записи и прослушивания разговоров VOIP Объединение удалённых офисов Россия и СНГ мир стал ближе
Ваше имя:

Как с вами связаться:

Текст сообщения:
EXOCAPTCHA

Ситуация с факсом (Т.38) в текущей версии Астериск

8 декабря 2009, 00:07

За прошлый год некоторые из нас потратили много (МНОГО!) часов в Digium, работая над поддержкой факс в Астериск (даже при всём при том, что мы все предпочли бы видеть, что факс умирает как устаревшая технология, что это полное ). Часть этой работы стала нашим коммерческим факс-приложением для Астериск, с другой стороны мы руководствовались нашими желаниями иметь добротную факсимильную поддержку в других наших коммерческих PBX-продуктах, но большая часть этой работы мотивировалась потребностью получить Астериск с открытым кодом (и все его разновидности и разработки в сообществе) способный использовать факс достаточно надёжно с многим оконечным традиционным оборудованием настолько, насколько это вообще возможно.

В Астериск 1.4 и предшествующих версиях, была ограничена поддержка факса любого вида; Астериск 1.4 поддерживает прозрачные сессии T.38 на каналах SIP, но это - все. В дополнительном пакете с открытым кодом asterisk-addons (основаном на превосходной библиотеке spandsp Стива Андервуда), у которого есть приложения dialplan , для отправки и получения факса по аудио-каналу (G711 TDM).

При разработке Астериск 1.6.0 факс-приложения Стива dialplan были объединены в asterisk-addons, и затем непосредственно в основной код разработки Астериск, где они стали модулем 'app_fax'. Кроме того, процесс установления связи по T.38 был перепроектирован, чтобы разрешить приложениям Asterisk фактически быть эндпойнтами T.38; что привело к возможности посылать и получать факс как по аудио-каналу, так и по протоколу T.38.

Как только это было опубликовано в свободном доступе мы стали получать огромное количество сообщений об ошибках, потому что пользователи не могли достаточно хорошо передавать факсимильные сообщения по T.38 с различным ATA и через различных провайдеров. Я умолчу о кровавых подробностях того, почему это имело место, кроме как повторить свежее высказывание от Стива в канале IRC: "спецификации T.38 были написаны после ночи жуткой попойки в качестве шутки.". Надо признать, что технически - это не есть истина, но, истиной является то, что соответствие рекомендациям T.38 прежде всего в части определения SIP/SDP очень трудно поддерживалось производителями. Производство эндпойнтов - шлюзов и адаптеров T.38, тестирование их полного взаимодействия - это сложный и трудоёмкий процесс, который может быть достигнут только в течение многих часов и часов (и часов) тестирования.


Поскольку репорты о проблемах становились всё более серьезными, мы сделали значительный шаг: начисто переписали код механизмов negotiation T.38 в Астериске. Эти изменения сначала появились в 1.6.0.14 и 1.6.1.5 выпусках. Приложение app_fax в основном коде было обновлено, чтобы эти изменения стали сразу доступны широким массам пользователей, и рядовые пользователи факса немедленно получили ощутимые выгоды после этих изменений..., и результат был просто замечателен. Теперь мы получаем совсем немного отчетов об ошибках, связанных с T.38, и в почти каждом случае мы можем указать на неверную конфигурацию или просто дефектный конечный шлюз, который является причиной проблемы. Для многих, многих людей, факс по T.38 в Астериске 1.6.0 и 1.6.1, как говорится, 'только теперь начал работать' .

В то время как все это продолжалось, Digium также работал над коммерческим Факсом для Астериск, который обеспечивает сопоставимые с app_fax функциональные возможности, но использует коммерческий факс-стек. Когда мы начали разработку этого продукта, мы знали, что мы хотим по возможности большее число частей этого кода насколько возможно привнеслись в открытый код, так, вместо того, чтобы строить это как монолитный модуль, мы создали два модуля: res_fax и res_fax_digium. res_fax подобен app_fax, в котором он обеспечивает стык с приложениями dialplan, dialplan функциями, и другими связанными компонентами, чтобы посылать и получать факсы. Однако, это фактически не включает факс-стек; это обеспечивалось подгружаемым интерфейсом, который позволяет загружаться одному (или более) дополнительным модулям, чтобы фактически обеспечить реализацию факс-технологии. Это позволяло однако обрабатывать все сообщения T.38, используя уже 3-е поколение реализация T.38 в Астериск.

Конечно, res_fax_digium - коммерческий модуль Digium для res_fax, и мы поставляли комбинацию этих двух модулей в качестве нашего Факса для Астериск в течение довольно нескольких месяцев. (К сожалению это занимало больше времени с обновлением этих модулей, чтобы соответствовать API Астериск T.38, чем нам хотелось бы, но это не важно для пользователей open source). Недавно, с последним набором изменений к UDPTL доработаных в стеке Астериска, мы достигли точки, где мы думаем, что мы осуществили все части рекомендаций T.38, которые мы можем осуществить, столь же совместимым и взаимодействующим образом, как только мы можем, с некоторыми опциями конфигурации, которые обеспечивают возможность отменить неудачное установление связи удалённых эндпойнтов когда это необходимо. Фактически, комбинация большинства open source релизов Астериск и app_fax или res_fax+res_fax_digium теперь позволяют успешно взаимодействовать со многими T.38 ATA, которые есть у нас в нашей лаборатории и несколькими провайдерами, и мы проверили их большую часть, пока я пишу эти строки. В почти каждом случае это работает *без* особых настроек конфигурации в Астериске или факс-приложениях, что является хорошей новостью для конечных пользователей. Мы даже расширили (и установили) функциональные возможности 'faxdetect' в chan_sip так, чтобы это работало, поскольку пользователи ожидают, что это будет себя вести подобным же образом как и функция faxdetect в chan_dahdi.

Теперь, когда этот пункт был достигнут, для нас настало время, чтобы задействовать наш план - открыть код res_fax; к тому времени я создал новый раздел в Subversion (/svn/asterisk/team/group/res_fax) основанный на коде Астериск, и объединил новую версию res_fax туда, периодически обновляя, чтобы компилировать при каждых изменениях основного кода API. К тому времени, когда будет выпущена версияАстериск 1.8, res_fax будет полностью замещён на app_fax, поскольку это обеспечивает идентичные приложения для dialplan (те же самые названия, опции и операции), но имеет дополнительные особенности и функциональные возможности совместимости. Чтобы достигнуть этого, пока что мы продолжаем нуждаться в подгружаемом модуле res_fax_spandsp, так, чтобы комбинация res_fax + res_fax_spandsp обеспечила те же самые функциональные возможности что и app_fax, и это будет безболезненный переход для пользователей факса Астериск 1.6.x на версию 1.8, когда они будут готовы. Мы задали работу одному из наших разработчиков, чтобы запустить этот процесс на следующие несколько недель, и я уверен, что Вы будете видеть некоторые начальные шаги в конце этого паериода, то есть уже скоро. Для тех из Вас, кто внес усовершенствования в app_fax и использует его в большой степени (или даже те, кто только использует его и может обеспечить тестирование), я был бы рад отвечать вам в этом треде, если вам это интересно и вы желаете помочь в этих усилиях.

Теперь, об еще более интересном материале. Поскольку я работал над этим все последние 6-8 месяцев, я также провел время, наконец пытаясь понять, как лучше всего встроить факс-реле TDM-T.38 в Астериск. Я знаю, что есть некоторое число разработчиков сообщества, которые работали над этим, и есть множественные исправления в баг треккере по поводу этой проблемы, которые обеспечивают эти функциональные возможности в различных формах. Была также попытка Даниэля Ференки запустить обсуждение в этом треде о лучшем долгосрочном подходе для поддержки реле, но он действительно не получал ответов.

Как только res_fax и res_fax_spandsp готовы для пользователей к использованию, будет самое время, чтобы расширить и поддержать также и ФАКСИМИЛЬНОЕ реле. Я хотел бы предположить, что это можно осуществить через res_fax, обеспечивающим в новом API передачу 'ФАКС сессии', это драйвер канала (тот, который использует каналы TDM служб) может использовать для поддержки предложения T.38 остальной части Астериск, как будто это поддерживало T.38 прирожденно. Мы можем запустить отдельный поток здесь, чтобы говорить о частностях, но я полагаю, что это - самый чистый подход с наименьшим количеством воздействия на существующий код в Астериск, и я хотел бы получить мнения от других заинтересованных сторон в ходе обсуждения.

Резюмируя вышесказанное сообщу, что Астериск 1.6.x достиг основательной ФАКСИМИЛЬНОЙ поддержки (особенно по T.38), и что с Астериск 1.8 мы будем в состоянии улучшить этот аспект далее и продолжать улучшать поддержку передачу факсов в дальнейшем. Для всех, кто все еще настаивает на использовании этой устаревшей технологии, я надеюсь, что это обеспечило то, что вы ожидали от использования Астериск в каждом месте, где это имеет смысл в ваших сетях!
--
Kevin P. Fleming
Digium, Inc. | Director of Software Technologies

информация взята с сайта: http://mobile.asterisk.ru/news/108