Документация по ОС FreeBSD Суббота, 08.02.2025, 14:00
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

app_meetme VS app_conference для Asterisk под FreeBSD [2009]

Появилась задача, организовать конференции в Asterisk.

Все кажется просто, поправить два конфига и вуаля, но на деле все оказалось не просто.

Читаем инструкцию Asterisk cmd MeetMe. Пробуем, получаем облом. Не работает. Почему ? Расскажу как было у меня:

посмотрим, что у нас в подгруженных в Asterisk модулях, для этого зайдем в его CLI:

/usr/local/sbin/asterisk -r

и выполним команду show modules:

Asterisk 1.4.23.1, Copyright (C) 1999 - 2008 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘core show warranty’ for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type ‘core show license’ for details.
=========================================================================
Connected to Asterisk 1.4.23.1 currently running on core (pid = 13061)

aster*CLI> show modules

у себя я обнаружил, что модуля app_meetme.so в списке нету….

можно выполнить и более предметную команду:

aster*CLI> module show like app_meetme

а в логах честно об этом написано:

pbx_extension_helper: No application ‘MeetMe’

Начинаем гуглить и копать. Выясняется, что для того, чтобы был этот модуль нужно собрать zaptel

Ну чтож… идем в порт asterisk`а, делаем:

  1. cd /usr/ports/net/asterisk
  2. make rmconfig
  3. make

выбираем в списке zaptel и после мейка делаем:

make install

в /usr/local/etc/rc.d появляется файл zaptel:

/usr/local/etc/rc.d/zaptel

дописываем в /etc/rc.conf:

zaptel_enable=”YES”

запускаем:

/usr/local/etc/rc.d/zaptel start

после этого проверяем наличие загруженных модулей zaptel.ko и ztdummy.ko:

/sbin/kldstat

Id Refs Address Size Name
………………
3    5 0xc4fb9000 32000    zaptel.ko
…………………
14 1 0xc62a2000 2000 ztdummy.ko

если не подгрузилось, то они лежат тут: /usr/local/lib/zaptel, подгрузите их руками.

проверяем, что в /usr/local/lib/asterisk/modules появился app_meetme.so.

открываем файл /usr/local/etc/asterisk/modules.conf и добавляем:

load => app_meetme.so

открываем /usr/local/etc/asterisk/meetme.conf и добавляем конференцию:

conf => 501

открываем /usr/local/etc/asterisk/extensions.conf и добавляем экстенш для того, что бы попадать в эту конференцию:

exten => 501,1,MeetMe(501)

т.е. при звонке на внутренний номер 501 мы должны попадать в конференцию с номером 501.

да, замечу, что номер exten и номер конференции могут не совпадать.

Ну чтож, вроде все хорошо и здорово, перезапускаем asterisk:

/usr/local/etc/rc.d/asterisk restart

звоним на номер 501 и слышим: “В настоящий момент вы единственный в этой конференции” и трубка вешается (происходит Hangup)

как говориться “приехали”…..

смотрим в логи и видим:

app_meetme.c:800 build_conf: Unable to open pseudo device

начинаем гуглить и толком ничего не находим. Кто-то так и не смог решить проблему, кто-то ремил куски кода в исходках.

Что бы мы не делали, тока менялись ошибки:

app_meetme.c:1022 conf_run: Unable to set flags: Inappropriate ioctl for device

или

app_meetme.c:1756 conf_run: Unable to set buffering information: Bad file descriptor

или

app_meetme.c:1777 conf_run: Error getting conference

или

app_meetme.c: Unable to set flags: Inappropriate ioctl for device

Вот последнее что удалось добиться:

WARNING[4670] app_meetme.c: Unable to set flags: Inappropriate ioctl for device
WARNING[4670] app_meetme.c: Unable to set buffering information: Bad file descriptor
WARNING[4670] app_meetme.c: Unable to set linear mode: Bad file descriptor
WARNING[4670] app_meetme.c: Error getting conference
WARNING[4670] app_meetme.c: Error setting conference
WARNING[4670] app_meetme.c: Error flushing channel
WARNING[4670] app_meetme.c: Failed to read frame: Bad file descriptor

конференция так и не заработала…

Изрядно подустав от этого дела, мы обнаружили что существует альтернатива для app_meetme.so и это app_conference.so.

Читаем Asterisk cmd Conference

Приступаем к инсталлу:

  1. cd /usr/ports/net/asterisk
  2. make extract
  3. cd work/asterisk-1.4.23.1
  4. fetch http://dfn.dl.sourceforge.net/sourceforge/appconference/appconference-2.0.1.tar.gz
  5. tar -zxf appconference-2.0.1.tar.gz
  6. Правим Makefile, вот diff:
    --- Makefile 2008-02-26 19:05:57.000000000 +0300
    +++ Makefile.new 2009-02-10 21:03:09.000000000 +0300
    @@ -18,9 +18,9 @@
    #
    
    INSTALL_PREFIX :=
    -INSTALL_MODULES_DIR := $(INSTALL_PREFIX)/usr/lib/asterisk/modules
    +INSTALL_MODULES_DIR := $(INSTALL_PREFIX)/usr/local/lib/asterisk/modules
    
    -ASTERISK_INCLUDE_DIR ?= ../asterisk/include
    +ASTERISK_INCLUDE_DIR ?= /usr/local/include
    
    REVISION = $(shell svnversion -n .)
  7. cd appconference-2.0.1
  8. gmake install

убеждаемся что файл app_conference.so появился в /usr/local/lib/asterisk/modules/

открываем файл /usr/local/etc/asterisk/modules.conf и добавляем:

load => app_conference

открываем /usr/local/etc/asterisk/extensions.conf и добавляем экстенш для того, что бы попадать в конференцию:

exten => 502,1,Conference(502)

перегружаем asterisk и убеждаемся что модуль подгружен:

aster*CLI> module show like app_conference

Module Description Use Count
app_conference.so Channel Independent Conference Applicati 0
1 modules loaded

Основное отличие app_meetme.so и это app_conference.so в том что app_conference.so создает конференцию налету (on the fly) и не требует наличия zaptel.

Экстеншеном 502 мы попадаем в автоматом созданную конференцию 502.

И все РАБОТАЕТ !

Но app_conference.so не полный аналог app_meetme.so. Например не поставить PIN на вход или так же просто записать разговор в конференции. Эти вопросы можно решить с помощью самого asterisk ;)

о PIN: Asterisk cmd Conference в разделе ” Setting up conferences”.

запись разговора в конференции: Asterisk cmd Monitor

пример записи конференции, extensions.conf :

exten => 502,1,Answer
exten => 502,2,Wait(1)
exten => 502,3,Monitor(wav,myfilename)
exten => 502,4,Conference(502,ps)

Записанные файлы myfilename-in.wav и myfilename-out.wav будут лежать в /var/spool/asterisk/monitor/

Удачных вам конференций !



Источник: http://subnets.ru/blog/?p=803
Категория: Net | Добавил: oleg (13.02.2009)
Просмотров: 872 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2025