суббота, 7 ноября 2009 г.

FreeSWITCH, сервис эха.

Обычно эхо делается так:

  • приветствуем

  • бибикаем

  • портим текст записываем в файл

  • бибикаем

  • проигрываем файл

  • откладываем скрипку прощаемся



Во FreeSWITCH есть более изящный вариант - приложение delay_echo. Единственный параметр это длительность задержки (буфера) перед воспроизведением звука обратно. Буфер размещается в памяти, диск не дергается, система не упирается в диск, но любит память. По моему восхитительно, учитывая еще и необходимость файлы стирать.


 1     <extension name="delay_echo">
 2       <condition field="destination_number" expression="^echo123$">
 3         <action application="answer"/>
 4         <action application="sleep" data="1000"/>
 5         <action application="playback" data="/opt/freeswitch/sounds/ru/RU/elena/voicemail/8000/vm-greeting.wav"/>
 6         <action application="playback" data="/opt/freeswitch/sounds/ru/RU/elena/voicemail/8000/vm-record_message.wav"/>
 7         <action application="sleep" data="1000"/>
 8         <action application="gentones" data="%(200,0,800)"/>
 9         <!--action application="sched_broadcast" data="+10 gentones::%(200,0,800)"/-->
10         <action application="sched_transfer" data="+20 after_echo XML public"/>
11         <action application="delay_echo" data="10000"/>
12       </condition>
13     </extension>
14
15     <extension name="delay_echo_next">
16       <condition field="destination_number" expression="after_echo">
17         <action application="sleep" data="1000"/>
18         <action application="playback" data="/opt/freeswitch/sounds/ru/RU/elena/voicemail/8000/vm-goodbye.wav"/>
19         <action application="sleep" data="1000"/>
20         <action application="hangup"/>
21       </condition>
22     </extension>
23

среда, 28 октября 2009 г.

Регистратор SIP на twisted.

Питонисты в курсе, что есть такая чудо библиотека для работы с сетевыми протоколами как Twisted. Она немного сложна поначалу, но после просветления становится совершенно необходимым инструментом.
В стандартной поставке с ней идет множество уже реализованных протоколов - IMAP, XMPP, HTTP (в сочетании с обработкой URL через джанго и какой-нибудь библиотекой шаблонов весьма полезный инструмент) и т.д. Количество же протоколов, которые реализованы на/для Twisted не поддается подсчету. Таким образом Tornado может спать спокойно - сравнивать его с Twisted вообще некорректно.

Среди стандартных протоколов нашел SIP - последний раз обновлялся 3 года назад, есть проект VoIP телефона shtoom, который также заглох. Но тем не менее вот вам регистратор на Twisted:

#!/usr/bin/env python
# coding: utf-8

from twisted.application import internet, service

import sip

DOMAIN='192.168.9.5'

application = service.Application("JuzzCallBack")

sip.RegisterProxy.registry = sip.InMemoryRegistry(DOMAIN)
sip.RegisterProxy.locator = sip.RegisterProxy.registry
sip.RegisterProxy.debug = True
proxy = internet.UDPServer(5060,sip.RegisterProxy())

proxy.setServiceParent(application)

И что удивительнее всего - он работает. На досуге хочется попробовать сделать простейший SIP-телефон, будет интересно. Назову его Shtoom ressurection, он не будет обладать даже функциями предшественника, и сдохнет на версии -0.1, ожидайте!

среда, 14 октября 2009 г.

HighLoad 2009

Из прослушки в онлайне интересующих меня секций вывел основной Highload тренд - все быстро в асинхронность! Twisted как бы уже давно и прочно занял свою нишу, особенно в свете comet/longpoll технологий.

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

среда, 6 мая 2009 г.

FreeSWITCH, mod_opal

В блоге VoIP написали о mod_opal. А почему я вообще стараюсь не упоминать об этом модуле, как о прорыве в мир H323? Да потому, что мне кажется этот модуль плохо вливается в инфраструктуру FreeSWITCH.

Самый главный минус модуля - RTP обрабатывается через Opal, то есть не используется RTP стек самого FreeSWITCH. Это в свою очередь означает, что кодеки надо делать под оба стека.

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

Ну и любой программист вам сразу скажет, что это ужасно поддерживается в разработке - два(!!!) RTP стека это двойная работа по отлову багов, разработке расширений и тому подобное. И нет никаких преимуществ от того, что глюками Opal занимаются его разработчики - ошибки в Opal также будут искать и в сообществе FreeSWITCH, причем гораздо активнее, чем в каких либо еще сообществах.

Поэтому я не рассматриваю mod_opal как подходящий вариант ставящий точку в вопросе поддержки H323 в FreeSWITCH.

суббота, 25 апреля 2009 г.

Python, plasma, KDE 4.2

Бороздил интернет в поисках упоминания меня и наткнулся на интересную запись - http://neithere.livejournal.com/419237.html
Понял почему не работали мои плазмоиды (недосуг было с ними разбираться). Дело было в одной маленькой строчке которую надо добавить в metadata.desktop:

X-Plasma-MainScript=code/main.py

Полезно почитать про себя любимого.

четверг, 23 апреля 2009 г.

Здравствуй, хозяин!

Первым дистрибутивом Linux, в котором я смог нормально начать работать, был Slackware. Произошло это потому, что он не обманывал меня всякими мастерами, в отличие от Mandrake. Так вот очень мне запомнились сообщения программы Fortune, которая выводит изречения, цитаты и прочее текстовое, что обладает достаточно малым размером.

А есть так же программа "cowsay", которая выводит в псевдографике персонажа с текстом как в комиксах. В частности изначально это была корова, но в моем дистрибутиве персонажей много. В общем я совместил Fortune и Cowsay, что не сильно то ново. Но главное я написал маленький скрипт, чтобы персонаж также выбирался случайным образом.

Итого:

kuku@kuku$ fortune | cowsay -f `python ~/rand_cow.py`
kuku@kuku$ cat rand_cow.py
import os
import random
# Хмм, а краткость то сестра криптографов...
print random.choice([i[:-4] for i in os.listdir("/usr/share/cowsay/cows/")])

вторник, 21 апреля 2009 г.

Новый вариант G729 для FreeSWITCH

В прошлый раз мне в комментариях подкинули исходники g729 для Asterisk с использованием библиотеки от ITU-T. С тех пор я и планировал переписать mod_g729 на его использование. Это может быть полезным если вы не используется x86 архитектуру, или вам влом качать 300 Мб с сайта Intel, или, в конце концов, вы один из тех, кто уже третью ночь воюет с адски непрофессионально написанным Makefile.
Одним слово я собрался все таки и написал. Как вы понимаете, когда за дело берется администратор, а не программист, ваши риски серьезно увеличиваются. Так что берем, компилируем, ищем баги и тп. А я пойду уже спать, до побудки оставалось 4-е часа...

http://github.com/Deepwalker/fs_itu_g729/tree/master