Бюджетная видеоконференция c HD-качеством на OpenMCU Николай Емашев filemembers.cxx void ConferenceFileMemb er::WriteThreadV(PThread &, INT) { PString cstr = "video." + conference->GetNumber(); const char *cname = cstr; cout << "cname= " << cname << "\n"; mkfifo(cname,S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR); int SV=open(cname,O_WRONLY); int amount = CIF_WIDTH*CIF_HEIGHT*3/2; PBYTEArray videoData(amount); PAdaptiveDelay videoDelay; int success=0; while (running) { // read a block of data conference->ReadMemberVideo(this,videoData.GetPointer(),CIF_WIDTH,CIF_HEIGHT,amount); // write to the file if (write(SV,(const void *)videoData.GetPoint er(),amount)<0) { close(SV); SV=open(cname,O_WRONLY); success=0; videoDelay.Restart();} else if(success==0) { success++; videoDelay.Restart(); } // and delay videoDelay.Delay(100); } close(SV); } # cd /usr/ports/devel/binutils # make install clean # cd /usr/ports/devel/git # make install clean # cd /usr/ports/devel/yasm # make install clean # cd /usr/ports/shells/bash # make install clean # chmod 755 * # ./configure --enable-shared --disable-asm #cp /usr/bin/as /usr/bin/as.old # cd /usr/src/x264 # ./configure --enable-shared # gmake # gmake install # cp /usr/bin/as.old /usr/bin/as # cd /usr/ports/multimedia/ffmpeg-devel # make install clean # cd /usr/src/ptlib # ./configure --enable-shared # gmake opt # gmake install # cd /usr/src/h323plus # ./configure --enable-shared # gmake opt # gmake install # export PTLIBDIR=/usr/src/ptlib # gmake # cd /usr/src/H.264_88/ # gmake # cd /usr/src/H.263-1998 # gmake # cd /usr/src/openmcu # gmake opt ./openmcu -d -i /usr/local/etc/openmcu.ini # /usr/local/openmcu/start.sh #./openmcu -cx ----------------------------------------------------------------------------------------------------------------- Перенос телефонных линий между офисами на базе IP-АТС Asterisk и Linksys Дмитрий Нестеркин ;Настройки SPA8000 ;Этот контекст мы отвели для внутренних номеров, вписываемых вручную [office] ;Стандартный контекст Elastix для добавочных номеров include => from-internal-custom exten => 8001,1,Dial(SIP/8001,,t) exten => 8002,1,Dial(SIP/8002,,t) exten => 8003,1,Dial(SIP/8003,,t) exten => 8004,1,Dial(SIP/8004,,t) exten => 8005,1,Dial(SIP/8005,,t) exten => 8006,1,Dial(SIP/8006,,t) exten => 8007,1,Dial(SIP/8007,,t) exten => 8008,1,Dial(SIP/8008,,t) ;Этот контекст мы отвели под городские линии [from-pstn] ;По умолчанию звонок приходит секретарю на номер 8001 exten=>spa400,n,Goto(office,8001,1) canreinvite=no context=from-trunk dtmfmode=rfc2833 host=192.168.10.40 incominglimit=4 nat=yes port=5060 qualify=yes type=friend username=spa400 register=spa400@192.168.10.40/spa400 [spa400] type=friend user=spa400 ;IP-адрес SPA400 host=192.168.20.40 dtmfmode=rfc2833 canreinvite=no context=from-trunk insecure=very ;Имя транка для SPA400 [spa400] disallow=all ;Мы используем кодек G.711U allow=ulaw canreinvite=no context=from-trunk dtmfmode=rfc2833 host=192.168.10.40 incominglimit=4 nat=yes port=5060 qualify=yes type=friend ;Совпадает с именем пользователя в настройках SPA400 username=spa400 ;Один из добавочных номеров, добавленный через веб-интерфейс [1001] deny=0.0.0.0/0.0.0.0 type=friend secret=P@ssw0rd qualify=yes port=5060 pickupgroup= permit=0.0.0.0/0.0.0.0 nat=yes mailbox=1001@device host=dynamic dtmfmode=rfc2833 dial=SIP/1001 ;В нашем случае можно также указать контекст office context=from-internal canreinvite=no callgroup= callerid=device <1001> accountcode= call-limit=50 ;Контекст для порта №1 [from-trunk-spa400-1] exten => _1.,1,Dial(SIP/spa400/L1${EXTEN}) exten => _1.,n,Congestion DEVICE=ipsec0 TYPE=IPSEC ONBOOT=yes IKE_METHOD=PSK SRCGW=192.168.10.5 DSTGW=192.168.10.33 SRCNET=192.168.10.0/27 DSTNET=192.168.10.32/27 DST=87.65.43.21 IKE_PSK=ipT3l3phonY ; remote 87.65.43.21 { exchange_mode main, aggressive; my_identifier address; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 2 ; } } path include "/etc/racoon"; path pre_shared_key "/etc/racoon/psk.txt"; path certificate "/etc/racoon/certs"; #После тестирования значение следует заменить на notify log debug; padding { #Максимальная длина интервалов между пакетами maximum_length 20; #Разрешить/запретить случайную длину randomize off; #Разрешить/запретить жесткую проверку strict_check off; #Извлечь последний октет exclusive_tail off; } listen { isakmp 12.34.56.78 [500]; } ## IKE, фаза 1 remote 87.65.43.21 { exchange_mode main,aggressive; my_identifier address 85.236.7.158; lifetime time 28800 seconds; #Возможны значения obey, strict, claim proposal_check obey; proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key ; dh_group 2 ; } } ## IKE, фаза 2 sainfo address 192.168.10.5/27 any address 192.168.10.32/27 any { pfs_group 2; lifetime time 28800 seconds ; encryption_algorithm 3des, des ; authentication_algorithm hmac_sha1, hmac_md5 ; compression_algorithm deflate ; } sainfo address 192.168.10.32/27 any address 192.168.10.5/27 any { pfs_group 2; lifetime time 28800 seconds ; encryption_algorithm 3des, des ; authentication_algorithm hmac_sha1, hmac_md5 ; compression_algorithm deflate ; } #Данная строка добавляется автоматически при активации тоннеля, вписывать ее не нужно include "/etc/racoon/193.233.70.167.conf"; # !/sbin/setkey -f flush; spdflush; #Исходящий трафик spdadd 192.168.10.5/27 192.168.10.32/27 any -P out ipsec esp/tunnel/85.236.7.158-193.233.70.167/require; #Входящий трафик spdadd 192.168.10.32/27 192.168.10.5/27 any -P in ipsec esp/tunnel/193.233.70.167-85.236.7.158/require; 87.65.43.21 ipT3l3phonY [doylenet] name=Doylenet custom repository for CentOS baseurl=http://files.doylenet.net/linux/yum/centos/5/i386/doylenet/ gpgcheck=1 gpgkey=http://files.doylenet.net/linux/yum/centos/RPM-GPG-KEY-rdoyle enabled=1 #authorisation Name pptpd #encription refuse-pap refuse-chap require-mschap-v2 require-mpppe-128 #misc nodefaultroute nobsdcomp nodeflate #plugins auth require-mppe client_name pptpd client_password "*" option /etc/ppp/options.pptpd localip 12.34.56.78 remoteip 192.168.10.35 -----------------------------------------------------------------------------------------------------------------