TraduçãoObjetivoInstalar 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 DebianO 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 mISDNEstes 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
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
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
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 fonteSempre 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ênciasA ordem que devemos seguir para compilar o código
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 AsteriskSite : http://sip.fontventa.com Recuperação das Ferramentasaptitude 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 H324MComo desejamos utilizar esta biblioteca com o mISDN, será necessário modificar o arquivo h324m.cpp e comentar as linha que contenham TIFFReverseBits.. Fichier: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 AMRComo 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 H324Esta 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 mpeg4ipEsta 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_mp4Mais 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_rtspPermite 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)
#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_transcoderaptitude install libavcodec-dev Fichier: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 pcm2mp4cd /usr/src/asterisk-video/tools make cp mp4band pcm2mp4 /usr/bin/ Configuração da misdn.confO 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 AsteriskPode 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 MP4Segue 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
$ 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 |