Приложение ConfBridge
Обзор возможностей.
С самого начала своего существования в Asterisk для организации конференций предлагалось использовать приложение MeetMe (модуль app_meetme.so). Это приложение предоставляет возможность программного смешивания нескольких звуковых потоков для организации многопользовательской конференц связи на основе интерфейса DAHDI. Конференция MeetMe используется почти во всех задачах на основе сервера Asterisk – решения для небольшого офиса, call центры, в решениях для среднего и больших офисов, в решениях сторонних разработчиков и т.д. Оно довольно успешно работало, когда требовалось смешивание голосовых потоков с различных источников.
Со временем, пользователи стали сталкиваться с некоторыми существенными ограничениями, которые накладывало приложение MeetMe. Среди них выделяются два: приложению MeetMe требуется наличие драйвера и модуля DAHDI в системе, для смешивания звуковых каналов. Таким образом, частота дискретизации звукового сигнала ограничивается на уровне в 8 кГц. Также само приложение MeetMe довольно статично в плане управления, и не обеспечивает широкие возможности по его конфигурации.
Чтобы избавиться от этих ограничений , в Asterisk 10 появилось новое приложение для организации конференц связи , которое базируется на приложении ConfBridge, которое впервые появилось в Asterisk начиная с версии 1.6.0. Новое приложение ConfBridge заменяет собой старую версию этого приложения. Оно не разрабатывалось, как прямая замена приложению конференц связи MeetMe. Вместо этого, новое приложение ConfBridge обеспечивает полностью переработанный функционал, что, вероятно, большинство пользователей найдут более удобным для себя в части организации конференц связи.
Концепция работы приложения ConfBridge.
Приложение ConfBridge имеет четыре внутренние концепции:
- Номер конференции (Conference Number)
- Профиль конференции (Bridge Profile)
- Профиль пользователя (User Profile)
- Меню конференции (Conference Menu)
Номер конференции - это числовое представление отдельной “комнаты” в конференции. Абоненты, входящие в конференцию с одинаковым номером, попадают в одну и ту же конференцию и соединяются между собой. Абоненты, которые входят в конференцию с различными номерами, находятся в разных конференциях и не могут разговаривать друг с другом. Номер конференции устанавливается в плане набора. В отличие от приложения MeetMe оно не указывается явно в качестве аргумента.
Профиль конференции - это именованный набор параметров, которые управляют поведением конкретной “комнаты” конференции. Каждая комната конференции должна иметь свой собственный профиль. Одна комната не может иметь более одного профиля конференции.
Профиль пользователя - это именованный набор параметров, которые контролируют работу и права пользователей как члена определенной “комнаты” конференции. Каждый пользователь, участвующих в конференции может иметь свой индивидуальный профиль.
Меню конференции - это именованный набор параметров,
которые предоставляют пользователю конференции выполнить какие-либо действия с помощью DTMF. Каждый пользователь, участвующих в конференции может иметь свои индивидуальные меню.
Конфигурация ConfBridge.
Профили и меню приложения ConfBridge описываются в файле конфигурации confbridge.conf, который обычно находиться в: /etc/asterisk/confbridge.conf.
Файл содержит три разделов с зарезервированными именами:
- [general]
- [default_bridge]
- [default_user]
Секция [general] на данный момент не используется, но зарезервирована на будущее.
Секция [default_bridge] содержит настройки для профиля конференции по умолчанию, для случая, если пользователь попадает в конференцию ConfBridge из плана набора, в котором не был установлен профиль конференции.
Секция [default_user] содержит настройки для профиля пользователя по умолчанию, для случая, если пользователь попадает в конференцию ConfBridge из плана набора, в котором не был установлен профиль пользователя.
Каждая секция содержит параметр type. Он определяет функцию раздела.
Параметр types может принимать три различных значения:
- bridge
- user
- menu
bridge: используется, если в секции описываются параметры Профиля Конференции.
user: используется, если в секции описываются параметры Профиля Пользователя.
menu: используется, если в секции описываются параметры Меню Конференции.
Все остальные секции, определенные как имя секции заключенное в квадратные скобки, описывают пользовательские профили или меню.
Пример
Это пример демонстрирует только организацию файла конфигурации, в нем используются недопустимые параметры и функции файла конфигурации confbridge.conf. Различные параметры и функции описываются далее в соответствующих разделах.[general] ; comments are preceded by a comma ; ; эта секция пока пустая ; [default_bridge] type=bridge ; Далее идут параметры профиля конференции myoption=value myoption2=othervalue ; [default_user] type=user ; Далее идут параметры профиля пользователя myoption=value myoption2=othervalue ; [sample_menu] type=menu ; Далее идут параметры меню конференции DTMF=function otherDTMF=otherFunction ;
Параметры для настройки Профиля конференции
Для настройки профиля конференции используются следующие параметры конфигурации:
Параметр | Значение | Описание |
---|---|---|
type | bridge | Указывает, что в данной секции описывается конфигурация профиля конференции. |
max_members | число, например: 50 | Ограничивает количество участников одной конференции указанным числом. По умолчанию, у конференции нет ограничения на число участников. После того, как лимит будет превышен, конференция будет заблокирована, пока кто-то ее не покинет. Пользователи с уровнем Администратора, освобождаются от этого ограничения и по-прежнему смогут присоединиться к конференции. |
record_conference | yes/no | Включает запись конференции, начиная с момента, когда первый пользователь входит в нее, и заканчивается, когда последний пользователь вышел из комнаты конференции. По умолчанию, запись производиться в файл с именем: "confbridge-<имя конференции >- |
record_file | путь, например: /tmp/myfiles | Если параметр ‘record_conference’ установлен в ‘yes’, данным параметром можно явно указать имя файла, для записи конференции. Стоит отметить, что поскольку несколько конференций могут использовать один и тот же профиль конференции, то использование этой возможности может вызвать проблемы. Рекомендуется использовать этот параметр только при создании динамического профиля конференции из плана набора функцией CONFBRIDGE(). Это позволит выбрать уникальное имя для записи конкретной «комнаты” конференции. По умолчанию, файлы с записью конференции создаются в директории asterisk/spool сервера Asterisk , с уникальным именем, начинающегося с префикса "confbridge". |
internal_sample_rate | auto, 8000, 12000, 16000, 24000, 32000, 44100, 48000, 96000, 192000 | Параметр устанавливает внутреннюю частоту дискретизации для смешивания звуковых потоков в конференции. Значение "Авто" позволяет серверу Asterisk самостоятельно выбирать частоту дискретизации для обеспечения лучшего соотношения качество/производительность в зависимости от данных звуковых потоков участников конференции. Числовое значение этого параметра фиксирует частоту дискретизации на указанном значении. Если указано значение частоты дискретизации, которое не поддерживается, то будет выбрано ближайшее значение, которое поддерживается в Asterisk. |
mixing_interval | 10, 20, 40, 80 | Установка, в миллисекундах, определяющая внутреннюю нарезку звуковых потоков на семплы для их смешивания. По умолчанию, продолжительность семплов, которые будут смешиваться для получения исходящего звукового потока равен: 20ms. Этот параметр влияет на то на сколько "жестким" или "свободным" будет смикшированный сигнал конференции. Меньшие интервалы обеспечивают более "жесткий" звук с меньшей задержкой в конференции, но требуют больше ресурсов системы. Высокие значения создают более "свободный" звук с большими задержками, но требуют меньше ресурсов системы. |
video_mode | none, follow_talker, last_marked, first_marked | Настройка способа распределения видео (в отличие от аудио) между участниками конференции. Участники видеоконференции должны использовать одинаковый видео кодек. Confbridge не предоставляет функциональность MCU сервера. Он не производит перекодирование между видеокодеками, на масштабирует видео и не производит никаких иных действий с видеосигналом. Значение "none" указывает, что нет источника видеосигнала по умолчанию, который увидят участники конференции, и источник видеосигнала будет выбран позже посредством AMI или DTMF меню. Значение "follow_talker" переключает видеосигнал на говорящего в данный момент участника конференции. Значение "last_marked," выбирает последнего вошедшего в конференцию пользователя, с которого есть видеосигнал и который отмечен как “marked user” в качестве единственного источника видео для всех участников конференции. Когда данный пользователь покидает конференцию, предыдущий “marked user”, с которого поступает видеосигнал, становиться источником видео для всех участников конференции. Значение "first-marked" выбирает первого вошедшего в конференцию пользователя, с которого есть видеосигнал и который отмечен как “marked user” в качестве единственного источника видео для всех участников конференции. Если данный участник выходит из конференции, то следующий пользователь, отмеченный как “marked user” становиться источником видеосигнала всех участников конференции. Использование видео в сочетании с использованием jitterbuffer для звука может приводить к рассинхронизации изображения и звука, т.к. jitterbuffer работает только для звукового потока. Следовательно, следует отключать Jitterbuffer при использовании видео в конференции. |
sound_join | filename | Звуковой файл, который будет проигран всем участникам конференции, когда кто-либо входит в конференцию, обычно, это короткий звуковой сигнал. |
sound_leave | filename | Звуковой файл, который будет проигран всем участникам конференции, когда кто-либо покидает конференцию, обычно, это так же короткий звуковой сигнал. |
sound_has_joined | filename | Звуковой файл, который будет проигран всем участникам конференции при входе нового абонента в нее. Например: "xxxx входит в конференцию." |
sound_has_left | filename | Звуковой файл, который будет проигран всем участникам конференции, когда кто-либо покидает ее. Например: "xxxx покидает конференцию." |
sound_kicked | filename | Звуковой файл, который будет проигран всем участникам конференции, когда кого-либо удаляют из конференции. |
sound_muted | filename | Звуковой файл, который будет проигран участнику конференции, когда у него отключается микрофон (mute). |
sound_unmuted | filename | Звуковой файл, который будет проигран участнику конференции, когда у него включается микрофон (unmute). |
sound_only_person | filename | Звуковой файл, который будет проигран участнику конференции, если он единственный участник конференции. |
sound_only_one | filename | Звуковой файл, который будет проигран участнику конференции, если в конференции, помимо него, есть только один участник. |
sound_there_are | filename | Звуковой файл, проигрываемый при анонсе числа участников в конференции. |
sound_other_in_party | filename | Используется в связке с параметром “sound_there_are”, как вторая часть предложения "sound_there_are" <кол-во участников> "sound_other_in_party" |
sound_place_into_conference | filename | Звуковой файл, который проигрывается, когда кто-либо заходит в конференцию после того как туда зашел отмеченный (marked) пользователь. |
sound_wait_for_leader | filename | Звуковой файл, который проигрывается, когда кто-либо заходит в конференцию, но конференция не может быть начата до входа ведущего конференции (marked user). |
sound_leader_has_left | filename | Звуковой файл, который проигрывается, когда ведущий конференции (marked user) покидает ее. |
sound_get_pin | filename | Звуковой файл, который проигрывается в качестве приглашения для ввода PIN кода для входа в конференцию. |
sound_invalid_pin | filename | Звуковой файл, который проигрывается, когда пользователь несколько раз ввел неправильный PIN код конференции (3 раза). |
sound_locked | filename | Звуковой файл, который проигрывается пользователю при попытке войти в заблокированную конференцию. |
sound_locked_now | filename | Звуковой файл, который проигрывается пользователям с правами Администратора конференции, после блокирования входа в конференцию. |
sound_unlocked_now | filename | Звуковой файл, который проигрывается пользователям с правами Администратора конференции, после разблокирования входа в конференцию. |
sound_error_menu | filename | Звуковой файл, который проигрывается пользователю при выборе неправильного пункта меню. |
Пример
В данном примере создается профиль конференции с именем "fancybridge. Для профиля этой конференции устанавливается лимит в 20 пользователей, продолжительность семплов для смешивания звукового потока устанавливается в 10ms и внутренняя частота дискретизации выбирается автоматически.Дополнительно, эта конференция будет записываться.
[fancybridge] type=bridge max_members=20 mixing_interval=10 internal_sample_rate=auto record_conference=yes
Параметры для настройки Профиля Пользователя.
Для настройки профиля пользователя используются следующие параметры конфигурации:
Параметр | Значение | Описание |
---|---|---|
type | user | Указывает, что в данной секции описывается конфигурация профиля пользователя. |
admin | yes/no | Устанавливает, является ли пользователь администратором конференции или нет. По умолчанию: no. |
marked | yes/no | Устанавливает, является ли пользователь ведущим конференции (Marked) или нет. По умолчанию: no. |
startmuted | yes/no | Устанавливает, должен ли пользователь входить в конференцию с выключенным микрофоном (muted) или нет. По умолчанию: no. |
music_on_hold_when_empty | yes/no | Устанавливает, будет ли проигрываться музыка (music on hold), когда в конференции только один пользователь или когда пользователь ожидает входа в конференцию ведущего (marked user). По умолчанию: выключено. |
music_on_hold_class | music on hold class | Устанавливает имя класса для музыки ожидания (music on hold). |
quiet | yes/no | Если установлено в "yes," то сообщения участникам о входе или выходе пользователя конференции и приветствия самому пользователю входящему в конференцию проигрываться не будут. По умолчанию: no. |
announce_user_count | yes/no | Устанавливает, будет ли проигрываться анонс числа участников конференции входящему в конференцию пользователю. По умолчанию: no. |
announce_user_count_all | yes/no; или число | Устанавливает, будет ли проигрываться анонс числа участников конференции всем ее участникам, когда новый пользователь входит в нее. Если аргументом является число, то анонс будет производиться если число участников конференции превышает указанное значение. |
announce_only_user | yes/no | Устанавливает, будет ли проигрываться анонс о пустой конференции, когда пользователь первый входит в конференцию. По умолчанию: yes. |
wait_marked | yes/no | Устанавливает, должен ли пользователь ожидать входа пользователя, который отмечен как ведущий конференции (marked user), перед тем как войти в конференцию. По умолчанию: no. |
end_marked | yes/no | Если включено, все пользователи с данным профилем будут удалены из конференции, когда все пользователи отмеченные, как ведущие конференции покинут ее. |
dsp_drop_silence | yes/no | Указывает серверу Asterisk детектировать тишину и не позволяет звуковым данным, которые определяются как тишина, попадать в конференцию. Включение этой опции может резко повысить производительность и помогает в удалении фоновых шумов из конференции. Эта опция рекомендуется для крупных конференций, в связи с повышением производительности. |
dsp_talking_threshold | число в миллисекундах | Время в миллисекундах, по умолчанию: 160, продолжительности звука, которое DSP анализирует на наличие разговора пользователя, перед тем, как пользователь будет считаться ”говорящим”, если до этого для него сработал детектор тишины. Это значение влияет на некоторые другие параметры: 1. Звуковой поток от пользователя будет смешиваться в исходящий из конференции суммарный звуковой поток, только если обнаружено, что пользователь начал говорить. Если значение этого параметра слишком большое, то пользователь будет слышать себя в конференции с ”обрезанным” началом предложения, каждый раз, когда он начинает говорить, т.к. DSP требуется большее время на определение факта начала разговора пользователя. 2. Если включена отправка AMI событий при детектировании начала разговора пользователя, это значение определяет момент начала разговора пользователя конференции, что приводит к отправки события через AMI.Если значение этого параметра слишком мало, возможно появление ложных событий AMI, например, из-за фоновых шумов поступающих от пользователя конференции. 3. Параметр “drop_silence” зависит от данного значения, на его основе определяется, когда нужно включать звуковой поток пользователя в конференцию, после периода тишины. Если значение этого параметра слишком большое, то будет обрезаться начало первого слова, при переходе пользователя из состояния тишины в состояние разговора. |
dsp_silence_threshold | число в миллисекундах | Время в миллисекундах, по умолчанию: 2500, продолжительности звука, которое DSP анализирует на наличие тишины, перед тем как для пользователя будет установлено состояние молчания (тишины). Самый лучший способ в подборе значения этого параметра – это установить его чуть большим, чем пауза, которую пользователи делают в естественной речи, когда они заканчивают свою фразу в диалоге. Это значение влияет на некоторые другие параметры: 1. Если включена отправка AMI событий при детектировании начала разговора пользователя, данное значение определяет, когда пользователь закончил свою фразу и замолчал. Если значение этого параметра слишком маленькое, то возможно поступление ложных AMI событий об окончании разговора пользователя конференции, из-за естественных коротких пауз в середине предложения. 2. Параметр “drop_silence” зависит от данного значения, на его основе определяется, когда звуковой поток от пользователя нужно отключить от конференции, после того, как он закончил говорить. Если значение этого параметра установлено слишком малым, то говорящего абонента другие участники будут слышать с прерываниями. |
talk_detection_events | yes/no | Устанавливает, отправлять или нет события через интерфейс AMI с уведомления о том, когда пользователь конференции начинает и заканчивает говорить. По умолчанию: no. |
denoise | yes/no | Применять или нет фильтр шумоподавления для аудиопотока пользователя конференции перед его смешиванием. По умолчанию выключено. Включение этого шумоподавителя требует, чтобы codec_speex был собран и установлен. Не стоит путать этот параметр с опцией “drop_silence”. Шумоподавитель полезен, если от пользователя конференции поступает много фонового шума, так как он пытается удалить шум, сохраняя при этом речь. Этот параметр не влияет на удаление тишины из процесса смешивания звуковых потов в конференции и его работа ведет к небольшому падению производительности системы. |
jitterbuffer | yes/no | Применять или нет jitter буфер для аудиопотока пользователя конференции перед его смешиванием. Включение этой функции очень рекомендуется, но это вносит некоторую задержку в прохождении звукового сигнала в конференцию и повлечет за собой небольшое снижение производительности. Включение этого параметра приводит к неявному использованию функции плана набора JITTERBUFFER с адаптивным jitterбуфером по умолчанию. Для более тонкой настройки jitter буфера, выключите этот параметр и используйте функцию плана набора JITTERBUFFER для канала перед тем, как абоненты попадут в приложение ConfBridge. |
pin | число | Устанавливает PIN код для конференции, который пользователю необходимо набрать для доступа к ней. Пользователю будет проиграно приглашение с просьбой ввести PIN код. |
announce_join_leave | yes/no | Если включено, пользователю будет предложено представиться перед тем, как он войдет в конференцию. После того, как имя будет записано, оно будет использоваться в сообщениях о входе и выходе пользователя в конференцию. По умолчанию: no. |
dtmf_passthrough | yes/no | Должны или нет DTMF сигналы, принятые от пользователя проходить через конференцию к другим пользователям. По умолчанию: no. |
Пример
В данном примере создается профиль пользователя с именем "fancyuser", в котором включена музыка ожидания, анонс числа пользователей в конференции, анонс о входе и выходе пользователей, детектор тишины, шумоподавитель и установлен PIN код для конференции в значение 456.[fancyuser] type=user music_on_hold_when_empty=yes music_on_hold_class=default announce_user_count_all=yes announce_join_leave=yes dsp_drop_silence=yes denoise=yes pin=456
Параметры для настройки меню конференции.
Для настройки меню конференции используются следующие параметры конфигурации:
Параметр | Значение | Описание |
---|---|---|
type | menu | Указывает, что в данной секции описывается конфигурация меню конференции |
playback | (<имя звукового файла1>&< имя звукового файла 2>&...) | Воспроизведение пользователю аудио-файла или списка звуковых файлов, имена которых разделены символом ‘&', затем возвращает пользователя в конференцию. |
playback_and_continue | (<имя звукового файла 1>&< имя звукового файла 2>&...) | Воспроизведение пользователю аудио-файла или списка звуковых файлов, имена которых разделены символом ‘&', при этом продолжая ожидать ввода DTMF последовательности. Можно применять как голосовая помощь по пунктам меню. Обратите внимание, что при получении любого DTMF символа прерывает воспроизведение файлов. |
toggle_mute | Включение или выключение микрофона. Если у пользователю выключен микрофон, он не может общаться с другими пользователями конференции, но он по прежнему может слышать всех пользователей конференции. В режиме выключенного микрофона, DTMF команды по прежнему могут быть приняты и обработаны. | |
no_op | Задает пустое действие. Его единственная реальная задача – дать возможность зарезервировать последовательность в конфигурации для выхода из меню. | |
decrease_listening_volume | Уменьшение уровня громкости у абонента. Все что он слышит, будет звучать тише. | |
increase_listening_volume | Увеличение уровня громкости у абонента. Все что он слышит, будет звучать громче. | |
reset_listening_volume | Сброс уровня громкости у абонента в значение по умолчанию. | |
decrease_talking_volume | Уменьшение уровня громкости звука поступающего от абонента в конференцию. Все что он говорит, будет звучать тише у других участников конференции. | |
increase_talking_volume | Увеличение уровня громкости звука поступающего от абонента в конференцию. Все что он говорит, будет звучать громче у других участников конференции. | |
reset_talking_volume | Сброс уровня громкости звука поступающего от абонента в значение по умолчанию. | |
dialplan_exec | (context,exten,priority) | Позволяет выйти из конференции и выполнить команды плана набора. По окончанию выполнения команд пользователь будет возвращен обратно в конференцию. |
leave_conference | Позволяет пользователю покинуть конференцию и продолжить для него выполнение команд плана набора. | |
admin_kick_last | Позволяет администратору исключить последнего вошедшего пользователя из конференции. Эта команда работает только для тех пользователей, для которых установлен признак администратора конференции в профиле пользователя. | |
admin_toggle_conference_lock | Позволяет администратору закрыть или открыть доступ в конференцию. Когда конференция закрыта, только администраторы конференции могут в нее зайти. Если конференция открыта, то в нее может войти любой пользователь, пока не достигнуто ограничение на количество участников, заданное в параметре max_members профиля конференции. Эта команда работает только для тех пользователей, для которых установлен признак администратора конференции в профиле пользователя.. | |
set_as_single_video_src | Позволяет пользователю установить себя в качестве единственного источника видео для всех участников конференции. Это действие отменяет настройки в параметре video_mode. | |
release_as_single_video_src | Позволяет пользователю снять с себя обязанности источника видео для всех участников конференции. После снятия источника видео и/или, если video_mode установлено в значение "none," результатом выполнения этой команды будет возврат к видео режиму, который был установлен в профиле конференции. Если пользователь не был источником видеосигнала для конференции, то эта команда не производит ни каких действий. Также нет никаких гарантий, что при использовании этой команды пользователь в дальнейшем не станнит источником видеосигнала для конференции. |
Пример
В данном примере, мы создаем меню с именем "fancymenu." В этом меню мы будем использовать множество действий, которые были перечислены выше. Первое что мы делаем – это создаем голосовую подсказку по всем пунктам меню, если пользователь нажал кнопку *. Поскольку мы сделали это с помощью команды playback_and_continue, мы определим все остальные пункты меню как "подмножество" команды , которые начинаются с символа *. Например, *4, т.к. пользователь может сначала нажать звездочку *, потом прослушал голосовую подсказку и после этого уже нажать кнопку команды, например: 4, чтобы выполнить те действия, которые ему нужны. В дополнение к этому, мы продублировали команды с вариантом без звездочки *, т.к. пользователь мог уже сто раз слышать это меню и уже знает какую кнопку нажать, чтобы выполнить нужное действие.[fancymenu] type=menu *=playback_and_continue(conf-togglemute&press&digits/1&silence/1&conf-leave&press&digits/2& silence/1&add-a-caller&press&digits/3&silence/1& conf-decrease-talking&press&digits/4& silence/1&reset-talking&press&digits/5&silence/1&increase-talking&press&digits/6&silence/ 1&conf-decrease-listening&press&digits/7&silence/1& conf-reset-listening&press&digits/8&silence/1& conf-increase-listening&press&digits/9&silence/1&conf-exit-menu&press&digits/0) *1=toggle_mute 1=toggle_mute *2=leave_conference 2=leave_conference *3=dialplan_exec(addcallers,1,1) 3=dialplan_exec(addcallers,1,1) *4=decrease_listening_volume 4=decrease_listening_volume *5=reset_listening_volume 5=reset_listening_volume *6=increase_listening_volume 6=increase_listening_volume *7=decrease_talking_volume 7=decrease_talking_volume *8=reset_talking_volume 8=reset_talking_volume *9=increase_talking_volume 9=increase_talking_volume *0=no_op 0=no_op
Особое внимание в этом примере стоит уделить использованию параметра меню dialplan_exe. В этой команде мы указали "addcaller,1,1" в качестве аргумента. Это означает, что если кто-либо нажмет кнопку 3, то Asterisk ненадолго выведет его из конференции для того, чтобы выполнить команду плана набора с приоритетом 1 для экстеншена 1 в контексте addcaller (extensions.conf). Наш план набора, который включает контекст addcaller, может выглядеть примерно так:
[addcaller] exten => 1,1,Originate(SIP/otherpeer,exten,conferences,100,1) [conferences] exten => 100,1,ConfBridge(1234)
Таким образом, когда кто-то набирает "3" находясь в конференции, он будут инициировать вызов из плана набора, который поместит абонента “SIP/otherpeer” в конференцию. Как только вызов будет завершен, тот, кто набрал "3", снова окажется в конференции.
Синтаксис использования приложения ConfBridge в плане набора
Синтаксис вызова нового приложения ConfBridge выглядит следующим образом:
ConfBridge([confno][,bridge_profile[,user_profile[,menu]]])
В приложении ConfBridge используются следующие аргументы:
- confno – номер конференции.
- bridge_profile – Имя профиля конференции, описанного в файле конфигурации confbridge.conf. Если аргумент не указан, будет использован динамический профиль конференции, созданный для данного канала функцией плана набора CONFBRIDGE. Если динамический профиль конференции не был создан, то будет использоваться профиль с именем 'default_bridge' из файла конфигурации confbridge.conf.
- user_profile - Имя профиля пользователя, описанного в файле конфигурации confbridge.conf. Если аргумент не указан, будет использован динамический профиль пользователя, созданный для данного канала функцией плана набора CONFBRIDGE. Если динамический профиль пользователя не был создан, то будет использоваться профиль с именем 'default_user' описанный в файле конфигурации confbridge.conf.
- menu - Имя DTMF меню, описанного в файле конфигурации confbridge.conf, которое будет использоваться в конференции для данного канала. По умолчанию, если этот параметр опущен, в конференции не будет использоваться меню.
Пример 1
В этом примере, абоненты помещаются в в конференцию с номером 1234, используется профиль конференции и профиль пользователя по умолчанию, у конференции нет меню.exten => 1,1,Answer() exten => 1,n,ConfBridge(1234)
Пример 2
В данном пример, абонент будет присоеденен к конференции с номером 1234,с профилем конференции по умолчанию, с профилем пользователя под именем "1234_participants" и будет использоваться меню конференции с именем "1234_menu".exten => 1,1,Answer() exten => 1,n,ConfBridge(1234,,1234_participants,1234_menu)
Функция плана набора ConfBridge
Функция плана набора CONFBRIDGE используется для установки на текущем канале динамических параметров профиля пользователя или конференции для их последующего использования в приложении ConfBridge. Используются те же параметры, что и в файле конфигурации конференции confbridge.conf.Синтаксис
CONFBRIDGE(type,option)
- type - Тип профиля, параметры которого мы хотим установить. Тип профиля может быть или 'bridge' или 'user'.
- option - Параметр профиля, который мы хотим установить для текущего канала. Имена параметров идентичны используемым в файле конфигурации confbridge.conf. Данным параметром мы также можем указать на профиль пользователя или конференции с помощью аргумента "template". В данном случае, мы можем на лету изменять или добавлять параметры уже существующих профилей пользователя или конференции.
Пример 1
В этом примере создается пользовательский профиль пользователя для канала, в котором включен announce_join_leave (пользователям будет сообщаться о входе и выходе абонентов конференции), при входе в конференцию у пользователей будет выключен микрофон (их не будет слышно в конференции) и пользователь помещается в конференцию номер "1."exten => 1,1,Answer() exten => 1,n,Set(CONFBRIDGE(user,announce_join_leave)=yes) exten => 1,n,Set(CONFBRIDGE(user,startmuted)=yes) exten => 1,n,ConfBridge(1)
Пример 2
В этом примере мы будем использовать существующий профиль пользователя default_user, который определен в confbridge.comf. Мы установим дополнительные параметры (admin и marked), которые не были определены в профиле default_user.exten => 1,1,Answer() exten => 1,n,Set(CONFBRIDGE(user,template)=default_user) exten => 1,n,Set(CONFBRIDGE(user,admin)=yes) exten => 1,n,Set(CONFBRIDGE(user,marked)=yes) exten => 1,n,ConfBridge(1)
Функция плана набора CONFBRIDGE_INFO используется для получение информации о конференции, например, закрыт или открыт вход в нее или количество участников, включая администраторов и ведущих конференции.
Синтаксис
CONFBRIDGE_INFO(type,conf)
- type - Тип получаемой информации. Может быть: parties, admins, marked или locked.
- conf - Имя конференции, параметры которой необходимо получить.
Функция CONFBRIDGE_INFO возвращает положительное число, если имя конференции правильное (например, 0 или 1 для запроса параметра конференции 'locked') или "", если имя конференции неправильное или она не существует.
CLI команды для ConfBridge
ConfBridge предлагает несколько команд, которые могут быть вызваны из Asterisk CLI.
confbridge kick <conference> <channel>
Удаляет указанный канал из конференции, например:*CLI> confbridge kick 1111 SIP/mypeer-00000000 Kicking SIP/mypeer-00000000 from confbridge 1111
confbridge list
Показывает краткий список всех конференц-комнат, например:*CLI> confbridge list Conference Bridge Name Users Marked Locked? ================================ ====== ====== ======== 1111 1 0 unlocked
confbridge list <conference>
Показывает подробный список участников указанной конференции, например:*CLI> confbridge list 1111 Channel User Profile Bridge Profile Menu ============================= ================ ================ ================ SIP/mypeer-00000001 default_user 1111 sample_user_menu
confbridge lock <conference>
Закрывает вход в указанную конференцию, только администраторы конференции могут войти. Пример:*CLI> confbridge lock 1111 Conference 1111 is locked.
confbridge unlock <conference>
Открывает вход в указанную конференцию. Пример:*CLI> confbridge unlock 1111 Conference 1111 is unlocked.
confbridge mute <conference> <channel>
Выключение микрофона конкретного пользователя в указанной конференции, например:*CLI> confbridge mute 1111 SIP/mypeer-00000001 Muting SIP/mypeer-00000001 from confbridge 1111
confbridge unmute <conference> <channel>
Включает микрофон конкретного пользователя в указанной конференции, например:*CLI> confbridge unmute 1111 SIP/mypeer-00000001 Unmuting SIP/mypeer-00000001 from confbridge 1111
confbridge record start <conference> <file>
Включает запись конференции.Если указан аргумент "file", то для записи используется указанное имя файла, иначе используется имя из параметра record_file профиля конференции. Если в профиле конференции не указан параметр record_file, имя автоматически будет сгенерировано сервером Asterisk в директории “monitor”. Пример использования:*CLI> confbridge record start 1111 Recording started *CLI> == Begin MixMonitor Recording ConfBridgeRecorder/conf-1111-uid-618880445
confbridge record stop <confererence>
Останавливает запись указанной конференции, например:*CLI> confbridge record stop 1111 Recording stopped. *CLI> == MixMonitor close filestream (mixed) == End MixMonitor Recording ConfBridgeRecorder/conf-1111-uid-618880445
confbridge show menus
Выводит список меню конференций, которые определены в файле конфигурации confbridge.conf, пример:*CLI> confbridge show menus --------- Menus ----------- sample_admin_menu sample_user_menu
confbridge show menu <menu name>
Показывает подробный список меню конференций, например:*CLI> confbridge show menu sample_admin_menu Name: sample_admin_menu *9=increase_talking_volume *8=no_op *7=decrease_talking_volume *6=increase_listening_volume *4=decrease_listening_volume *3=admin_kick_last *2=admin_toggle_conference_lock *1=toggle_mute *=playback_and_continue(conf-adminmenu)
confbridge show profile bridges
Выводит список профилей конференций, которые определены в файле конфигурации confbridge.conf, пример:*CLI> confbridge show profile bridges --------- Bridge Profiles ----------- 1111 default_bridge
confbridge show profile bridge <bridge>
Показывает подробный список профилей конференций, например:*CLI> confbridge show profile bridge 1111 -------------------------------------------- Name: 1111 Internal Sample Rate: 16000 Mixing Interval: 10 Record Conference: no Record File: Auto Generated Max Members: No Limit sound_only_person: conf-onlyperson sound_has_joined: conf-hasjoin sound_has_left: conf-hasleft sound_kicked: conf-kicked sound_muted: conf-muted sound_unmuted: conf-unmuted sound_there_are: conf-thereare sound_other_in_party: conf-otherinparty sound_place_into_conference: conf-placeintoconf sound_wait_for_leader: conf-waitforleader sound_get_pin: conf-getpin sound_invalid_pin: conf-invalidpin sound_locked: conf-locked sound_unlocked_now: conf-unlockednow sound_lockednow: conf-lockednow sound_error_menu: conf-errormenu
confbridge show profile users
Выводит список профилей пользователей, которые определены в файле конфигурации confbridge.conf, пример:*CLI> confbridge show profile users --------- User Profiles ----------- awesomeusers default_user
confbirdge show profile user <user>
Показывает подробный список профилей пользователей, например:*CLI> confbridge show profile user default_user -------------------------------------------- Name: default_user Admin: false Marked User: false Start Muted: false MOH When Empty: enabled MOH Class: default Quiet: disabled Wait Marked: disabled END Marked: disabled Drop_silence: enabled Silence Threshold: 2500ms Talking Threshold: 160ms Denoise: disabled Talk Detect Events: disabled DTMF Pass Through: disabled PIN: None Announce User Count: enabled Announce join/leave: enabled Announce User Count all: enabled
ConfBridge команды для Asterisk Manager Interface (AMI)
ConfbridgeList
Список всех пользователей в конференции ConfBridge. Результат запроса ConfbridgeList приходит в виде отдельных событий, завершает его финальное событие с именем ConfbridgeListCompleteПример
Action: ConfbridgeList Conference: 1111 Response: Success EventList: start Message: Confbridge user list will follow Event: ConfbridgeList Conference: 1111 CallerIDNum: malcolm CallerIDName: malcolm Channel: SIP/malcolm-00000000 Admin: No MarkedUser: No Event: ConfbridgeListComplete EventList: Complete ListItems: 1
ConfbridgeListRooms
Список всех активных конференции . Результат запроса ConfbridgeListRooms приходит в виде отдельных событий, завершает его финальное событие с именем ConfbridgeListRoomsПример
Action: ConfbridgeListRooms Response: Success EventList: start Message: Confbridge conferences will follow Event: ConfbridgeListRooms Conference: 1111 Parties: 1 Marked: 0 Locked: No Event: ConfbridgeListRoomsComplete EventList: Complete ListItems: 1
ConfbridgeMute
Выключает микрофон указанного пользователя в конкретной конференции.Пример
Action: ConfbridgeMute Conference: 1111 Channel: SIP/mypeer-00000001 Response: Success Message: User muted
ConfbridgeUnmute
Включает микрофон указанного пользователя в конкретной конференции.Пример
Action: ConfbridgeUnmute Conference: 1111 Channel: SIP/mypeer-00000001 Response: Success Message: User unmuted
ConfbridgeKick
Удаляет указанного пользователя из конкретной конференции.Пример
Action: ConfbridgeKick Conference: 1111 Channel: SIP/mypeer-00000001 Response: Success Message: User kicked
ConfbridgeLock
Закрывает вход в указанную конференцию.Пример
Action: ConfbridgeLock Conference: 1111 Response: Success Message: Conference locked
ConfbridgeUnlock
Открывает вход в указанную конференцию.Пример
Action: ConfbridgeUnlock Conference: 1111 Response: Success Message: Conference unlocked
ConfbridgeStartRecord
Включает запись указанной конференции. Если конференция уже записывается, будет возвращено сообщение об ошибке. Если указан RecordFile, то для записи используется указанное имя файла, иначе используется имя из параметра record_file профиля конференции. Если в профиле конференции не указан параметр record_file, имя автоматически будет сгенерировано сервером Asterisk в директории “monitor”.Пример
Action: ConfbridgeStartRecord Conference: 1111 Response: Success Message: Conference Recording Started. Event: VarSet Privilege: dialplan,all Channel: ConfBridgeRecorder/conf-1111-uid-1653801660 Variable: MIXMONITOR_FILENAME Value: /var/spool/asterisk/monitor/confbridge-1111-1303309869.wav Uniqueid: 1303309869.6
ConfbridgeStopRecord
Останавливает запись указанной конференции.Пример
Action: ConfbridgeStopRecord Conference: 1111 Response: Success Message: Conference Recording Stopped. Event: Hangup Privilege: call,all Channel: ConfBridgeRecorder/conf-1111-uid-1653801660 Uniqueid: 1303309869.6 CallerIDNum: <unknown> CallerIDName: <unknown> Cause: 0 Cause-txt: Unknown
ConfbridgeSetSingleVideoSrc
Устанавливает указанного пользователя конференции в качестве единственного источника видео для всех остальных участников конференции, способных принимать видео.Пример
Action: ConfbridgeSetSingleVideoSrc Conference: 1111 Channel: SIP/mypeer-00000001 Response: Success Message: Conference single video source set.
ConfBridge события Asterisk Manager Interface (AMI)
ConfbridgeStart
Это событие будет отправлено, когда первый пользователь входит в конференцию и создается новая комната конференции.Пример
Event: ConfbridgeStart Privilege: call,all Conference: 1111
ConfbridgeJoin
Это событие будет отправлено, когда пользователь входит в конференцию, как в случае, если он входит в уже существующую конференцию, так и в случае, если создается новая комната конференции.Пример
Event: ConfbridgeJoin Privilege: call,all Channel: SIP/mypeer-00000001 Uniqueid: 1303309562.3 Conference: 1111 CallerIDnum: 1234 CallerIDname: mypeer
ConfbridgeLeave
Это событие будет отправлено, когда пользователь покидает конференцию.Пример
Event: ConfbridgeLeave Privilege: call,all Channel: SIP/mypeer-00000001 Uniqueid: 1303308745.0 Conference: 1111 CallerIDnum: 1234 CallerIDname: mypeer
ConfbridgeEnd
Это событие будет отправлено, когда последний пользователь покидает конференцию и конференц комната закрывается.Пример
Event: ConfbridgeEnd Privilege: call,all Conference: 1111
ConfbridgeTalking
Это событие отсылается, когда конференция определяет, что какой-либо пользователь начал говорить ли замолчал.Пример события начала разговора
Event: ConfbridgeTalking Privilege: call, all Channel: SIP/mypeer-00000001 Uniqueid: 1303308745.0 Conference: 1111 TalkingStatus: on
Пример события окончания разговора
Event: ConfbridgeTalking Privilege: call, all Channel: SIP/mypeer-00000001 Uniqueid: 1303308745.0 Conference: 1111 TalkingStatus: off
Звуковые приветствия.
Следующие звуковые файлы доступны для использования в качестве параметров для меню конференции и профиля конференции и входят в комплект дистрибутива Asterisk. В настоящее время поставляются файлы только на английском языке.
- confbridge-begin-glorious-a - "The conference will begin when our glorious leader arrives."
- confbridge-begin-glorious-b - "The conference will begin when our *glorious leader* arrives."
- confbridge-begin-glorious-c - "The conference will begin when our *glorious leader arrives.*"
- confbridge-conf-begin - "The conference will now begin."
- confbridge-conf-end - "The conference has ended."
- confbridge-dec-list-vol-in - "To decrease the audio volume from other participants..."
- confbridge-dec-list-vol-out - "...to decrease the audio volume from other participants."
- confbridge-dec-talk-vol-in - "To decrease your speaking volume to other participants..."
- confbridge-dec-talk-vol-out - "...to decrease your speaking volume to other participants."
- confbridge-has-joined - "...has joined the conference."
- confbridge-has-left - "...has left the conference."
- confbridge-inc-list-vol-in - "To increase the audio volume from other participants..."
- confbridge-inc-list-vol-out - "...to increase the audio volume from other participants."
- confbridge-inc-talk-vol-in - "To increase your speaking volume to other participants..."
- confbridge-inc-talk-vol-out - "...to increase your speaking volume to other participants."
- confbridge-invalid - "You have entered an invalid option."
- confbridge-leave-in - "To leave the conference..."
- confbridge-leave-out - "...to leave the conference."
- confbridge-lock-extended - "...to lock or unlock the conference. When a conference is locked, only conference administrators can join."
- confbridge-lock-in - "To lock or unlock the conference."
- confbridge-lock-no-join - "The conference is currently locked and cannot be joined."
- confbridge-lock-out 0- "...to lock or unlock the conference."
- confbridge-locked - "The conference is now locked."
- confbridge-menu-exit-in - "To exit the menu..."
- confbridge-menu-exit-out - "...to exit the menu."
- confbridge-mute-extended - "...to mute or unmute yourself. When you are muted, you cannot send audio to other participants; however you will still hear audio from other unmuted participants.
- confbridge-mute-in - "To mute or unmute yourself..."
- confbridge-mute-out - "...to mute or unmute yourself."
- confbridge-muted - "You are now muted."
- confbridge-only-one - "There is currently one other participant in the conference."
- confbridge-only-participant - "You are currently the only participant in the conference."
- confbridge-participants - "...participants in the conference."
- confbridge-pin-bad - "You have entered too many invalid personal identification numbers."
- confbridge-pin - "Please enter your personal identification number followed by the pound or hash key."
- confbridge-remove-last-in - "To remove the participant who most recently joined the conference..."
- confbridge-remove-last-out - "...to remove the participant who most recently joined the conference."
- confbridge-removed - "You have been removed from the conference."
- confbridge-rest-list-vol-in - "To reset the audio volume of the conference to the default level..."
- confbridge-rest-list-vol-out - "...to reset the audio volume of the conference to the default level."
- confbridge-rest-talk-vol-in - "To reset your speaking volume to the default level..."
- confbridge-rest-talk-vol-out - "...to reset your speaking volume to the default level."
- confbridge-there-are - "There are currently..."
- confbridge-unlocked - "The conference is now unlocked."
- confbridge-unmuted - "You are no longer muted."
Видеоконференции.
Крайне важно, чтобы в видеоконференции небыло участников, использующих разные видео кодеки или разные профили кодирования. Все участники *должны* использовать одинаковые кодеки и их профили. В противном случае, видео-сессии не будут работать – с высокой вероятностью у Вас будет останавливаться “замерзать” изображение, когда конференция будет переключаться с одного видео потока с кодеком, который Ваш клиент поддерживает и объявил в SDP, на видео потока с кодеком, который ваш клиент не согласовал в SDP или не поддерживает.Клиенты с поддержкой Video
ConfBridge был протестирован некоторых SIP клиентах с поддержкой видео. Успешное применение может варьироваться для разных случаев.Видео клиенты, которые заработали:
- Jitsi - Jitsi нормально работал с видео кодеками H.264 и H.263+1998, на Mac, Linux и Windows машинах. В настоящее время, Jitsi кажется лучший рабочий и свободный вариант H.264-совместимого SIP видео клиента.
- Linphone - Linphone нормально работал с видео кодеками H.263+1998 и H.263 на Linux, Mac и мобильная версия не поддерживают видео. В настоящее время, Linphone тоже довольно неплохой рабочий и свободный вариант H.263- совместимого SIP видео клиента, после Jitsi.
- Empathy - Empathy работал с использованием кодека H.264, но его наудивление трудно настроить (почему нужно сделать два SIP аккаунта, чтобы просто сделать вызов через SIP – остается загадкой).
- Lifesize - Lifesize клиент поддерживает H.264 и работает только на Windows. Он работает очень не плохо, но не является бесплатным клиентом.
- Polycom VVX 1500 - The Polycom VVX 1500 нормально работал с кодеком H.264. Если вы подключаете его к клиенту Jitsi, вы можете настроить Jitsi для использования базового профиля H.264 вместо основного.
Видео клиенты, которые не тестировались или работали не всегда:
- Xlite - Xlite работает в некоторых случаях, но падает в некоторых случаях, вне зависимости от используемой операционной системы. В некоторых случаях, Xlite не может декодировать видео получаемого от других клиентов.
- Ekiga - Ekiga не был проверен, т.к. камера, используемая для тестов, не поддерживалась этим клиентом. Данная камера поддерживалась всеми остальными программными клиентами.
- SIPDroid - SIPDroid очень похоже, что не работает.
- OfficeSIP Messenger - OfficeSIP Messenger не может выполнять SIP регистрацию. Исходя из этого, не рекомендуется его использовать.
Интервалы для микширования аудиопотоков.
Интервал для микширования аудиопотоков конференции указывается в профиле конференции. Доступные значения: 10, 20, 40 и 80, все значения в миллисекундах. Использования интервала 80 мс поддерживается только для конференций, где используется частота дискретизации 8, 12, 16, 24, 32 и 48 кГц. Использование интервала 40 мс поддерживается для всех вышеупомянутых частот дискретизации, а также 96 кГц. Для конференций, где используется частот дискретизации 192 кГц, поддерживаются только 10 и 20 мс интервалы для микширования звука. Эти ограничения связаны с тем, что большие значения интервалов микширования звукового потока с большой частотой дискретизации вызывает значительное увеличение потребления памяти. Продвинутые пользователи могут самостоятельно изменить значение MAX_DATALEN в файле bridge_softmix.c, чтобы позволить конференциям с частотой дискретизации звука 96 кГц и 192 кГц работать с более длинными интервалами – установите 16192 для 96 кГц и 80 мс или в: 32384 для 192 кГц и 80 мс, пересоберите и перезапустите.Максимализация производительности.
Для того, чтобы максимально повысить производительность системы, ориентированной на работу с ConfBridge, есть несколько моментов, которые следует выполнить.- Включите dsp_drop_silence в профилях пользователей.
- Это один из *самых важных* шагов, позволяющий увеличить число участников конференций, с которыми может справиться одна машина. Включение этого параметра означает, что звуковой поток пользователей, которые молчат в данный момент, не принимает участия в формировании исходящего из конференции суммарного аудиопотока.
- Подберите оптимальное значение mixing_interval в профиле конференции.
- Значение по умолчанию: 20 мс. Другие возможные значения:e 10, 40 и 80 мс. Меньшие значения обеспечивают более качественный звук, но требуют значительно больше ресурсов процессора. Более высокие значения обеспечивают менее провайдер качественный звук, но потребляют существенно меньше ресурсов процессора. Установка значения в 80 мс, позволяет подключить наибольшее число участников конференции.
- Подключайте абонентов с одинаковыми интервалами для микширования аудиопотоков .
- Ресамплинг между клиентами конференции, которые используют кодеки с разными интервалами семплирования является довольно ресурсоемкой операцией. Если все клиенты подключаются к конференции с одинаковыми интервалами семплирования и конференция работает на одной частоте дискретизации, например, 16 кГц – то число возможных клиентов будет максимальным.
- Запускайте сервер Asterisk с более высоким приоритетом.
- По умолчанию, сервер Asterisk c относительно нормальныv приоритетом,по сравнению с другими процессами в системе. Чтобы увеличить число потенциальных клиентов, Asterisk должен быть запущен с использованием флага *-p* (realtime). Если нагрузка становится слишком большой, это может негативно повлиять на производительность других процессов, в том числе самой консоли - что делает затруднительным удаленное администрирование системы при полной нагрузке.
Когда число клиентов приближается к максимально возможному значению для данной машины, учитывая ее вычислительные способности, качество звука начнет ухудшаться. Вышеуказанные рекомендации позволяют увеличить количество подключенных клиентов, прежде чем качество звука начнет ухудшаться.
Ссылки по теме:
- CONFBRIDGE: Установка для текущего канала динамических параметров конференции и профиля пользователя для приложения конференц связи ConfBridge, используя параметры, что определены в файле конфигурации confbridge.conf.
- ConfBridge: Точка входа в конференцию ConfBridge.
- Список команд.