воскресенье, 15 мая 2016 г.

Краткий обзор программного телефона SFLphone

Итак, как я и обещал, в этой заметке я сделаю краткий обзор программного телефона SFLphone, который привлёк моё внимание в качестве программы, пригодной для секретарей, диспетчеров и операторов, т.к. умеет работать с несколькими звонками одновременно и соединять абонентов между собой.

Программа имеет несколько разных интерфейсов и разбита на несколько пакетов:
$ apt-cache search sflphone
sflphone-daemon - SIP and IAX2 compatible VoIP phone - core daemon
sflphone-data - SIP and IAX2 compatible VoIP phone - common data
sflphone-evolution - SIP and IAX2 compatible VoIP phone - Evolution plugin
sflphone-gnome - SIP and IAX2 compatible VoIP phone - GNOME client
sflphone-kde - SIP and IAX2 compatible VoIP phone - KDE client
Как видно, имеются варианты интерфейсов для рабочих сред KDE и GNOME, а также плагин для почтового клиента Evolution. Ещё два пакета содержат демон и данные для программы. Демон на самом деле и является программным телефоном: внутри него происходит работа с устройствами компьютера и сетью. Интерфейс программы взаимодействует с демоном через DBUS и занимается лишь передачей команд в демон и отображением его состояния. В этой заметке я рассмотрю только интерфейс для среди GNOME. Установим в систему соответствующий пакет:
# apt-get install sflphone-gnome

Общий вид программы:

Под меню видно имеется окно со списком текущих разговоров, ниже - регуляторы громкости для микрофона и наушников, ещё ниже - номеронабиратель. Справочник контактов спрятан в отдельное окно, что мне показалось несколько неудобным.

Чтобы попасть в настройки программы, нужно выбрать пункт меню "Правка", а в раскрывшемся списке выбрать пункт "Настройки":


Из всех имеющихся настроек особенный интерес представляют настройки звука:

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

Второй интересный пункт, это выбор видеоустройств:

К сожалению, совершить видеозвонок с использованием этого программного телефона мне не удалось. Но это, наверное, не столь важно для рабочего места секретаря.

Чтобы настроить учётные записи, нужно в основном окне программы выбрать пункт "Правка", а в раскрывшемся списке выбрать пункт "Аккаунты":


После этого откроется список учётных записей:

Здесь имеется отдельная учётная запись под названием "IP2IP". В ней хранятся настройки, которые будут использоваться для прямых вызовов, без использования какой-либо учётной записи. Можно добавлять, удалять и редактировать учётные записи, а также временно отключать их, снимая галочку.

Во вкладке редактирования основных настроек учётной записи можно указать имя пользователя, пароль, адрес сервера или SIP-прокси и псевдоним, который будет отображаться в списке учётных записей и на программных телефонах других абонентов:


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


Во вкладке видеонастроек аналогично, можно выбрать используемые кодеки и их приоритеты, а также включить или выключить использование видео:

Ещё раз скажу, что совершить видеозвонок при использовании этой программы мне не удалось.

Во вкладке дополнительных настроек можно указать номер используемого UDP-порта, внешний IP-адрес и указать STUN-сервер:

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

В последней вкладке можно указать настройки шифрования для сеансов SIP и для трафика RTP:

Я ни то ни другое настраивать пока не пробовал.

Теперь перейдём к самому интересному - к соединению абонентов друг с другом.

Вот так входящий звонок отображается в правом верхнем углу экрана:

Принят звонок можно щелчком по этому всплывающему окну.

Тот же звонок отображается в списке разговоров. Взять трубку можно либо нажатием на пиктограмму с телефонной трубкой и зелёной стрелкой, либо через меню "Вызов", либо сочетанием горячих клавиш, либо через контекстное меню, как это показано ниже:

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

Ставим входящий звонок на паузу:

Опять же - поставить на паузу можно сочетанием горячих клавиш, либо через меню "Вызов".

Стоящий в очереди звонок отображается следующим образом:

При этом телефонная станция воспроизводит ожидающему абоненту музыку.

Пока звонок стоит в очереди, совершаем исходящий звонок:


Этот же исходящий звонок будет отображаться всплывающей надписью в правом верхнем углу экрана:


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

Соединение абонентов друг с другом:

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

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

Управляет конференцией абонент, использующий sflphone. Он может поставить конференцию на паузу, в таком случае все абоненты будут находиться в режиме ожидания и слушать музыку. Когда от конференции отключается абонент sflphone, конференция уничтожается, а все другие абоненты отключаются от неё.

В процессе использования перенаправлений звонков обнаружил, что телефонные шлюзы Cisco ATA 186 не поддерживают функцию REINVITE, которая позволяет абоненту с другой стороны попросить согласовать параметры звука с другим абонентом. Именно эта опция используется для перенаправления звонков. На случай подобных телефонных шлюзов в Asterisk имеется опция canreinvite. Чтобы указать, что телефонный шлюз не умеет переключаться на другого абонента, нужно указать в настройках SIP-пользователя опцию canreinvite=no. В этом случае Asterisk будет выступать посредником при трансляции звука. При установлении первого сеанса звук от обоих абонентов будет проходить через Asterisk. Когда нужно будет выполнить переключение, Aterisk самостоятельно выполнит REINVITE с одним из абонентов, продолжая трансляцию звука через себя для другого абонента, который не поддерживает REINVITE.

воскресенье, 8 мая 2016 г.

Настройка видео в Asterisk и Ekiga

В прошлой заметке Краткий обзор программного телефона и клиента обмена мгновенными сообщениями Ekiga я обмолвился о том, что этот программный телефон позволяет, при наличии веб-камеры, в процессе разговора ещё и обмениваться видео. Я заинтересовался этой возможностью и решил попробовать настроить обмен видео через Asterisk.

1. Включение поддержки видео в SIP

Чтобы включить передачу видео через Asterisk, нужно в файле /etc/asterisk/sip.conf в раздел general добавить опцию:
videosupport=yes

2. Настройка кодеков в учётных записях SIP-абонентов

Далее, в том же файле в настройках учётных записей SIP, под которыми на Asterisk регистрируются программы Ekiga, нужно явным образом прописать список поддерживаемых кодеков:
disallow=all
allow=gsm
allow=alaw
allow=ulaw
allow=h264
allow=h261
allow=mpeg4
Как оказалось, по умолчанию были разрешены только аудиокодеки и один видеокодек h261. Здесь я не указал ещё два возможных видеокодека - h263 и h263p, при использовании которых видео почему-то не работало.

3. Настройка кодеков в учётных записях SIP-транков

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

Сразу замечу, что передавать видео между разными станциями по протоколу IAX2 мне не удалось.

4. Применение настроек Asterisk

Далее, чтобы новые настройки вступили в силу, нужно попросить Asterisk перечитать настройки модуля sip:
# asterisk -rx 'sip reload'
5. Настройка кодеков в Ekiga

Открываем меню "Правка", выбираем пункт "Параметры". В открывшемся окне "Настройки Ekiga" разворачиваем ветку "Звук" и выбираем пункт "Кодеки". Отмечаем только кодеки PCMU (соответствует ulaw в Asterisk), PCMA (соответствует alaw в Asterisk) и gsm:


Теперь разворачиваем в том же окне ветку "Видео" и выбираем в ней пункт "Кодеки". Отмечаем только кодеки H264 и MP4V-ES (соответствует mpeg4 в Asterisk). Можно отметить ещё кодек H261, но с помощью стрелок выставить его приоритет ниже кодека H264. По моему опыту, у него ниже качество (разрешение 176x144) и работает он менее стабильно (может рассыпаться на крупные кубики). Кодеки H263 и H263-1998 (соответствует h263p в Asterisk) у меня не заработали, поэтому их использование отключил.


6. Тестовый звонок

Когда всё заработало, выглядело это вот так:

Я сидел за компьютером с ноутбуком на коленях, поэтому в окне меня видно с двух сторон :) Гарнитура была подключена только к одному из компьютеров и лежала на столе.

Стоит приготовиться к тому, что видео не заработает сразу и придётся подбирать кодеки, с которыми оно, наконец, заработает.

В следующей заметке я рассмотрю программный телефон SFLphone. Эта программа обладает функциями, которые окажутся очень полезными для секретарей, операторов, диспетчеров. То есть - для людей, которые занимаются обработкой звонков и которым часто бывает нужно обрабатывать несколько звонков одновременно, соединять абонентов между собой и ставить звонки в очередь, пока занят абонент, на которого нужно переключить звонящего.

воскресенье, 1 мая 2016 г.

Краткий обзор программного телефона и клиента обмена мгновенными сообщениями Ekiga

Отвлечёмся ненадолго от Asterisk и обратимся к смежной теме - программным телефонам для Linux.

Ekiga - это программа, сочетающая в себе возможности программного телефона, поддерживающего протоколы SIP и H.323, и клиента обмена мгновенными сообщениями, поддерживающего протокол Jabber/XMPP. Кроме звонков и обмена текстовыми сообщениями, программа при наличии веб-камеры, позволяет также обмениваться с собеседником видео. Программа была создана в рамках одноимённого сервиса - ekiga.net. В некотором роде его можно считать аналогом Skype, но построенном полностью на открытых технологиях. Конечно, не стоит считать Ekiga полным аналогом Skype, т.к. в Skype имеется много других возможностей - создание конференций, "приземление" звонков (то есть звонки на телефонные номера телефонной сети общего пользования) и т.п.

Установить программу можно очень просто, из репозиториев:
# apt-get install ekiga
Главное окно программы выглядит следующим образом.

Здесь можно увидеть список контактов. Между протоколами не делается никаких различий, все контакты, будь то SIP или XMPP, выводятся в общий список. Поддерживается группировка контактов.

При нажатии на соответствующую кнопку можно переключиться в окно номеронабирателя:

Это окно может оказаться полезным, если нужно позвонить на некий телефонный номер однократно. Постоянных собеседников удобнее добавить в список контактов.

Следующая кнопка отображает историю звонков:


Окно переписки с абонентами Jabber/XMPP выглядит следующим образом:

Стоит отметить, что программа обладает весьма ограниченной поддержкой протокола Jabber/XMPP. Фактически можно видеть только статусы собеседников и переписываться с ними. Нельзя посмотреть профиль собеседника, нельзя отправить или принять файл.

Список учётных записей можно открыть через меню "Правка" - "Учётные записи" или нажатием Ctrl-E:


Вот так выглядят настройки учётной записи Jabber/XMPP:

Настройки очень бедные. Нельзя задать прокси или настроить шифрование.

Вот так выглядят настройки учётной записи SIP:

Тоже очень бедные настройки. Нельзя задать STUN-прокси, нельзя выбрать прослушиваемый интерфейс и порт. Программа будет использовать UDP-порт 5060 и сообщать при регистрации на SIP-прокси IP-адрес первого попавшегося интерфейса, кроме lo.

Авторы явно были под влиянием Gnome HIG и убрали все настройки, которые посчитали лишними, в аналог реестра Windows - каталог .gconf/ с XML-файлами. Чтобы получить доступ к остальным настройкам, нужно установить программу gconf-editor из одноимённого пакета. Например, при помощи такой команды:
# apt-get install gconf-editor
При запуске команды gconf-editor от имени обычного пользователя можно исправлять настройки этого пользователя. Например, прослушиваемый порт можно поменять в параметре apps - ekiga - protocols - sip - listen_port:

Мне это понадобилось сделать для того, чтобы запустить Ekiga и Asterisk на одном и том же компьютере. Поскольку порт 5060 уже используется Asterisk, Ekiga должна использовать другой порт. То же самое может потребоваться сделать, если за компьютером работают несколько пользователей одновременно (мало ли в жизни бывает?) и каждому из них нужно использовать свой SIP-телефон (обычно SIP-телефоны по умолчанию прослушивают UDP-порт 5060, так что одного порта на всех не хватает). К сожалению, это не единственный случай, когда разработчики современных программ для Linux забывают, что Linux - это многопользовательская система, в которой одновременно может работать несколько пользователей, а один и тот же пользователь может открыть одновременно несколько сеансов.

Поменять используемый STUN-прокси тоже можно через gconf-editor:

Как видно, отвечают за него параметры enable_stun и stun_server в ветке apps - ekiga - general - nat.

Ещё один полезный раздел настроек - это список используемых программой портов. В ветке apps - ekiga - protocols - ports есть параметры tcp_port_range и udp_port_range:

Если на компьютере настроен пакетный фильтр, следует по крайней мере разрешить доступ к локальным UDP-портам из этого списка снаружи. Эти порты используются для обмена мультимедийным трафиком - аудио и видео. О назначении портов TCP сказать ничего не могу.

В следующей заметке я опишу настройку Asterisk для обмена видео между программными телефонами Ekiga.