пятница, 22 января 2016 г.

факсы - про размеры

из ирки, #freeswitch

<playnet>  what correct size for fax? 1728x1186, 1728x1078, 1728x2156?
<playnet> or 1728 x something? What size for A4?
<coppice> length depends on the resolution, and its not a precisely defined number. Only the 1728 is precisely defined
<coppice> For A4 the lengths are 11xx for standard, 22xx for fine and 44xx for super-fine, but short pages are valid

пятница, 15 января 2016 г.

freeswitch: voicemail in mp3

Для включения mp3 требуется загруженный mod_shout.

В документации аж 3 переменных, позволяющих задать формат:
https://wiki.freeswitch.org/wiki/Mod_voicemail#file-extension
https://wiki.freeswitch.org/wiki/Mod_voicemail#vm-message-ext
https://wiki.freeswitch.org/wiki/Mod_voicemail#vm_message_ext

Что куда писать? Можно предположить, но явно это в доке не прописано:
file-extension - param в mod_voicemail, раздел profile
vm-message-ext - param, выставляется в настройках юзера
vm_message_ext - variable, выставляется в originating строке или в диалплане, заменяет собой vm-message-ext.

четверг, 24 декабря 2015 г.

Проверка качества звука в звонках

Есть готовые решения, типа
http://sevana.biz/

"Из коробки", но стоит денег.

PESQ, Perceptual Evaluation of Speech Quality, is a family of standards comprising a test methodology for automated assessment of the speech quality as experienced by a user of a telephony system. It is standardised as ITU-T recommendation P.862 (02/01). Today, PESQ is a worldwide applied industry standard for objective voice quality testing used by phone manufacturers, network equipment vendors and telecom operators. Its usage requires a license.
https://en.wikipedia.org/wiki/PESQ
Требует лицензии, но для тестов есть варианты на гитхабе. Помним, что лицензия всё-равно нужна. Пример
https://github.com/dennisguse/ITU-T_pesq

Также можно почитать
https://txlab.wordpress.com/2015/06/02/quality-assurance-for-voip-calls-2/

Если нужно просто оценинть пригодность каналов - можно взять 2 сервера с этим каналом посередине, заслать некий файл, захватывая rtp пакеты, и потом оценить, сколько потеряно, сколько побито. Метод совсем грубый и не подходит для анализа сервер-клиент, только если на сервере делать эхо, чтобы клиент мог проверить именно свой канал.

Более правильный метод - частотный анализ. Тот же PESQ или своя реализация. Тогда можно проверить уже поставщиков телефонии, даже с учётом перекодирований, E1 по пути и прочего, но это совсем другая сложность. Требуются исходный и конечный файлы.

Отдельно - звонок клиент-АТС-клиент, для частотного анализа тут просто нет 2 точек и если мало джиттера и потерь, снимаемых с rtp, начинается совсем магия, поиск характерных признаков - шипения, шумов, провалов...

Ну и остаётся субъективный анализ - звонок человеком.
Средняя экспертная оценка MOS (Mean Opinion Score) — это субъективное измерение, определенное в рекомендации P.800 МСЭ-Т для оценки качества передачи в телефонных сетях.
http://habrahabr.ru/post/177099/
ну и саму статью почитать стоит.

четверг, 5 ноября 2015 г.

проверяем и синхронизируем даты и время

После ntpdate pool.ntp.org обнаружили неприятную "особенность" - апи стало работать с новым временем, а FS - по прежнему использует старое. Впрочем, правится тоже несложно: из апи или консоли
fsctl sync_clock
или
fsctl sync_clock_when_idle

Для проверки можно использовать такой скрипт:
check-time.py

import freeswitch

import time

def fsapi(session, stream, env, args):

        t = str(int(time.time()*1000))
        print t
        freeswitch.consoleLog('info', 'timestamp: %s\n' % t)

        t = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
        print t
        freeswitch.consoleLog('info', 'sys date: \n%s\n' % t)

класть в скрипты, это может быть /etc/freeswitch/scripts или /usr/share/freeswitch/scripts

Теперь из fs_ctl вызываем:
freeswitch@192.168.10.202@internal> python check-time

и проверяем что даты перед и после sys date совпадают

При необходимости ставим и грузим mod_python

среда, 19 августа 2015 г.

freeswitch arrays

В доке сказано, что можно делать массив так:
Appending to an ARRAY with PUSH
<action application="push" data"myvar,test A"/>
<action application="push" data"myvar,test B"/>
<action application="push" data"myvar,test C"/>

По факту, формат такой
<action application="push" data"myvar=test A"/>

Получить потом можно так
<action application="log" data="INFO ${myvar}"/>
и выглядеть оно будет примерно так
ARRAY::test X|:test Y|:test Z|:test A|:test B|:test C

Можно указать конкретный элемент:
<action application="set" data="myvar[0]=Test A"/>

Вариант добавления в начало, не проверялось, но скорее всего так:
<action application="unshift" data="myvar=test X"/>
(в офдоке снова через запятую, что вероятно неверно)

Есть через regex, тоже не проверялось
<action application="set" data="num=2121231234"/>
<action application="capture" data="myvar|${num}|(\d{3})(\d{3})(\d{4})"/>

Получать через
${myvar}, пример вывода выше
${myvar[2]}

пятница, 14 августа 2015 г.

dtmf - типы передачи

Бывает in-bound и out-of-bound, то есть в голосовом потоке (можно услышать ушами) или прочие методы.
Коротко

  1. in-bound, inbound
  2. out-of-bound
    1. rfc 2833, rtp-nte
    2. sip info
    3. sip notify
Подробнее