TraducciónObjetivoInstalar 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 debianLa 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 mISDNEstos 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
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
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
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 fuenteSiempre 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 dependenciasEl orden que debemos seguir para compilar el código
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 AsteriskDesarrollador : http://sip.fontventa.com Recuperación de las herramientasaptitude 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 H324MComo 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 AMRVamos 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 gatewayEsta 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 mpeg4ipEsta 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_mp4Vamos 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_rtspPermite 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)
#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_transcoderaptitude 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 pcm2mp4cd /usr/src/asterisk-video/tools make cp mp4band pcm2mp4 /usr/bin/ Configuración de misdn.confHe 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 AsteriskPuede 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 MP4He 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
$ 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 ![]() |