Решил разобраться с app_conference, а точней - с ее возможностями по части видео.
Сервер: p4 1.6 ГГц 256 RAM, установлен триксбокс 2.6 с астером Asterisk 1.4.18.1-2
app_conference: собрать не удалось, не стал возиться и взял откомпиленый app_conference.so из RPM asterisk-conference-1.4.21-1.fc7.i386.rpm
астериск подхватил модуль и в дальнейшем работал без каких-либо нареканий.
В качестве видеотелефонов использовались три компьютера с веб-камерами dlink DSB-C320 и софотфонами kapanga. Разрешенные кодеки: G711MuLaw (audio), G711ALaw (audio), H.261 (video).
настройки sip.conf:
[general]
videosupport=yes
[100]
type=friend
secret=100
record_out=On-Demand
record_in=On-Demand
qualify=yes
port=5060
pickupgroup=
nat=yes
mailbox=100@device
host=dynamic
dtmfmode=rfc2833
dial=SIP/100
context=from-internal
canreinvite=no
callgroup=
callerid=x100 <100>
accountcode=
call-limit=50
disallow=all
allow=ulaw
allow=alaw
allow=speex
allow=gsm
allow=h261
allow=h263
allow=h263p
диалплан:
;первый режим: управление dtmf
exten => 200,1,conference(temp,XR,1)
;второй режим: управление vad
exten => 201,1,conference(temp,SVDA,VADSTART,VADCONTINUE)
App_conference не микширует видеопоток, умеет только пересылать входящие потоки нужным абонентам. аудио при этом микшируется. Модуль не требует какого-либо оборудования для работы.
У app_conference, по сути, есть два режима работы по переключению видеопотоков: по dtmf и по vad (голосовой активности).
Управление по dtmf
Первоначально при входе абонента в конференцию ему присваивается номер. Все новые участники получают видео от первого вошедшего в конференцию (это можно изменить в процессе входа с помощью параметров), а затем, нажатием цифровых кнопок на софтофоне можно выбирать, от какого абонента получать видео. Кнопка 1 - от первого, 0 - от нулевого и тд. Нумерация начинается с нуля, нумерация непрерывная (не как в meetme), кто последний влез, у того последний номер.
Получается что максимум участников - 10 абонентов. Однако из cli можно управлять видеопотоком не только по номеру юзера, но и по номеру канала, которых может быть и больше 10.
Такое управление неудобно по причинам: каждый смотрит куда хочет, а не на говорящего; изначально неизвестно, кто под каким номером сидит. (зато если в астер завести sip камеры, то таким способом можно организовать что-то типа видеонаблюдения, и вроде как даже записывать можно)
Однако из командной строки можно принудительно назначить источник видеосигнала для всех участников конференции.
Управление по VAD
Мне удалось заставить работать app_conference в этом режиме только если включить подавление тишины в софтофоне, что может вызвать проблемы при обычных звонках. Как я понял, VAD детектор переключает на говорившего тогда, когда он говорит более 10 секунд. У меня срабатывание этого механизма было нечетким, да и вообще не очень понятным. В общем, неюзабельно, хотя идея хорошая.
Варианты использования
1) для тех, кто не любит GUI:
в режиме работы по dtmf при создании конференции (по первому вошедшему) запускается скрипт или программа, которая по AMI начинает мониторить поток событий на наличие нажатых кнопок со стороны модератора конференции, затем выполняет команду, которая принудительно раздает видео с выбранного источника. Т.е. сидит директор, всех отчитал и потом: "Выслушаем начальника транспортного цеха" и давит кнопку 7 (например). все видят этого начальника, и как он оправдывается. Выбор видео можно совместить с отключением аудио для всех остальных.
2) для нормальных человеков
нарисовать простой GUI на ПХП, который по AMI ищет конференции, показывает список участников, а для модератора - предоставляет органы управления, кому и когда говорить и кого показывать.
Замечания по производительности
app_conference позиционируется как hight perfomance замена meetme, однако при трех участниках LA была 0,44, а при широковещательном видео - 1,55..1,99. При более поздних замерах - такой загрузки замечено не было. В интернете встречал упоминания о конференциях (видимо только голос) в 250 человеков.
конф. с произвольным выбором:
2 абонента - LA 0,23 91.4%id
3 абонента - LA 0.37 76.8%id
конф. с широковещательным видео:
2 абонента - LA 0.19 83.7%id
3 абонента - LA 0.37 88.0%id
PS: если есть какие-либо пожелания, стенд собран, могу потестить что надо.
PPS: совместно с камерами dlink тестилась и logitech, но последняя имела отстойное качество изображения, сильные шумы в условиях, при которых Длинки показывали четкую и чистую картинку.