Video Conferencia com Asterisk e MCU Media Server

De Tesliuk Wiki
Ir para: navegação, pesquisa

Tabela de conteúdo

Informações de Sistema

Abaixo o básico do sistema instalado

Sistema Operacional Debian

Atualizacao deste Documento

Atualizado dia 09 / 07 / 2013

Pre-Requisitos

Uma das coisas que utilizaremos nesta implementação é o java da sun, para ativarmos o mesmo via apt , precisamos acrescentar ao apt os repositórios non-free , abaixo segue a minha configuração do /etc/apt/sources.list

sources.lsit

Debian 7

deb http://debian.pop-sc.rnp.br/debian/ wheezy main contrib non-free
deb-src http://debian.pop-sc.rnp.br/debian/ wheezy main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

# squeeze-updates, previously known as 'volatile'
deb http://debian.pop-sc.rnp.br/debian/ wheezy-updates main contrib non-free
deb-src http://debian.pop-sc.rnp.br/debian/ wheezy-updates main

Debian 6

deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.us.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main

deb http://ftp.us.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main


Instalando as dependencias

Debian 7

apt-get install gcc make libncurses5-dev yasm g++ openjdk-6-jre openjdk-6-jdk checkinstall \
 libtheora-dev libvorbis-dev libssl-dev vim libgsm1-dev g++ make libtool yasm \
 subversion git automake  subversion yasm autoconf pkg-config libxml2-dev libcurl4-openssl-dev \
 git libtool automake  libsrtp-dev autoconf


Debian 6

apt-get install gcc make libncurses5-dev yasm g++ sun-java6-jre sun-java6-jdk checkinstall \
 libtheora-dev libvorbis-dev libssl-dev vim libgsm1-dev g++ make libtool yasm \
 subversion git automake  subversion yasm autoconf pkg-config libxml2-dev libcurl4-openssl-dev \
 git libtool automake  libsrtp-dev autoconf

Instalando o Sailfin

O Sailfin é a implementação de nosso serviço de web e SIP utilizado pela aplicação, o MCU Media Server rodará dentro deste

cd /usr/local
wget http://download.java.net/javaee5/sailfin/v2_branch/promoted/Linux/sailfin-installer-v2-b31g-linux.jar
java -Xmx256m -jar sailfin-installer-v2-b31g-linux.jar 
cd sailfin
chmod -R +x lib/ant/bin
lib/ant/bin/ant -f setup.xml 


Criando o script de inicialização

Crie o arquivo /etc/init.d/mcuWeb e adicione o conteúdo abaixo

#! /bin/sh
### BEGIN INIT INFO
# Provides:          mcuWeb
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: mcuWeb startup script
# Description:       mcuWeb startup script
### END INIT INFO
 
# Author: Sergio Garcia Murillo “sergio.garcia@fontventa.com”
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Start Sailfin domian domain1"
NAME="asadmin"
DAEMON=/usr/local/sailfin/bin/$NAME
START_ARGS="start-domain domain1"
STOP_ARGS="stop-domain domain1"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
 
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
 
#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        $DAEMON $START_ARGS || return 2
}
 
#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        $DAEMON $STOP_ARGS || return 2
}
 
case "$1" in
  start)
        [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && echo "Done" ;;
                2) [ "$VERBOSE" != no ] && echo "Failed" ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && echo "Done" ;;
                2) [ "$VERBOSE" != no ] && echo "Failed" ;;
    esac
        ;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        echo "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) echo "Done" ;;
                        1) echo "Old process is still running" ;; # Old process is still running
                        *) echo "Failed to start" ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                echo "Failed"
                ;;
        esac
        ;;
  *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

Vamos dar permissão de execução e adicionar ao boot

chmod +x /etc/init.d/mcuWeb
update-rc.d mcuWeb defaults

Agora vamos iniciar o serviço para realizarmos as configurações

/etc/init.d/mcuWeb start

Acessando a interface do GlassFish

Pela configuração padrão, a configuração irá rodar a administração na porta 4848 do ip do equipamento, então, acesse via browser

http://[IP_DO_SERVIDOR]:4848

Usuario: admin Senha: adminadmin

Confs de HTTP

Acesse no menu esquerdo o item

Configuration -> HTTP Service -> http-listener-1

Altere o valor de Listener port para 8090 e clique em save

Confs de SIP

No meu caso eu estou utilizando o serviço em uma maquina separada do meu asterisk então não vou alterar a porta do sip, caso você esteja utilizando na mesma maquina altere a porta em:

Configuration -> SIP Container

La voce tem SIP Port e SIP Security Port, altere para um valor conveniente, lembrando que quem enviará as chamadas será apenas o asterisk.

Se você alterou neste ponto então é necessário alterar também em

Configuration -> SIP Service -> SIP Listener ->

Ai em SIP Listener-1 e SIP Listener-2 os valores devem ser alterados conforme a alteração em SIP Container

Instalando o MCU

Vá no Menu Application e depois em Converged SIP Module e clique em Deploy

La você deverá informar um arquivo, então baixe o arquivo em

http://sourceforge.net/projects/mcumediaserver/files/mcumediaserver/

E indique o mesmo na caixa de seleção (no meu caso o review foi o 819)

Após dar o OK a aplicação base estará pronta (ainda não terminamos)

Você pode testar o acesso a interface do mcu através do endereço

http://[IP_DO_SERVIDOR]:8090/mcuWeb


Instalando o MediaMixer

Este cara é o responsável por fazer a mixagem do video das conferencias, e também é o responsável pela criação das salas de conferência.

Vamos utilizar os caminhos padrões que o pessoal da medooze utiliza para manter o padrão com a documentação deles


mkdir -p /usr/local/src
cd /usr/local/src

Compilando as dependencias

Vamos ter que compilar algumas aplicações para que o mediamixer funcione corretamente, então vamos por a mão na massa

xmlrcp-c

Faça o download do xmlrpc

wget http://downloads.sourceforge.net/project/xmlrpc-c/Xmlrpc-c%20Super%20Stable/1.16.35/xmlrpc-c-1.16.35.tgz

(lembrando que você deve estar no diretorio /usr/local/src)

Descompacte o mesmo

tar -xzvf xmlrpc-c-1.16.35.tgz


Speex

Speex é um codec de audio suportado pela aplicação, eu cheguei a implementar sem ele, mas vamos seguir as instruções do desenvolvedor

wget http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz
tar -xzvf speex-1.2rc1.tar.gz

Opus

O Opus é um outro codec de audio suportado pela aplicação

wget http://downloads.xiph.org/releases/opus/opus-1.0.2.tar.gz
tar -xzvf opus-1.0.2.tar.gz

mcumediaserver

svn checkout svn://svn.code.sf.net/p/mcumediaserver/code/trunk medooze

mp4v2

svn checkout http://mp4v2.googlecode.com/svn/trunk/ mp4v2

libvpx

git clone http://git.chromium.org/webm/libvpx.git

ffmpeg

git clone git://git.videolan.org/ffmpeg.git

x264

git clone git://git.videolan.org/x264.git

Iniciando as compilações

Antes de mais nada acrescente o diretorio /usr/local/lib em seu arquivo /etc/ld.so.conf


x264

cd /usr/local/src/x264
./configure --enable-debug --enable-shared --enable-pic --disable-asm
make
make install
ldconfig 


ffmpeg

cd /usr/local/src/ffmpeg
./configure --enable-shared --enable-gpl --enable-nonfree --disable-stripping --enable-zlib --enable-avresample --enable-decoder=png
make
make install

xmlrpc-c

cd /usr/local/src/xmlrpc-c-1.16.35
./configure
touch /usr/include/curl/types.h

Agora damos sequencia na compilação

make
make install

mp4v2

cd /usr/local/src/mp4v2/
autoreconf -fiv
./configure
make
make install

vp8

cd /usr/local/src/libvpx
./configure --enable-shared
make
make install

speex

cd /usr/local/src/speex-1.2rc1
./configure
make
make install

opus

cd /usr/local/src/opus-1.0.2
./configure
make
make install

Instalando o suporte a VAD

cd /usr/local/src
svn co http://src.chromium.org/chrome/trunk/tools/depot_tools
export PATH="$PATH":/usr/local/src/depot_tools
mkdir webrtc
cd webrtc
gclient config http://webrtc.googlecode.com/svn/trunk
gclient sync --force
gclient runhooks --force
cd trunk
ninja -C out/Release/ common_audio

MCU MediaMixer

Agora voltamos para o mcu

cd /usr/local/src/medooze/
mv mcu /usr/local/src/
cd /usr/local/src/mcu
make
make install
cd /usr/local/
ln -s /usr/local/src/mcu/
ldconfig


Colocando na inicialização

Crie o arquivo /etc/init.d/mediamixer e coloque o conteudo abaixo.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          mcu
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: MCU Videomixer
# Description:       Starts and stops mcu Video Mixer
### END INIT INFO
 
# Do NOT "set -e"
 
# Media Mixer installation directory
MCU="/usr/local/mcu/bin/debug"
# Username to run application server
USER="root"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="MCU Video Media Mixing Server"
DAEMON="${MCU}/mcu"
DAEMONPARAMS=""
SCRIPTNAME="mcu"
 
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
 
#
# Function that starts the daemon/service
#
do_start()
{
        echo -n "Starting $DESC:"
        cd $MCU && nohup $DAEMON $DAEMONPARAMS > /var/log/mcu 2>&1 &
        echo "Done"
}
 
#
# Function that stops the daemon/service
#
do_stop()
{
        echo -n "Stopping $DESC:"
        killall -9 mcu
        echo "Done"
}
 
 
case "$1" in
  start)
        do_start
        ;;
  stop)
        do_stop
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC"
        do_stop
        do_start
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

Agora damos permissão e colocamos no boot

chmod +x /etc/init.d/mediamixer
update-rc.d mediamixer defaults

Iniciando o mcu

/etc/init.d/mediamixer start

Configurando uma sala de conferencia

Agora acessamos a interface do mcuWeb

http://[IP_DO_SERVIDOR]:8090/mcuWeb

Clique no botao Add na sessão mediamixer Preencha a tela com

Name: Qualquer coisa
Url: http://127.0.0.1:8080/mcu
Media IP: [IP_DO_SERVIDOR
Public IP: [IP_DO_SERVIDOR]

Após cadastrará ele devera mostrar uma mensagem up and running e deverá exibir algumas opções a mais, a que nos interessa neste momento é conference list, clique em create e entre com os dados


Preste atenção no valor que você coloca no DID, pois este valor que o asterisk usará no dial para o servidor


2013/01/16 - Na instalação atual ele não trouxe os perfis de video , entao tive que criar o profile manualmente, abaixo temos uma seção com exemplos


Configuracao do profile

Para o profile quando necessário criar manualmente eu encontrei estas configurações, utilize apenas se necessário.

LowQuality:

   Bitrate: 128
   Fps     : 10
   Intraperiod: 100

High Quality:

   Bitrate: 2048
   Fps: 30
   Intraperiod: 300

Medium Quality:

    Birate: 512
    FPS: 15
    Intraperiod: 150

Configurando o asterisk

Eu aqui não vou entrar em grandes detalhes do asterisk, irei passar apenas o essencial, pois se você quer video conferencia eu presumo que voce ja sabe fazer o basico no asterisk.

sip.conf

Tronco mcuweb

Adicione no inicio do arquivo sip.conf (em [general], a opção videosupport=yes)


No sip.conf vamos adicionar o tronco do nosso mediaserver

[mcuweb]
videosupport=yes
type=peer
host=IP_DO_SERVIDOR
port=5060 ; VEJA ESTA PORTA SE A MESMA QUE VOCE USOU
canreinvite=no
qualify=no
disallow=all
nat=no
allow=ulaw
allow=alaw
allow=speex
allow=h263
allow=h263p
allow=h264

Usuario com Video

[USUARIO]
type=friend
secret=SENHA
qualify=yes
port=5060
nat=yes
allow=h264
allow=h263
host=dynamic
dtmfmode=rfc2833
dial=SIP/114
context=videoconferencia
canreinvite=no

extensions.conf

No meu caso a conferencia eu criei com o DID 998 , então abaixo o contexto videoconferencia

[videoconferencia]
exten => 998,1,Dial(SIP/mcuweb/${EXTEN})

Reload no asterisk

asterisk -rx "core reload"

Agora tente fazer a chamada e veja se ocorre tudo bem, se você seguiu tudo corretamente a conferencia funcionara


Referencias

http://www.medooze.com
http://www.medooze.com/products/media-mixer-server/installation.aspx
http://sourceforge.net/projects/mcumediaserver/forums/forum/853498/topic/4760021



Voltar

Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Telefonia
Linux
Outros
Ferramentas