The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Создание сервера видеоконференций на базе OpenMCU и GnuGK (voip gatekeeper openmcu linux)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: voip, gatekeeper, openmcu, linux,  (найти похожие документы)
From: Ермаченко Семен <sme08@yandex.ru.> Newsgroups: email Date: Mon, 06 Mar 2009 14:31:37 +0000 (UTC) Subject: Создание сервера видеоконференций на базе OpenMCU и GnuGK Введение Эта статья призвана немного восполнить пробел практически полного отсутствия информации о проекте OpenMCU на русском языке. Пару раз эта тема проскакивала здесь на opennet.ru и на форуме ixbt.com и, собственно, из этих источников я и узнал о существовании OpenMCU :) А вот, как его все-таки использовать, информации было крайне мало и она была неполная. На английском языке ее, по-моему, также не густо, лучшее, что я нашел, было в зарубежных списках рассылки, опубликованных на http://osdir.com/ml/telephony.openh323.general/ , небольшом мануале на openmcu (man openmcu) и сайте, посвященном GnuGK http://www.gnugk.org/, который, в отличие от OpenMCU, куда лучше документирован. Буду очень благодарен за любые замечания и улучшения. Дистрибутив: Я использовал Linux OpenSUSE 10.3, версия ядра 2.6.22.5-31 Версии пакетов: openmcu-2.2.0-104 (сервер видеоконференций, использующий протокол H323) gnugk-2.2.5-65 (H323 Gatekeeper) Используемые библиотеки: openh323-1.19.0.1-106 pwlib-1.10.7-61 Процесс установки описывать не буду, никаких трудностей в нем нет, положим, все необходимое уже установлено. По поводу того, что такое протокол H323, привратник, MCU и т.д. можно почитать, например, Здесь и Здесь Как все это работает? Клиент регистрируется у привратника (GnuGK) под именем, скажем, nm1. Затем набирает код выхода на openmcu, например, "02" и привратник соединяет его с сервером видеоконференций (OpenMCU), где nm1 ждет остальных участников. Все остальные попадают на конференцию точно так же. Для всех собравшихся используется default room - комната видеоконференции по умолчанию. Привратник не является обязательным компонентом, но дает удобную возможность использовать короткие символьные имена вместо ip-адресов. Так, все зарегестрировшиеся у привратника могут также вызывать друг друга по имени, например, клиент зарегестрировавшийся, как nm2 может вызвать nm1 по его имени и организовать с ним видеообщение на 2 участников (point-to-point). Тогда openmcu не используется. Конфигурация GnuGK: /etc/gnugk.ini [Gatekeeper::Main] FourtyTwo=42 Name=GNU_Gk ;EndpointSuffix=_gnugk Home=127.0.0.1 StatusTraceLevel=2 UseBroadcastListener=0 TimestampFormat=ISO8601 EndpointSignalPort=1721 EncryptAllPasswords=0 UseMulticastListener=0 StatusPort=7000 #Порт мониторинга SignalCallId=1 [GkStatus::Auth] #Здесь задаются правила доступа к #мониторингу GnuGK rule=explicit #Доступ осуществляется на основе ip 192.168.2.106=allow #Хост с которого можно мониторить GnuGK Shutdown=allow #Разрешено отключать gnugk в мониторинге #Самое важное: #Описываем постоянные точки подключения, то есть те, которые будут #постоянно храниться в регистрационной таблице привратника [RasSrv::PermanentEndpoints] 127.0.0.1:1720=mcu;02 #наш mcu [RasSrv::GWPrefixes] mcu=02 #префикс выхода на него #Остальное можно не трогать [RasSrv::RRQFeatures] AcceptEndpointIdentifier=1 AcceptGatewayPrefixes=1 OverwriteEPOnSameAddress=1 IRQPollCount=0 [RasSrv::ARQFeatures] CallUnregisteredEndpoints=0 ArjReasonRouteCallToGatekeeper=0 [RoutedMode] GKRouted=1 H245Routed=1 CallSignalPort=1721 AcceptNeighborCalls=1 AcceptUnregisteredCalls=1 RemoveH245AddressOnTunneling=0 RemoveCallOnDRQ=1 DropCallsByReleaseComplete=1 SendReleaseCompleteOnDRQ=1 SupportNATedEndpoints=1 TranslateFacility=1 [Proxy] Enable=1 ProxyForNAT=1 RTPPortRange=1024-65535 [RoutingPolicy] 00=explicit,internal 02=internal,explicit Default=explicit,internal,numberanalysis [CallTable] GenerateNBCDR=0 GenerateUCCDR=1 [Gatekeeper::Auth] FileIPAuth=optional;RRQ SQLPasswordAuth=required;RRQ SQLAuth=required;ARQ,Setup [Gatekeeper::Acct] SQLAcct=required;start,update,stop Подробное описание каждого из параметров можно найти на http://www.gnugk.org/gnugk-manual.html Работу GnuGK можно мониторить подключившись к серверу на 7000 порт. Например, мой сервер - 192.168.3.2 telnet 192.168.3.2 7000 Version: Gatekeeper(GNU) Version(2.2.5) Ext(pthreads=1,radius=1,mysql=0,pgsql=0,firebird=0,large_fd set=0,crypto/ssl=1) Build(Sep 25 2007, 22:47:36) Sys(Linux i686 2.6.22.5-31-default) GkStatus: Version(2.0) Ext() Toolkit: Version(1.0) Ext(basic) Startup: Thu, 26 Feb 2009 14:09:41 +0600 Running: 0 days 23:41:38; Конфигурация OpenMCU OpenMCU по умолчанию хранит свой конфиг в ~/.pwlib_config/openmcu.ini Поначалу конфига нет в этой директории, чтобы он появился, можно подключиться к openmcu через веб-интерфейс (про это - ниже), заполнить необходимые поля, нажать Accept и конфиг будет создан. [Parameters] Username=mcu Password=******* #Пароль здесь указывать не надо, это #можно сделать через веб-интерфейс, а здесь хранится только хэш Log Level=4 HTTP Certificate=server.pem HTTP Port=1420 Gatekeeper Mode=No gatekeeper #Не использовать регистрацию у #привратника #Далее идут различные параметры, связанные с обслуживанием #видеоконференции, #можно все оставить, как есть, все нормально работает с дефолтовыми #параметрами Interface Array Size=0 Enable video=True Video frame rate=10 Video quality=10 Default room=room101 Room time limit=0 Connecting WAV File=/usr/sbin/connecting.wav Entering WAV File=/usr/sbin/entering.wav Leaving WAV File=/usr/sbin/leaving.wav Call log filename=/var/log/openmcu/opemcu.log Force split screen video=False Для описания этих параметров читайте man на openmcu. Как уже говорилось, настраивать openmcu можно также через web-интерфейс. Для этого нужно набрать в браузере https://your-MCU-ip:1420/ Доступны следующие опции: * Parameters * MCU Status * Invite user to conference С помощью Parametrs можно производить настройку сервера В MCU status можно мониторить его текущее состояние. Очень полезная вещь! Invite user to conference - отправить пользователю приглашение на конференцию (не понял, как это должно работать:)) Для отладки сервисов можно использовать команды gnugk -c имя_конфига -ttt (trace - расширенный вывод данных) openmcu -i имя_конфига -cx (запускать как обычную программу с выводом данных на экран) Чтобы сервисы автоматически запускались при старте, надо создать их стартовые скрипты и положить их (в зависимости от дистрибутива) в /etc/rc.d/ или /etc/init.d/ Сами скрипты тоже могут отличаться в зависимости от используемого дистрибутива. Вообще-то эти скрипты обычно идут вместе с пакетом (или архивом с исходниками) программы, но для openmcu он отсутствовал, а для gnugk я немного изменил строчку запуска startproc $OPENGK_BIN -c /etc/gnugk.ini -o /var/log/gnugk/gnugk.log -t Скрипт для запуска openMCU я на скорую руку слепил из шаблона для стартовых скриптов /etc/init.d/skeleton #!/bin/sh # # # /etc/init.d/openmcu # ### BEGIN INIT INFO # Provides: openMCU # Required-Start: $network $syslog $remote_fs # Should-Start: $time ypbind smtp # Required-Stop: $syslog $remote_fs # Should-Stop: $time ypbind smtp # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: OpenMCU # Description: Start openMCU ### END INIT INFO # FOO_BIN="/usr/sbin/openmcu -d" MCU_BIN="/usr/sbin/openmcu" test -x $MCU_BIN || { echo "$MCU_BIN not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; } . /etc/rc.status # Reset status of this service rc_reset case "$1" in start) echo -n "Starting OpenMCU " ## Start daemon with startproc(8). If this fails ## the return value is set appropriately by startproc. /sbin/startproc $FOO_BIN # Remember status and be verbose rc_status -v ;; stop) echo -n "Shutting down OpenMCU" ## Stop daemon with killproc(8) and if this fails ## killproc sets the return value according to LSB. /sbin/killproc -TERM $MCU_BIN # Remember status and be verbose rc_status -v ;; try-restart|condrestart) ## Do a restart only if the service was active before. ## Note: try-restart is now part of LSB (as of 1.9). ## RH has a similar command named condrestart. if test "$1" = "condrestart"; then echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}" fi $0 status if test $? = 0; then $0 restart else rc_reset # Not running is not a failure. fi # Remember status and be quiet rc_status ;; restart) ## Stop the service and regardless of whether it was ## running or not, start it again. $0 stop $0 start # Remember status and be quiet rc_status ;; force-reload) ## Signal the daemon to reload its config. Most daemons ## do this on signal 1 (SIGHUP). ## If it does not support it, restart the service if it ## is running. echo -n "Reload service OpenMCU " ## if it supports it: /sbin/killproc -HUP $FOO_BIN rc_status -v ## Otherwise: #$0 try-restart #rc_status ;; reload) ## Like force-reload, but if daemon does not support ## signaling, do nothing (!) # If it supports signaling: echo -n "Reload service OpenMCU " /sbin/killproc -HUP $FOO_BIN rc_status -v ## Otherwise if it does not support reload: #rc_failed 3 #rc_status -v ;; status) echo -n "Checking for service OpenMCU " # NOTE: checkproc returns LSB compliant status values. /sbin/checkproc $MCU_BIN # NOTE: rc_status knows that we called this init script with # "status" option and adapts its messages accordingly. rc_status -v ;; probe) esac rc_exit Не забудьте назначить скриптам права на выполнение. Собственно, теперь надо положить соответсвующие ссылки на скрипты в rcN.d, то есть для соответствующих уровней запуска. Я предпочитаю делать это программой chkconfig chkconfig openmcu on chkconfig gnugk on Теперь все готово для запуска сервисов. service gnugk start service openmcu start В настройках NetMeeting надо выставить Сервис-Параметры - Расширенный вызов- Использовать привратника для вызовов и Регистрация моей учетной записи (имя учетной записи). После активации параметров в правом нижнем углу у него должен появиться значок "Есть регистрация у привратника". Теперь набираем наш префикс выхода (02) и попадаем на сервер OpenMCU, на экране будет виден соответствующий логотип. Все остальные участники, также регистрируясь у привратника и набирая 02, будут попадать на нашу конференцию. Но тут возникает один интересный вопрос. Получается, что наш сервер будет обслуживать одновременно только одну видеоконференцию, ту, что в default room. А как сделать так, чтобы на одном сервере MCU одновременно проводить несколько параллельных конференций? Именно для этого и используется разделение конференций по комнатам. К сожалению, NetMeeting не умеет указывать при вызове желаемую комнату для конференции и может попадать только на default room, если она задана. Поэтому организовывать различные комнаты мы будем, используя различные префиксы выхода на MCU в gnugk. Например, так: /etc/gnugk.ini [RasSrv::GWPrefixes] #Комната 00 mcu=00 #Комната 11 mcu=11 #Комната 22 mcu=22 Таким образом, при наборе соответствующих префиксов, клиент будет попадать в различные комнаты. Например, при наборе 00, openmcu создаст комнату 00, в которую и попадет клиент. Остальным участникам конференции также можно выбирать нужную комнату, набирая нужный префикс. Другим способом выбора комнаты является явное указание ее в запросе следующим образом: "room_name@server_name" NetMeeting эту возможность не поддерживает, поэтому можно использовать другого h323 клиента, например, несколько хороших клиентов перечислены здесь: http://www.gnugk.org/h323-endpoint.html В этом случае, можно не использовать регистрацию у привратника, а сразу набирать выход на openmcu в адресной строке, например, набираем example@192.168.3.2 и попадаем на наш openmcu. Аналогично другие клиенты могут указывать свои комнаты, отличные от example и участвовать в отдельной конференции. Заключение Число комнат, по идее, ограничено только аппаратными ресурсами вашего сервера. Что касается того, сколько максимально участников может одновременно участвовать в одной видеоконференции, то я использовал конференции лишь до 4-х участников включительно и могу сказать только, что это работает. Что касается большего числа участников, то единственную информацию, которую мне удалось найти на этот счет была на http://www.e-bizone.com/e_chinabo_03.htm (но,к сожалению, не было возможности проверить, так что за что купил, за то и продаю) You hear the audio from the other users, but only see the video from the four users actively talking.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Grand piano (?), 15:57, 06/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всё бы хорошо, НО ни слова не сказано о используемых кодеках видео, максимальном разрешение и частоте кадров и многом другом. Не то что бы с наездом, НИ В КОЕМ РАЗЕ, но это тоже крайне важные параметры, потому как меня давно не устраивает 320*240 и хочется большего, МНОГО большего, HD конечно тяжело ещё рассчитывать, но примеры я уже видел. В любом случае спасибо, потому как реально информации об этом крайне мало на русском.
     
  • 1.2, Ермаченко Семен (?), 08:26, 07/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Согласен. Просто в качестве клиентов по ряду причин везде стоял вышеупомянутый netmeeting. Он из видеостандартов, насколько я понимаю,  поддерживает только один h261, вот на http://habrahabr.ru/blogs/open_source/53427/ есть интересная статья на аналогичную тему, там про кодеки более подробно написано. Кстати, там, вроде, до 7 участников подключали, так что в моей статье заключительную фразу, видимо, можно не принимать во внимание, похоже, это не имеет отношения к openmcu.
     
  • 1.3, muggot (?), 20:40, 12/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    h.261 это для тех кто не хочет разобираться с документацией. Без особых проблем можно h.263, если все сделать аккуратно, то будет CIF. Дальше сложнее, если нужен CIF4 или другие размеры (хоть HD), то есть выбор cvs или сделать правильно, адаптивно. С h.264 еще немного сложнее, нужно брать плагин от opal и его дорабатывать, также нужно пропатчить x264 на предмет single NALU mode rtp пакетизации. Так что все можно сделать, но в исходном варианте только потенциал. Что касается количества участников, то оно не ограничено. Только h.264 проц сильно грузит при кодировании, но и здесь возможен вариант спекулятивного кэширования, в случае когда все участники видят одну картинку.
     
  • 1.4, Ермаченко Семен (?), 08:26, 16/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно. Но я просто ставил несколько иную задачу - описать общие принципы работы связки openmcu и gnugk, что-то типа simple how to openmcu+gnugk+netmeeting. В общем, конкретный рабочий пример. На полноту изложения в статье всех возможностей OpenMCU и сопряженных библиотек, отнюдь не претендую:)
    А "поддерживает только один h261" - это я про netmeeting, а вовсе не про openmcu.
     
  • 1.5, GHhost (?), 22:39, 02/04/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    /etc/gnugk.ini

            [Gatekeeper::Main]
            Home=127.0.0.1
                  ^^^^^^^^и при это работает с других машин?

     
  • 1.6, Grygoriy (?), 17:52, 03/04/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я уже бьюсь над проблемой видео интеграции давненько, у меня есть много клиентов у которых стоит астериск и они используют давно видеозвонки, просят видеоконференцию в нормальном качестве, как говорилось выше 320*240 это уже старо, да и интеграция с астериском нулевая, есть ещё проект vmukti, там более или менее что то можно делать, но опять же качество. Есть несколько платных сервисов 30$ в мес на человека. В общем результаты плохие, решений нет, возможности платить нормальные деньги есть, и размер каналов позволяет. А решения нет. Если есть решения, может я пропустил, пишите я с удовольствием посмотрю.
     
  • 1.7, pppetr (?), 10:58, 07/05/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    скопировал конфиги один в один(поменяв IP и убрав Home) - клиенты видят только лого openmcu и всё
     
  • 1.8, Ермаченко Семен (?), 13:33, 14/05/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Какая ОС? Что в качестве клиентов? Как уставнавливал софт,передача видео включена? Запусти сервисы в режиме отладки как показано выше или сниффер. Клиенты в одной сети или есть NAT?
    У меня все работает, как я описал, включая даже   Home=127.0.0.1, (это я проглядел, да), но gnugk все равно почему-то слушает на всех интерфейсах.
     
  • 1.9, bulbator (?), 17:35, 20/05/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    +1 к pppetr

    OpenSUSE 11.1
    gnugk-2.2.6-1.159
    openmcu-2.2.0-56.162
    ekiga-3.0.1-1.22

    Ставилось все из репозиториев

     
  • 1.10, bulbator (?), 11:04, 21/05/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    пошло....

    нужно выбирать на клиентах разрешение 352x288 или 176x144

     
  • 1.11, schmel (?), 11:09, 25/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а на freebsd, кто нить пробовал?
    офисы расположены в разных городах. нужно создать конференцию. попробовал поставить openmcu + gnugk из портов на freebsd 8...как то не срослось, кто нить пробовал на фре???
     
  • 1.12, 5chme1 (?), 12:53, 14/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    openmcu.ru тут спроси
     
  • 1.13, Rths (?), 12:30, 01/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кроме netmeeting можете подсказать других возможных клиентов, в т.ч. и для X-ов?
     
  • 1.14, trashworm (?), 21:28, 20/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Myphone 3 muggot
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру