В предыдущих статьях шла речь об установке asterisk 1.10 и настройке интерактивного голосового меню IVR. Сейчас хочу раскрыть тему работы с видеоконференциями на asterisk при помощи уже встроенного модуля confbridge. Модуль ставиться вместе с asterisk 1.10 (make samples). Он состоит всего из одного файла конфигураций. В полезных ссылка в конце статьи будет ссылка на подробное описание каждой опции модуля.
Пример настройки модуля:
[root@server] cat /etc/asterisk/confbridge.conf [general] [fancybridge] type=bridge max_members=20 mixing_interval=10 internal_sample_rate=auto record_conference=no video_mode=follow_talker [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 [fancymenu] type=menu *=playback_and_continue(conf-usermenu) *1=toggle_mute 1=toggle_mute *4=decrease_listening_volume 4=decrease_listening_volume *6=increase_listening_volume 6=increase_listening_volume *7=decrease_talking_volume 7=decrease_talking_volume *8=leave_conference 8=leave_conference
Это было взято из примера на сайте. Теперь нужно добавить хотябы 2-х sip-юзеров для тестирования видео и добавить в диалплан astersk вызов видеоконференции.
[root@server] cat /etc/asterisk/sip.conf [general] bindport=5060 bindaddr=0.0.0.0 srvlookup=yes registertimeout=30 maxexpiry=7200 minexpiry=3600 videosupport=yes [1001] qualify=yes type=friend context=phones username=Sasha host=dynamic secret=1001 ;nat=yes callerid="IT Crowd" callgroup=1 language=ru accountcode=Alex_Gubernatrov disallow=all allow=alaw allow=ulaw allow=gsm allow=g729 allow=h264 allow=h263 directmedia=no [1002] qualify=yes type=friend context=phones username=Frodo host=dynamic secret=1002 ;nat=yes callerid="IT Crowd" callgroup=1 language=ru accountcode=Frodo_Sumkin disallow=all allow=alaw allow=ulaw allow=gsm allow=g729 allow=h264 allow=h263 directmedia=no
Мы добавили 2-х sip пользователей и настроили возможность передачи видео между ними основываясь на видеокодеках h263 и h264. Т.е. софтфон обоих пользователей должен поддерживать хотя бы один из кодеков и этот кодек должен быть одинаковым у всех пользователей конференции (в настройках софтфона нужно выбрать используемый кодек).
Теперь нужно добавить в диалплан точку входа в конференцию.
[root@server] cat /etc/asterisk/extensions.conf [globals] [general] static = yes writeprotect = no clearglobalvars = yes [internal] exten => _XXXX,1,Dial(SIP/${EXTEN:0}) [phones] include => internal exten => 111,1,Answer() exten => 111,n,ConfBridge(1234,fancybridge,fancyuser,fancymenu)
В данному случаи при звонке на номер «111» мы присоединимся в конференцию с номером 1234 с описанными в confbridge.conf правилами и меню. Чтобы все действия вступили в силу, необходимо перегрузить настройки модуля, sip пользователей и диалплана.
[root@server] asterisk -rvvv CLI> module reload app_confbridge.so CLI> sip reload CLI> dialplan reload
Для поиска проблем и неисправностей можно врубить режим отладки.
CLI> sip set debug on/off
Теперь просто ставим себе на компьютер софтфон ( к примеру, бесплатный jitsi client) и вводим в нем настройки sip аккаунта.
SIP id: @ (в моем случаи 1001@192.168.1.201) Password: 1001
Если все введено верно, то на сервере asterisk в консоли выведется сообщение о подключении пользователя.
[Nov 19 04:02:02] NOTICE[29727]: chan_sip.c:21967 handle_response_peerpoke: Peer '1001' is now Reachable. (628ms / 2000ms) [Nov 19 04:02:02] NOTICE[29727]: chan_sip.c:26165 handle_request_subscribe: Received SIP subscribe for peer without mailbox: 1001 CLI> sip show peers Name/username Host Dyn Forcerport ACL Port Status Description 1001/Sasha 192.168.2.153 D N 9947 OK (16 ms)
Теперь при звонке на «111» все попадают в видеоконференцию.
Также можно добавить запись этого разговора.
[root@server] vim /etc/asterisk/extensions.conf [...] exten => 111,n,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN}) exten => 111,n,Monitor(wav,/home/share/monitor/${fname},mb) exten => 111,n,ConfBridge(1234,fancybridge,fancyuser,fancymenu) [...]
Полезные команды для прерывания/перезагрузки/включения asterisk.
CLI> core stop now # This command stops the Asterisk service immediately, ending any calls in progress. CLI> core stop gracefully # This command prevents new calls from starting up in Asterisk, but allows calls in progress to continue. When all the calls have finished, Asterisk stops. CLI> core stop when convenient # This command waits until Asterisk has no calls in progress, and then it stops the service. It does not prevent new calls from entering the system. There are three related commands for restarting Asterisk as well. CLI> core restart now # This command restarts the Asterisk service immediately, ending any calls in progress. CLI> core restart gracefully # This command prevents new calls from starting up in Asterisk, but allows calls in progress to continue. When all the calls have finished, Asterisk restarts. CLI> core restart when convenient # This command waits until Asterisk has no calls in progress, and then it restarts the service. It does not prevent new calls from entering the system. #There is also a command if you change your mind. CLI> core abort shutdown # This command aborts a shutdown or restart which was previously initiated with the gracefully or when convenient options.
Полезные ссылки:
https://jitsi.org/index.php/Main/Download
https://wiki.asterisk.org/wiki/display/AST/ConfBridge+10
http://asterisk.ru/knowledgebase/books
https://wiki.asterisk.org/wiki/display/AST/Asterisk+standard+channel+variables
canreinvite=no
Это уже устарело. нужно использовать directmedia=no
Согласен.
canreinvite был переименован в directmedia начиная с версии Asterisk 1.6.2.
Спасибо — исправил.
Добрый день.
Все сделал как вы написали, в итоге ввожу комманду confbridge list, и у меня нет комнаты для конференций вообще.
Не понятен еще один момент. Вы пишите при звонке на номер 111 попадаете в комнату с номером 1234.
Эти два номера должны быть прописаны в sip.conf?
Привет. Для начала, нужно прочитать, как работает confbridge модуль и про диалплан.
В диалплане я рандомно указал номер на который нужно звонить(111), чтобы попасть в конференцию с id=1234.