Видеоконференции в Asterisk

Многие клиенты обращаются с вопросами о поддержке видеосвязи в Asterisk, также их интересует возможность проводить видеоконференции с несколькими участниками. Не секрет, что большинство решений видеоконференций стоят очень недешево, их могут позволить только крупные компании. Однако применение Asterisk позволит большему кругу предприятий использовать новые технологии.

Существуют и opensource серверы видеоконференций (MCU), такие как openmcu и mcumediaserver. Первый поддердживает только протокол h323 и разрабатывается довольно давно, однако проект до сих пор сырой и имеет много проблем, второй пока в начальной стадии разработки. Оба этих проекта умеют микшировать видеопотоки в один (2х2, 3х3 и т.д.), что требует серьезных процессорных затрат на декодирование, микширование звука и видео и затем снова сжатие. Однако есть альтернатива в виде универсального приложения для аудио- видеоконференций app_conference для asterisk, которое мы и решили протестировать. 

В качестве сервера для тестирования была применена платформа Trixbox 300 в конфигурации P4 1.6 ГГц 256 RAM c установленым Trixbox 2.6 (Asterisk 1.4.18.1-2). В качестве видеотелефонов использовались три компьютера с Windows XP, с установлеными софтфонами Kapanga и USB веб камерами D-Link DSB-C320 и Logitech. Разрешенные кодеки: G711MuLaw (audio), G711ALaw (audio), H.261 (video). 

На сервере app_conference собрать не удалось, разбираться не стали и применили готовый откомпилированный app_conference.so из RPM asterisk-conference-1.4.21-1.fc7.i386.rpm. Астериск подхватил модуль и в дальнейшем работал без каких-либо нареканий.  Модуль не требует какого-либо оборудования для работы. 

Настройки 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

Диалплан для тестирования: 

[from-internal-custom]
;первый режим: управление dtmf 
exten => 200,1,conference(temp,XR,1) 
;второй режим: управление vad 
exten => 201,1,conference(temp,SVDA,VADSTART,VADCONTINUE) 

Следует заметить, что app_conference не микширует видеопотоки от участников, а умеет только пересылать входящие потоки нужным абонентам, аудио при этом микшируется. Таким образом в один момент времени каждый участник может видеть изображение только от одного участника, однако app_conference имеет развитые функции управления видеопотоками. Естественно, что при таком подходе у всех участников должен использоваться один и тот же кодек, а отсутствие перекодирования и микширования сильно снижает требования к процессору.

У app_conference, по сути, есть два режима работы по переключению видеопотоков: по dtmf и по vad (голосовой активности). 

Управление по dtmf 

Первоначально при входе абонента в конференцию ему присваивается номер. Все новые участники получают видео от первого вошедшего в конференцию (это можно изменить в процессе входа с помощью параметров), а затем, нажатием цифровых кнопок на софтофоне можно выбирать, от какого абонента получать видео. Кнопка 1 - от первого, 0 - от нулевого и тд. Нумерация начинается с нуля, она непрерывная (не как в meetme), кто последний вошел, у того последний номер. 

Так как кнопок на телефоне всего 10, то и получается что максимальное число участников также 10. Однако из cli можно управлять видеопотоком не только по номеру юзера, но и по номеру канала, которых может быть и больше 10. 

Такое управление неудобно по следующим причинам: каждый смотрит куда хочет, а не на говорящего (руководителя); изначально неизвестно, кто под каким номером зашел (зато если в Asterisk завести sip камеры, то таким способом можно организовать что-то вроде видеонаблюдения, и по словам авторов можно записывать видеопоток). 

Однако из командной строки можно принудительно назначить источник видеосигнала для всех участников конференции, что дает широкие возможности манипуляции с помощью AMI и PHP приложений. 

Управление по VAD 

Нам  удалось заставить работать app_conference в этом режиме только при включении подавления тишины в софтофоне, что может вызвать проблемы при обычных звонках. Выяснилось, что VAD детектор переключает видеопотоки на говорившего если он говорит более 10 секунд. Срабатывание этого механизма было нечетким, да и вообще не очень понятным. В общем, идея хорошая, но малоработоспособная.

Варианты использования 

1) для тех, кто не любит GUI в любых его проявлениях: 

В режиме работы по dtmf при создании конференции (по первому вошедшему) запускается скрипт или программа, которая, подключившись у Asterisk по AMI, начинает мониторить поток событий на наличие нажатых кнопок со стороны модератора конференции, затем выполняет команду, которая принудительно раздает видео с выбранного источника. Например, руководитель, всех отчитав произносит: "Выслушаем начальника транспортного цеха" и нажимает  кнопку 7 (номер начальника транспортного цеха). Все участники конференции видят этого начальника, слышат что он говорит и могут задать ему вопросы. Выбор видео можно совместить с отключением аудио для всех остальных. 

2) Использование GUI 

Целесообразно разработать несложный GUI на PHP, который по AMI ищет конференции, показывает список участников, а для модератора - предоставляет органы управления, кому и когда говорить и кого показывать (т.е. сделать аналог web-meetme). 

Замечания по производительности 

App_conference позиционируется как hight perfomance замена meetme, однако при трех участниках LA была 0,44, а при широковещательном видео - 1,55..1,99. При более поздних замерах - такой загрузки замечено не было, так как был отключен режим отладки (который записывает в full очень много информации). В интернете встречаются упоминания о конференциях (видимо только голос) в 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 

Послесловие

Совместно с камерами D-link использовалась и Logitech, но последняя имела очень плохое качество изображения, сильные шумы в условиях, при которых D-link показывали четкую и чистую картинку.

Полезные ссылки 

http://habrahabr.ru/blogs/open_source/53427/ 

http://igorg.ru/2009/02/09/otkrytyj-mcu/ 

Обсуждение статьи:

http://asterisk-support.ru/forum/topics/4359/


Еще по теме:

http://lynks.ru/for_business/videoconf.htm


 

  • 21/06/09
  • 2
  • Оценка: 2.65/5, голосов: 754

Комментарии

Видеоконференции в Asterisk 2013-10-30 18:17 / #

Классная штука. В asterisk начиная с версии 1.10 установлена нейтив возможность видеоконференций, настраивал используя этот ман – http://sysadmin.te.ua/linux/voip/nastrojka-videokonferencij-na-asterisk-1-10-s-confbridge.html

Видеоконференции в Asterisk 2013-10-31 17:43 / #

Судя по всему confbridge это потомок appconference

Оставить комментарий