domingo, marzo 12, 2006

Kopete 0.12 alpha 1 con soprte Jingle (voz de GoogleTalk)

El protocolo Jingle presentado por Google junto a Jabber (comentado en Dirson y Barrapunto) para Jabber que fue acompañado de la libreria Jingle de Google bajo licencia BSD comienza a dar sus frutos. Kopete 0.12 Alpha 1 dispone de soporte experimental para dicho protocolo de voz y vídeo, aunque Kopete por el momento sólo ofrece voz.

Voy a compilarlo y probarlo sobre mi Debian Etch. Descargo y descomprimo el paquete fuente. Consulto la página de dependecias de Kopete para usar Jingle que se resumen en lo siguiente:
Introduction of libjingle require new dependencies to Kopete. Here the list:
-oRTP 0.7.1 http://www.linphone.org/ortp/sources/ (no more, no less, just 0.7.1)
-expat
-glib-2.0 (if you don't have it already for MSN webcam)
-speex (>=1.1.6 or 1.0.5 (the versions that have speex_encode_int ))
Ejecuto ./configure --enable-jingle (esta opción es necesaria para activar el soporte para conversaciones de voz usando libjingle) de cuya salida me fijo en lo siguiente:
[...]
checking for XML_ParserCreate in -lexpat... yes
[...]
checking for ortp... configure: WARNING: oRTP is required to build Jabber Jingle voice support. You can get it from http://www.linphone.org/ortp/
[...]
checking for glib-2.0 gmodule-2.0... yes
checking GLIB_CFLAGS... -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
checking GLIB_LIBS... -Wl,--export-dynamic -lgmodule-2.0 -ldl -lglib-2.0
[...]
checking for speex... checking speex.h usability... no
checking speex.h presence... no
checking for speex.h... no
checking speex/speex.h usability... no
checking speex/speex.h presence... no
checking for speex/speex.h... no
configure: WARNING: Could not find a libspeex version that have the speex_encode_int() function. Please install libspeex=1.0.5 or libspeex>=1.1.6 from http://www.speex.org/
[...]
You have disabled or you are missing required librairies required to compile Jabber Jingle voice support.
Jingle is a new Jabber standard that define a signaling protocol via XMPP for peer-to-peer applications.
Jingle audio is compatible with Google Talk voice offering.

Required Jingle dependencies are listed on this page:
http://wiki.kde.org/tiki-index.php?page=Kopete+Jabber+Jingle
Muy bien, consulto la página de dependecias de Kopete para usar Jingle que se resumen en lo siguiente:
Introduction of libjingle require new dependencies to Kopete. Here the list:
-oRTP 0.7.1 http://www.linphone.org/ortp/sources/ (no more, no less, just 0.7.1)
-expat
-glib-2.0 (if you don't have it already for MSN webcam)
-speex (>=1.1.6 or 1.0.5 (the versions that have speex_encode_int ))
Veamos paso a paso las dependencias:
  • oRTP 0.7.1: No está disponible en mi sistema. Descargo el código fuente de la libreria de la página indicada, ejecuto ./configure, make y creo un paquete con checkinstall que procedo a instalar en mi sistema, todo sin problemas.
  • expat
  • : Como se ve en la salida de ./configure ya está instalada. Si no debería estar disponible a través de apt.
  • glib-2.0
  • : De nuevo ./configure me informa de que esta disponible en mi sistema.
  • speex
  • :No está en mi sistema, pero a través de apt encuentro el paquete libspeex en la version 1.1.11.1-1, por lo que debería funcionar.
Vuelvo a ejecutar ./configure y obtengo el siguiente mensaje:
[...]
You have disabled or you are missing required librairies required to compile Jabber Jingle voice support.
Jingle is a new Jabber standard that define a signaling protocol via XMPP for peer-to-peer applications.
Jingle audio is compatible with Google Talk voice offering.

Required Jingle dependencies are listed on this page:
http://wiki.kde.org/tiki-index.php?page=Kopete+Jabber+Jingle
Vaya vaya. Reviso la salida del script y encuentro:
[...]
checking iLBC_decode.h usability... no
checking iLBC_decode.h presence... no
checking for iLBC_decode.h... no
configure: WARNING: Could not find ilbc headers or libs. Please install ilbc package from http://www.linphone.org if you want iLBC codec support in Kopete Jabber plugin.
[...]
Así que falta iLBC, sin embargo no se menciona en la página de dependencias. Rebusco por linphone.org pero no hay un paquete instalable o un fuente compilable. Sin embargo hay un enlace a www.ilbcfreeware.org dónde comenta que se puede obtener el código de la siguiente manera: se descarga uno el RFC 3951 (Internet Low Bit Rate Codec) y un script awk; después se ejecuta el script awk mediante el comando:
awk -f extract-cfile.awk rfc3951.txt
El resultado es un monton de archivos .c y .h, de manera que se podría generar una librería a partir de ellos, pero no hay ni makefile ni nada similar. Al fin y al cabio lo se hace es extraer directamente del RFC el código propuesto para implementar el protocolo iLBC, de manera que no se incluye código accesorio, por ejemplo, para crear una libreria. Quizá baste con que el script ./configure tenga acceso a las cabeceras y al código objeto, pero no me veo yo creandome los scripts de compilación.
¿Que hacer? Calmo mi inquietud navengando mediante Google y al rato descubró la información que buscaba. Como comentan en este mensaje del foro de KDE la libreria iLBC es opcional:
iLBC is an optional dependency, so you could just not install it (it's not required for jingle support)
Me alegro, lo dejaré para otro día. Vuelvo a ejecutar ./configure y finalmente me dice:
Supported Jabber Jingle voice Codecs for Kopete:
Speex: yes
iLBC: no
MULAW: yes

Good - your configure finished. Start make now
Como comentaban efectivamente en el foro iLBC parece no ser obligatoria.

Lanzo make, pero obtengo lo siguiente:
[...]
if /bin/sh ../../../../../../../libtool --silent --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I./../.. -DPOSIX -I./../.. -DQT_THREAD_SUPPORT -D_REENTRANT -D_FILE_OFFSET_BITS=64 -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -O2 -Wformat-security -Wmissing-format-attribute -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -MT network.lo -MD -MP -MF ".deps/network.Tpo" -c -o network.lo network.cc; then mv -f ".deps/network.Tpo" ".deps/network.Plo"; else rm -f ".deps/network.Tpo"; exit 1; fi
In file included from network.cc:33:
./../../talk/base/basicdefs.h:32:20: error: config.h: No such file or directory
make[8]: *** [network.lo] Error 1
make[8]: se sale del directorio `/home/temp/compilandoFuentes/kopete-0.12-alpha1/kopete/protocols/jabber/jingle/libjingle/talk/base'
make[7]: *** [all-recursive] Error 1
make[7]: se sale del directorio `/home/temp/compilandoFuentes/kopete-0.12-alpha1/kopete/protocols/jabber/jingle/libjingle/talk'
make[6]: *** [all-recursive] Error 1
make[6]: se sale del directorio `/home/temp/compilandoFuentes/kopete-0.12-alpha1/kopete/protocols/jabber/jingle/libjingle'
make[5]: *** [all-recursive] Error 1
make[5]: se sale del directorio `/home/temp/compilandoFuentes/kopete-0.12-alpha1/kopete/protocols/jabber/jingle'
make[4]: *** [all-recursive] Error 1
make[4]: se sale del directorio `/home/temp/compilandoFuentes/kopete-0.12-alpha1/kopete/protocols/jabber'
make[3]: *** [all-recursive] Error 1
make[3]: se sale del directorio `/home/temp/compilandoFuentes/kopete-0.12-alpha1/kopete/protocols'
make[2]: *** [all-recursive] Error 1
make[2]: se sale del directorio `/home/temp/compilandoFuentes/kopete-0.12-alpha1/kopete'
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio `/home/temp/compilandoFuentes/kopete-0.12-alpha1'
make: *** [all] Error 2
¡Diablos! Parece que no encuentra un fichero config.h. Vuelvo a relajarme navegando a tavés de Google. Buscando encuentro el Bug 121856 en que se comenta que "apunte libjingle al config.h generado durante el proceso de configuración de Kopete".

Así, edito el fichero basicdefs.h que hay en kopete-0.12-alpha1/kopete/protocols/jabber/jingle/libjingle/talk/base/ y cambio la línea que incluye el fichero basicdefs.h por:
#include "../../../../../../../config.h"
De esta manera apunta al fichero generado por el proceso de configuración. El estatus del BUG es RESOLVED, por lo que es posible que actualmente no suceda.

Finalmente vuelvo a ejecutar make y compila sin problemas tras un buen rato. He usado el siguiente gcc:
$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --with-tune=i686 --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.0.3 20060212 (prerelease) (Debian 4.0.2-9)
Creo un paquete debian mediante checkinstall, e instalo Kopete 0.12 Alpha 1. Funciona sin problemas. Ahora al tener una charla con alguién de de GTalk aparece la opción de voice call, aunque supongo que debería dar la opción con cualquier contacto que soporte esta libreria. Sin embargo, no consigo comunicar. Si llamo desde GTalk Kopete no parece entararse, y si llamo desde Kopete GTalk parece enterarse pero tras aceptar la comunicación esta nunca se produce.

Tendré que echar un ojo a ver que pasa, probar con una versión de CVS algo más actual o compilar con depuración a ver si veo algún mensaje interesante.

Actualizacion 1/Abril/2006: Hace tiempo que salió la Beta 1, y Beta 2. Probé con la Beta 1 pero tampoco conseguí hacerlo funcionar, y probé con la Beta2 pero con muchas menos ganas. El caso es que hoy he vuelto a probar fortuitamente y me ha funcionado con la Beta 2 que tenía instalado. Al menos yo oia a mi contertulio, aunque el a mi no, básicamente por no tenía ocnfigurado el microfono. A este respecto, en la sección de dispositivos de la configuración de Kopete sólo aparece una pestaña de vídeo, pero no veo ninguna configuración para audio. En cualquier caso trataré de configurar em microfono en KDE y espero que valga para Kopete, por que lo cierto es que KDE si provee de una infraestructura para el audio, pero parece ser que no está tan integrado en el caso del vídeo.

4 Comments:

Blogger NaSz said...

Pues es extraño, por que parece que quiñen te da el error es el enlazador:
collect2: ld returned 1 exit status
No sabía que se usase ld en la fase de instalación. De todas maneras de da error por símbolo duplicado (la función __pth_asprintf), aśi que pudiese ser que la fase de complación no fuese del todo correcta.

Si te bajaste la versión del CVS prueba a bajarte de nuevo lo que haya en el CVS, es posible que tuvieses mala suerte y descargases una versión que no compilaba, con las versiones de CVS puede suceder.

Si usaste alguna de las 'oficiales' (alpha 1, o beta 1 y 2) descarga alguna otra versión a ver si te va. El caso es que el error parece bastante raro pero no se denbe a que te falten librerias o algo así.

Saludos.

4/04/2006 8:31 p. m.  
Anonymous Anónimo said...

Felicitaciones por este Post. Si bien no lo he probado, el hecho de comentar paso a paso el proceso es mas claro que un tutorial propiamente dicho.

6/06/2006 6:56 p. m.  
Blogger SeruLinux said...

hola, he probado recientemente con la version 0.12.2 y despues de sortear otros obstavulos parecidos en la compilacion obtuve exactaente el mismo resultado: puedo escuchar a mi interlocutor pero el no a mi. En este ecaso su microfono estaba perfectamente configurado. Supongo que el error esta en kopete. Saludos. Tendremos que esperar a una nueva version para charlar con otros usuarios de gtalk en linux.

Serusalta

pd: mi interlocutor usaba gtalk de windows XP.

10/17/2006 7:01 p. m.  
Blogger SeruLinux said...

hola, he probado recientemente con la version 0.12.2 y despues de sortear otros obstavulos parecidos en la compilacion obtuve exactaente el mismo resultado: puedo escuchar a mi interlocutor pero el no a mi. En este ecaso su microfono estaba perfectamente configurado. Supongo que el error esta en kopete. Saludos. Tendremos que esperar a una nueva version para charlar con otros usuarios de gtalk en linux.

Serusalta

pd: mi interlocutor usaba gtalk de windows XP.

10/17/2006 7:02 p. m.  

Publicar un comentario

<< Home