Sommaire

Traducción

Objetivo

Instalar Asterisk 1.4 con soporte de vídeo 3G sobre una distribución Debian etch. Vamos a utilizar una tarjeta Digium B410P con puerto BRI. (T0)

De momento parece funcionar con un teléfono Nokia n95 y el último LG. No parece que funcione con un Sony Ericson k600i.

Instalación / actualización de debian

La primera cosa que debemos hacer será instalar un sistema en explotación GNU/Linux. Nosotros vamos a elegir la distribución debian. Disponible en http://www.debian.org.

Una vez ha acabado la instalación y dado que se trata de una instalación muy nueva, debemos poner al día nuestra herramienta de actualización.

Escribimos en un prompt

aptitude update
aptitude dist-upgrade

Responda Y a la actualización. Luego reincie su máquina ya que hay seguramente actualizaciones sobre el núcleo linux.

reboot

Instalación de los drivers mISDN

Estos drivers nos permitirán tener una conexión sobre un T0 con una tarjeta B410P de la casa Digium.

Si nunca ha instalado las herramientas de compilación no oblide instalarlas, así como los kernel headers para los 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


Instalación de las dependencias para mISDN

aptitude install pciutils bc

Luego la configuración de la tarjeta

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

Comprobación de la presencia de las dependencias necesarias.

En un terminal utilizamos dpkg para comprobar la presencia de 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: mayúsc.=malo)
||/ Nombre                            Versión                           Descripción  
+++-=================================-=================================-=========================================
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


Debe tener todos los paquetes requeridos instalados.

Si eso no es el caso será necesario instalarlos con el comando :

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

Descargar los tarballs del código fuente de la versión 1.4

  1. En un terminal, conéctese como root con sudo - s.
  2. Cambie de directorio
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

Descomprimir el código fuente

Siempre conectado como root, en el directorio/usr/src, descomprima el código fuente:

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

Deben tener ahora los siguientes directorios:

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

Trataremos los ficheros de sonidos y los ficheros de la música en espera un poco más tarde

Compilar Asterisk y sus dependencias

El orden que debemos seguir para compilar el código

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


Observarán que Zaptel y Asterisk poseen una etapa suplementaria: make config

El make config configura linux para que lance estas aplicaciones al incio.

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 ..

Después de la próxima etapa que consiste en volver a arrancar, deben tener un Asterisk funcional.

Instalación del soporte 3G Asterisk

Desarrollador : http://sip.fontventa.com

Recuperación de las herramientas

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

Compilación de la librería H324M

Como deseamos utilizar esta librería con mISDN, será necesario modificar el fichero h324m.cpp y comentar las líneas con/que contengan TIFFReverseBits..

image:warning.gif Sólo válido para mISDN y no para zaptel. Ver el vínculo : http://sip.fontventa.com/content/view/26/53/

Vamos a modificarlo con este pequeño patch. Basta con copiarlo en un fichero, por ejemplo misdn_patch_h324m.diff luego lo copiamos al directorio.

El patch

--- 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;
}

Luego

cd /usr/src/asterisk-video/libh324m
cp <endroit_de_votre_patch> .

Para parchear

patch -p0 < misdn_patch_h324m.diff

Luego podremos compilar la librería

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

Instalación del codec AMR

Vamos a instalar nuestro codec AMR con la finalidad de que se tenga en cuenta este codec que no está por defecto en Asterisk.

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 el fichero Makefile en/usr/src/asterisk-1.4.15/codecs y modificar la línea 59:

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

Cambiar

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

por

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

Puede también modificar los ficheros interf_enc.c e interf_dec.c retirando los caracteres raros al final del fichero. Luego retorne a las fuentes de Asterisk.

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

Añada la línea siguiente a su fichero de configuración de los codecs Asterisk (/etc/asterisk/codecs.conf)

[amr]
octet-aligned=1

Instalación de la aplicación H324 gateway

Esta aplicación permitirá tener comandos para recibir y emitir llamadas en 3G. Vamos a añadir un pequeño a Makefile con el fin de poder recompilar más fácilmente nuestra aplicación.

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á necesario modificar también el fichero app_h324m.c añadiendo en la línea 48 este #define.

#define AST_MODULE      "h324m application"


Instalación de la librería mpeg4ip

Esta librería es una dependencia de la aplicación 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


Instalación de la aplicación app_mp4

Vamos una vez más a crear un fichero 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 la línea 51 del fichero app_mp4.c y añadir esto :

#define AST_MODULE      "MP4 application"

Luego lanzar la compilación con :

make
make install


Compilación de la aplicación app_rtsp

Permite crear un stream de flujo 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)


No olvide también añadir el #define en el fichero app_rtsp.c

#define AST_MODULE "Rtsp application"

Como hemos hecho anteriormente, copiar el fichero Makefile y luego teclear :

make
make install

Para utilizarlo ponga en su sip.conf en [ general ].

videosupport=yes

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

Luego en su dialplan (/etc/asterisk/extensions.conf) en la sección [ default ] por ejemplo :

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

Instalación de la aplicación app_transcoder

aptitude install libavcodec-dev

image:warning.gif El fichero swscale.h ha sido borrado explícitamente por el packaging de debian ya que se ve como más utilizado. Vamos pues a recuperarlo para compilar correctamente nuestra aplicación.

Añada un repositorio fuente en su fichero/etc/apt/sources.list.

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

Luego descargue las fuentes de ffmpeg.

cd /usr/src
apt-get source ffmpeg

Luego vamos a copiar el header que falta en el directorio de los includes.

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

Añadir en la línea 47 del fichero app_transcoder.c.

#define AST_MODULE      "Transcoder application"

Luego ponga el fichero 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)

Luego bastará con lanzar :

make
make install

Para utilizarla añadir en el fichero extensions.conf en la sección [ 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()

Instalación de las herramientas pcm2mp4

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

Configuración de misdn.conf

He aquí el fichero de configuración misdn.conf que utilizo, situado en/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=*

Dialplan Asterisk

Puede ahora crear una llamada desde el exterior hacia su Asterisk como cuña por ejemplo editando su fichero extensions.conf en /etc/asterisk.

[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

He aquí el tutorial propuesto por Sergio García en su sitio web pero en Castellano. (Referencia : http://sip.fontventa.com/content/view/34/66/)

Vamos a instalar exactamente una dependencia requerida para este tutorial.

aptitude install ffmpeg

El fichero se puede descargar aquí : http://sip.fontventa.com/files/sample_300kbit_ulaw.3gp

Antes de poder utilizar un fichero mp4 con app_rtsp y el streamer desde un servidor con un teléfono vídeo, debe ser codificado con un formato que soporte el teléfono.

Muchos servidores de streaming soportan los ficheros de tipo mp4/3gp. El formato h263-1998 sigue siendo sin embargo la mejor elección para codificar un vídeo y existen muchas herramientas para editarlo/modificarlo el problema es que los codecs de audio utilizados sobre un teléfono vídeo (gsm/speech/g723/g729) no se utilizan especialmente para hacer el streaming contrariamente a AAC/MP3.

El formato de fichero mp4 permite almacenar cualquier tipo de dato, pero no muchas herramientas son capaces de permitirnos hacer eso.

Las herramientas pcm2mp4 permiten crear un fichero mp4 con una pista audio PCMU (ulaw). Puede utilizarse para que se hagan pruebas de streaming. (Otros codecs podrían integrarse fácilmente)

Vamos a utilizar un fichero de sample convertido en h263 para este mini tutoriel.

$ 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

En primer lugar vamos a extraer los dos medios de nuestro fichero.

$ 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


Luego vamos a convertir el audio AAC en un fichero 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 ahora a utilizar las herramientas para crear un nuevo fichero mp4 con nuestro fichero audio convertido en 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

A continuación vamos a añadir la 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

Traducción al castellano por Jose Antonio Torres

http://bytecoders.homelinux.com

Powered by MediaWiki