Sommaire

Tradução

Objetivo

Instalar o Asterisk 1.4 com suporte de vídeo 3G utilizando uma distribuição Debian etch. Vamos também utilizar uma placa Digium B410P com porta BRI. (T0)

Atualmente este tutorial funciona com os celulares Nokia N95 e o último LG. Aparentemente não funciona com o celular Sony Ericson k600i.

Instalação / Atualização do Debian

O primeiro passo a ser realizado instalar um sistema GNU/Linux. Para este artigo foi utilizado a distribuição Debian, disponvel no site http://www.debian.org.

Uma vez finalizado a instalação e como se trata de uma nova instalação, necessário realizar a atualização do sistema.

Digite no prompt

aptitude update
aptitude dist-upgrade

Responda Y para atualizar o sistema. Reinicie sua máquina para certificar-se que as atualizações do Kernel foram efetuadas corretamente.

reboot

Instalação dos Drivers mISDN

Estes drivers permitem realizar uma conexão através de um T0 através de uma placa B410P fabricada pela Digium

É necessário instalar as ferramentas para compilar os fontes, assim como os headers do Kernel para compilar os módulos mISDN.
aptitude install build-essential
aptitude install linux-headers-2.6.18-5-686
cd /usr/src
wget http://www.misdn.org/downloads/releases/mISDN-1_1_7.tar.gz
tar xfvz mISDN-1_1_7.tar.gz
cd mISDN-1_1_7
make
make install
cd ..
aptitude install flex
 wget http://www.misdn.org/downloads/releases/mISDNuser-1_1_7.tar.gz
tar xfvz mISDNuser-1_1_7.tar.gz
cd mISDNuser-1_1_7
make
make install


Instalação das pendências para o mISDN

aptitude install pciutils bc

Configuração da Placa

/etc/init.d/misdn-init scan
/etc/init.d/misdn-init config
/etc/init.d/misdn-init start

Comprovação da presença das pendências necessárias.

Utilizamos o aplicativo dpkg para comprovar a presença dos pacotes openssl, zlib, zlib-devel, curl, libnewt-dev.

dpkg -l libncurses5 libncurses5-dev libssl0.9.7 libssl-dev zlib1g zlib1g-dev curl libnewt-dev
Desired=Unknown/Install/Remove/Purge/Hold
| Estado=No/Instalado/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: maysc.=malo)
||/ Nombre                            Versin                           Descripcin  
+++-=================================-=================================-=========================================
ii  libncurses5                       5.4-4                             Shared libraries for terminal handling
ii  libncurses5-dev                   5.4-4                             Developer's libraries and docs for ncurses
ii  libssl0.9.7                       0.9.7e-3sarge4                    SSL shared libraries
ii  libssl-dev                        0.9.7e-3sarge4                    SSL development libraries, header files and documentation
ii  libnewt-dev                       0.52.2-10                         Developer's toolkit for newt windowing library
ii  zlib1g                            1.2.2-4.sarge.2                   compression library - runtime
ii  zlib1g-dev                        1.2.2-4.sarge.2                   compression library - development
ii  curl                              7.13.2-2sarge5                    Get a file from an HTTP, HTTPS, FTP or GOPHER server


Você deve possuir todos estes pacotes instalados.

Caso você não os tenha instalado, basta utilizar o comando abaixo para fazer a instalação destes pacotes:

aptitude install libncurses5 libncurses5-dev libssl0.9.7 libssl-dev zlib1g zlib1g-dev curl libnewt-dev

Realizar o Download do Código Fonte da Versão 1.4

  1. Em um terminal, conecte-se como root.
  2. Troque de diretório
cd  /usr/src 
wget http://downloads.digium.com/pub/asterisk/asterisk-1.4.15.tar.gz
wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.4.5.tar.gz
wget http://downloads.digium.com/pub/zaptel/zaptel-1.4.7.tar.gz
wget http://downloads.digium.com/pub/telephony/libpri/libpri-1.4.2.tar.gz
wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-fr-wav-current.tar.gz
wget http://downloads.digium.com/pub/telephony/sounds/asterisk-moh-freeplay-wav.tar.gz

Descompactar o código fonte

Sempre conectado como root, dentro do diretório /usr/src, descompacte o código fonte:

tar xfvz asterisk-1.4.15.tar.gz
tar xfvz asterisk-addons-1.4.5.tar.gz
tar xfvz libpri-1.4.2.tar.gz
tar xfvz zaptel-1.4.7.tar.gz

Você agora deve possuir os seguintes diretórios:

libpri-1.4.2
zaptel-1.4.7
asterisk-1.4.15
asterisk-addons-1.4.5

Lidaremos com os arquivos de sons e os arquivos de música em espera mais tarde

Compilar o Asterisk e suas dependências

A ordem que devemos seguir para compilar o código

  1. libpri
  2. zaptel
  3. asterisk
  4. asterisk-addons


Observe que o Zaptel e o Asterisk possuem uma etapa complementar: make config

O make config configura o Linux para iniciar estes aplicações em sua inicialização.

cd libpri-1.4.2
make
make install
cd ..
cd zaptel-1.4.7
./configure
make 
make install
make config 
cd ..
cd asterisk-1.4.15
./configure
make
make install
make samples
make config
cd ..
cd asterisk-addons-1.4.5
./configure
make
make install
make samples
cd ..

A próxima etapa consiste em reiniciar o sistema, após o qual você já irá ter um sistema Asterisk operante.

Instalação do Suporte 3G Asterisk

Site : http://sip.fontventa.com

Recuperação das Ferramentas

aptitude install subversion
aptitude install libpt-1.11.2-dev
cd /usr/src/
svn co http://sip.fontventa.com/svn/asterisk/ asterisk-video
cd asterisk-video

Como Compilar a Biblioteca H324M

Como desejamos utilizar esta biblioteca com o mISDN, será necessário modificar o arquivo h324m.cpp e comentar as linha que contenham TIFFReverseBits..

Image:Warning.gif Somente válido para mISDN e não para Zaptel. Ver o link : http://sip.fontventa.com/content/view/26/53/

Podemos utilizar o seguinte Patch. Basta criar um arquivo denominado, por exemplo, misdn_patch_h324m.diff no diretório /usr/src/asterisk-video/libh324m com o seguinte conteúdo:

--- h324m.cpp   2007-12-17 09:06:50.000000000 +0100
+++ h324m.cpp.orig      2007-12-17 09:06:22.000000000 +0100
@@ -40,14 +40,14 @@ 

 int  H324MSessionRead(void * id,unsigned char *buffer,int len)
 { 
-       //TIFFReverseBits(buffer,len);
+       TIFFReverseBits(buffer,len);
        return ((H324MSession*)id)->Read(buffer,len); 
 }
 
 int  H324MSessionWrite(void * id,unsigned char *buffer,int len)
 { 
        int ret = ((H324MSession*)id)->Write(buffer,len); 
-       //TIFFReverseBits(buffer,len);
+       TIFFReverseBits(buffer,len);
       return ret;
}

Assim

cd /usr/src/asterisk-video/libh324m

Para aplicar o Patch

patch -p0 < misdn_patch_h324m.diff

Então pode ser finalizar a etapa de compilar a Biblioteca

cd /usr/src/asterisk-video/libh324m
make
make install

Instalação do Codec AMR

Como o codec AMR não está disponível por padrão no Asterisk, iremos fazer a sua instalação agora:

cd /usr/src/asterisk-1.4.15
patch -p0 < /usr/src/asterisk-video/amr/amr-asterisk-patch.txt
cd codecs
ln -s ../../asterisk-video/amr/amr_slin_ex.h .
ln -s ../../asterisk-video/amr/slin_amr_ex.h .
ln -s ../../asterisk-video/amr/codec_amr.c .
mkdir amr
cd amr
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-700.zip
aptitude install unzip
unzip -j 26104-700.zip
unzip -j 26104-700_ANSI_C_source_code.zip
ln -s ../../asterisk-video/amr/Makefile .

Editar o arquivo Makefile em /usr/src/asterisk-1.4.15/codecs e modificar a linha 59:

vi /usr/src/asterisk-1.4.15/codecs/Makefile

Substituir

$(LIBAMR):
        @$(MAKE) -C amr

por

$(LIBAMR):
        @$(MAKE) -C amr all

Modifique também os arquivos interf_enc.c e interf_dec.c retirando os caracteres presentes na última linha de ambos.

Retorne ao diretório onde está localizado o código fonte do Asterisk.

cd /usr/src/asterisk-1.4.15/
./configure
make
make install

Adicione a seguinte linha no arquivo de configuração de codecs do Asterisk (/etc/asterisk/codecs.conf)

[amr]
octet-aligned=1

Instalação da Aplicação Gateway H324

Esta aplicação irá disponibilizar comandos para receber e enviar chamadas em 3G. Vamos criar um pequeno Makefile a fim de compilar com mais facilidade a aplicação

cd /usr/src/asterisk-video/app_h324m
cat Makefile << EOF
---------- cut ------------
CFLAGS ?= -O2 -fPIC
Z_CFLAGS := $(CFLAGS) -D _GNU_SOURCE -Wall -Wmissing-prototypes -Wstrict-prototypes
LIBS ?=
Z_LIBS := $(LIBS) -lpthread -lh324m

BINARY = app_h324m.so
OBJECTS = app_h324m.o

DESTDIR ?=
PREFIX ?= /usr

.PHONY: install clean

$(BINARY): $(OBJECTS)
        $(CC) -shared -Xlinker -x -o $(BINARY) $(OBJECTS) $(Z_LIBS)

%.o: %.c
        $(CC) $(Z_CFLAGS) -c -o $@ $<

install: $(BINARY)
        install -d $(DESTDIR)$(PREFIX)/lib/asterisk/modules
        install -m 755 $(BINARY) $(DESTDIR)$(PREFIX)/lib/asterisk/modules

clean:
        rm -f $(BINARY) $(OBJECTS)
---------- cut ---------
EOF

Será também necessário modificar o arquivo app_h324m.c adicionando na linha 48 o seguinte #define.

#define AST_MODULE      "h324m application"


Instalação da Biblioteca mpeg4ip

Esta biblioteca tem a dependência da aplicação app_mp4.

cd /usr/src/
wget http://heanet.dl.sourceforge.net/sourceforge/mpeg4ip/mpeg4ip-1.5.0.1.tar.gz
tar xfvz mpeg4ip-1.5.0.1.tar.gz
cd mpeg4ip-1.5.0.1
aptitude install libtool
./bootstrap
./configure --disable-player --prefix=/usr
make
make install


Instalação da Aplicação app_mp4

Mais uma vez iremos criar um pequeno arquivo Makefile.

cd /usr/src/asterisk-video/app_mp4
cat Makefile << EOF
---------- cut ------------
CFLAGS ?= -O2 -fPIC
Z_CFLAGS := $(CFLAGS) -D _GNU_SOURCE -Wall -Wmissing-prototypes -Wstrict-prototypes
LIBS ?=
Z_LIBS := $(LIBS) -lpthread -lmp4 -lmp4v2

BINARY = app_mp4.so
OBJECTS = app_mp4.o

DESTDIR ?=
PREFIX ?= /usr

.PHONY: install clean

$(BINARY): $(OBJECTS)
        $(CC) -shared -Xlinker -x -o $(BINARY) $(OBJECTS) $(Z_LIBS)

%.o: %.c
        $(CC) $(Z_CFLAGS) -c -o $@ $<

install: $(BINARY)
        install -d $(DESTDIR)$(PREFIX)/lib/asterisk/modules
        install -m 755 $(BINARY) $(DESTDIR)$(PREFIX)/lib/asterisk/modules

clean:
        rm -f $(BINARY) $(OBJECTS)
---------- cut ---------
EOF

Modificar a linha 51 do arquivo app_mp4.c e adicionar a seguinte linha:

#define AST_MODULE      "MP4 application"

Continuar com a compilação utilizando os seguinte comandos :

make
make install

Compilar a Aplicação app_rtsp

Permite criar um fluxo de stream RTSP.

CFLAGS ?= -O2 -fPIC
Z_CFLAGS := $(CFLAGS) -D _GNU_SOURCE -Wall -Wmissing-prototypes -Wstrict-prototypes
LIBS ?=
Z_LIBS := $(LIBS) -lpthread 

BINARY = app_rtsp.so
OBJECTS = app_rtsp.o

DESTDIR ?=
PREFIX ?= /usr

.PHONY: install clean

$(BINARY): $(OBJECTS)
        $(CC) -shared -Xlinker -x -o $(BINARY) $(OBJECTS) $(Z_LIBS)

%.o: %.c
        $(CC) $(Z_CFLAGS) -c -o $@ $<

install: $(BINARY)
        install -d $(DESTDIR)$(PREFIX)/lib/asterisk/modules
        install -m 755 $(BINARY) $(DESTDIR)$(PREFIX)/lib/asterisk/modules

clean:
        rm -f $(BINARY) $(OBJECTS)


Não se esqueça também de adicionar o seguinte #define no arquivo app_rtsp.c

#define AST_MODULE "Rtsp application"

Como tinhamos feito anteriormente para compilar os outros aplicativos, basta utilizar os seguinte comandos:

make
make install

Para utilizá-lo coloque em seu arquivo sip.conf na seção [ general ].

videosupport=yes

disable=all
allow=ulaw
allow=alaw
allow=h263
allow=h263p

Coloque em seu plano de discagem (/etc/asterisk/extensions.conf) na seção [ default ] por exemplo :

[default]
exten => 5003,1,Answer()
exten => 5003,n,Rtsp(rtsp://192.168.1.1/live.sdp)
exten => 5003,n,Hangup()

Instalação da Aplicação app_transcoder

aptitude install libavcodec-dev

Image:Warning.gif O arquivo swscale.h foi removido no pacote Debian. E necessário recuperá-lo para poder compilar corretamente a aplicação app_transcoder

Adicione um repositório atual em seu arquivo /etc/apt/sources.list.

deb-src http://ftp.fr.debian.org/debian/ etch main contrib non-free

A seguir faça o download do código fonte ffmpeg.

cd /usr/src
apt-get source ffmpeg

A seguir copie o header que falta no diretório include.

cp /usr/src/ffmpeg-0.cvs20060823/libavcodec/swscale.h /usr/include/ffmpeg/

Adicione na linha 47 do arquivo app_transcoder.c a seguinte linha

#define AST_MODULE      "Transcoder application"

A seguir crie o arquivo Makefile

CFLAGS ?= -O2 -fPIC
Z_CFLAGS := $(CFLAGS) -D _GNU_SOURCE -Wall -Wmissing-prototypes -Wstrict-prototypes
LIBS ?=
Z_LIBS := $(LIBS) -lpthread -lavcodec

BINARY = app_transcoder.so
OBJECTS = app_transcoder.o

DESTDIR ?=
PREFIX ?= /usr

.PHONY: install clean

$(BINARY): $(OBJECTS)
        $(CC) -shared -Xlinker -x -o $(BINARY) $(OBJECTS) $(Z_LIBS)

%.o: %.c
        $(CC) $(Z_CFLAGS) -c -o $@ $<

install: $(BINARY)
        install -d $(DESTDIR)$(PREFIX)/lib/asterisk/modules
        install -m 755 $(BINARY) $(DESTDIR)$(PREFIX)/lib/asterisk/modules

clean:
        rm -f $(BINARY) $(OBJECTS)

Como nos anteriores, basta utilizar os seguintes comandos para compilar :

make
make install

Para utilizá-la adicione no arquivo extensions.conf a seguinte seção [ default ]:

exten => 5004,1,Answer()
exten => 5004,n,Transcode(,s@camera,h263@qcif/fps=10/kb=52/qmin=4/qmax=12/gs=50)
exten => 5004,n,Hangup()

[camera] 
exten => s,1,Answer()
exten => s,n,Rtsp(http://192.168.1.2/live.sdp)
exten => s,n,Hangup()

Instalação das ferramentas pcm2mp4

cd /usr/src/asterisk-video/tools
make
cp mp4band pcm2mp4 /usr/bin/

Configuração da misdn.conf

O arquivo de configuração misdn.conf utilizado neste artigo, localizado no diretório /etc/asterisk.

[general] 
misdn_init=/etc/misdn-init.conf
debug=0
ntdebugflags=0
ntdebugfile=/var/log/misdn-nt.log
ntkeepcalls=no
bridging=no
l1watcher_timeout=0
stop_tone_after_first_digit=yes
append_digits2exten=yes
dynamic_crypt=no
crypt_prefix=**
crypt_keys=test,muh

[default]
context=from-misdn
language=fr
musicclass=default
senddtmf=yes
far_alerting=no
allowed_bearers=all
nationalprefix=0
internationalprefix=00
rxgain=0
txgain=0
te_choose_channel=no
pmp_l1_check=no
reject_cause=16
need_more_infos=no
nttimeout=no
method=standard
overlapdial=yes
dialplan=0
localdialplan=0
cpndialplan=0
early_bconnect=yes
incoming_early_audio=yes
nodialtone=no
presentation=-1
screen=-1
echocancel=no
echotraining=no
jitterbuffer=4000
jitterbuffer_upper_threshold=0
hdlc=yes
max_incoming=-1
max_outgoing=-1

[extern]
ports=1,2
msns=*

Plano de Discagem Asterisk

Pode agora criar uma chamada de fora editando o arquivo extensions.conf en /etc/asterisk para possuir o seguinte plano de discagem

[default]

exten => 5002,1,H324m_gw(sylvain@3gp_videos)

exten => 5003,1,Answer()
exten => 5003,n,Rtsp(rtsp://192.168.1.1/live.sdp)
exten => 5003,n,Hangup()

exten => 5004,1,Answer()
exten => 5004,n,Transcode(,s@camera,h263@qcif/fps=10/kb=52/qmin=4/qmax=12/gs=50)
exten => 5004,n,Hangup()

[camera]
exten => s,1,Answer()
exten => s,n,Rtsp(http://192.168.1.2/live.sdp)
exten => s,n,Hangup()

[3gp_videos]

exten => sylvain,1,H324m_gw_answer()
exten => sylvain,n,Video_loopback()

[from-misdn]

exten => 9965,1,Goto(default,5002,1)


Mini tutorial MP4

Segue aqui um tutorial proposto por Sergio García em seu site Web porém em Português do Brasil (Referencia : http://sip.fontventa.com/content/view/34/66/)

Vamos instalar exatamente a dependência exigida para este tutorial

aptitude install ffmpeg

O arquivo que irá ser utilizado neste artigo pode ser encontrado no seguinte endereço: http://sip.fontventa.com/files/sample_300kbit_ulaw.3gp

Antes de poder utilizar um arquivo mp4 com app_rtsp e o fluxo de um servidor com um telefone que suporte vídeo, é necessário codificar este arquivo em um formato que seja suportado pelo telefone.

A maioria dos servidores de streaming suportam os arquivos do tipo mp4/3gp. O formato formato h263-1998 segue sendo sem dúvida a melhor escolha para codificar um vídeo e existem muitas ferramentas para fazé-lo. O problema é que os codecs de áudio utilizados em um telefone que suporte vídeo (gsm/speech/g723/g729) não são geralmente utilizados para se realizar streaming, onde são utilizados os formatos AAC/MP3.

O formato do arquivo mp4 permite armazenar qualquer tipo de dado, porém não existem muitas ferramentas capazes de permitir que se faça estas alterações.

As ferramentas pcm2mp4 permitem criar um arquivo mp4 com uma pista de áudio PCMU (ulaw). Com isso você pode utilizar fluxos de stream com origem de seus vídeos.

Vamos utilizar um arquivo exemplo convertido em h263 para este mini tutorial.

$ mp4info sample_300kbit.3gp
mp4info version 1.5.0.1
sample_300kbit.3gp:
Track Type Info
201 video H.263, 69.973 secs, 94 kbps, 176x144 @ 10.003859 fps
65335 hint Payload H263-2000 for track 201
101 audio MPEG-4 AAC LC, 70.000 secs, 8 kbps, 12000 Hz
65435 hint Payload MP4A-LATM for track 101
1 od Object Descriptors
2 scene BIFS

Primeiramente vamos extrair as mídias do nosso arquivo.

$ mp4creator -extract=201 sample_300kbit.3gp
$ mv sample_300kbit.3gp.t201 sample_300kbit.263
$ mp4creator -extract=101 sample_300kbit.3gp
$ mv sample_300kbit.3gp.t101 sample_300kbit.aac


Vamos então converter o formato de áudio AAC para o formato PCMU.

$ ffmpeg -i sample_300kbit.aac -acodec pcm_mulaw -ar 8000 -ac 1 -f mulaw sample_300kbit.mulaw
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2006 Fabrice Bellard, et al.
configuration: --prefix=/usr --libdir=${prefix}/lib --shlibdir=${prefix}/lib --incdir=${prefix}/include/ffmpeg --enable-shared --enable-mp3lame
--enable-gpl --enable-faad --mandir=${prefix}/share/man --enable-vorbis --enable-pthreads --enable-faac --enable-xvid --enable-dts --enable-amr_nb
--enable-amr_wb --enable-pp --enable-libogg --enable-libgsm --enable-x264 --enable-a52 --extra-cflags=-Wall -g -fPIC -DPIC --cc=ccache cc
libavutil version: 49.1.0
libavcodec version: 51.28.0
libavformat version: 51.7.0
built on Jan 19 2007 17:05:58, gcc: 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Input #0, aac, from 'sample_300kbit.aac':
Duration: 00:01:09.4, start: 0.000000, bitrate: 8 kb/s
Stream #0.0: Audio: aac, 12000 Hz, mono, 8 kb/s
Output #0, mulaw, to 'sample_300kbit.mulaw':
Stream #0.0: Audio: pcm_mulaw, 8000 Hz, mono, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
size= 2184kB time=70.0 bitrate= 64.0kbits/s
video:0kB audio:2184kB global headers:0kB muxing overhead 0.000000%

Vamos agora utilizar as ferramentas para criar um novo arquivo mp4 como o arquivo de áudio já convertido para PCMU.

$ /usr/bin/pcm2mp4 sample_300kbit.mulaw sample_300kbit_ulaw.3gp
$ mp4info sample_300kbit_ulaw.3gp
mp4info version 1.5.0.1
sample_300kbit_ulaw.3gp:
Track Type Info
1 audio G.711 uLaw, 70.000 secs, 64 kbps, 8000 Hz
2 hint Payload PCMU for track 1

Continuando, iremos adicionar a parte de vídeo h263.

$ mp4creator -create=sample_300kbit.263 sample_300kbit_ulaw.3gp
$ mp4info sample_300kbit_ulaw.3gp
mp4info version 1.5.0.1
sample_300kbit_ulaw.3gp:
Track Type Info
1 audio G.711 uLaw, 70.000 secs, 64 kbps, 8000 Hz
2 hint Payload PCMU for track 1
3 video H.263, 69.903 secs, 94 kbps, 176x144 @ 10.013876 fps
$ mp4creator -hint=3 sample_300kbit_ulaw.3gp
$ mp4info sample_300kbit_ulaw.3gp
mp4info version 1.5.0.1
sample_300kbit_ulaw.3gp:
Track Type Info
1 audio G.711 uLaw, 70.000 secs, 64 kbps, 8000 Hz
2 hint Payload PCMU for track 1
3 video H.263, 70 secs, 94 kbps, 176x144 @ 10.013876 fps
4 hint Payload H263-2000 for track 3
Metadata Tool: mp4creator 1.5.0.1

Tradução para Português do Brazil por André Gustavo Lomônaco

http://www.ipplus.com.br

Powered by MediaWiki