Tag Archives: linphone

Ubuntu 12.10 Server编译Linphone 2.0 for Android

下的最新的Ubuntu 12.10 Server,Win7上装的虚拟机,全部默认安装,然后就开始编译Linphone。除了README上要求的以外,也还有有一些需要的东西,比如git、ant、jdk(JDK需要通过网站下载)等。但是基本上来说还算是很顺畅的。下面的history,我去掉了一些没用或是重复的。

sudo apt-get update
sudo apt-get upgrade
unzip adt-bundle-linux-x86_64-20130219.zip
bunzip2 android-ndk-r8e-linux-x86_64.tar.bz2
tar xvf android-ndk-r8e-linux-x86_64.tar
tar zxvf linphone-android-20130410.tar.gz
cp SILK_SDK_SRC_v1.0.8.zip linphone-android/submodules/mssilk/sdk/
export PATH=$PATH:/home/sding/adt-bundle-linux-x86_64-20130219/sdk/platform-tools:/home/sding/adt-bundle-linux-x86_64-20130219/sdk/tools:/home/sding/android-ndk-r8e
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
sudo apt-get install pkg-config
sudo apt-get install ia32-libs
sudo apt-get install make
sudo apt-get install git
sudo apt-get install ant
tar zxvf jdk-7u17-linux-x64.tar.gz
mv -f jdk1.7.0_17/ /usr/local/
export JAVA_HOME=/usr/local/jdk1.7.0_17/
cd linphone-android/
make

Linphone 2.0 for Android 编译

新版的Linphone支持SUBSCRIBE/NOTIFY了,当然要把最新代码拿出来集成到我们的客户端里头。

这次编译除了ndk之外还需要Android sdk,其他的前提条件倒是差不多。

上次我是在centos 5.5 64位上编译成功的,结果这次在同一个环境地下居然不行了,编译第一个模块libilbc-rfc3951就碰到了问题:

configure: error: cannot find install-sh, install.sh, or shtool in build-aux “.”/build-aux
make: *** [/root/linphone-android/submodules/libilbc-rfc3951/Makefile] Error 1

搜了一下没搞明白怎么回事儿,装了shtool也没有用,单独把这个模块的源代码clone出来编译也遇到同样的问题。于是转向机器上的另外一个centos 6.3的虚拟机。

准备环境倒也不麻烦,无非就是autoconf, automake, aclocal, libtoolize, pkgconfig这几个,不过aclocal,libtoolize通过yum是找不到的,安装autoconf的时候不要yum,直接用源代码编译安装,这样也就包含了aclocal和libtoolize了。

然后就遇到下载文件按失败:

/usr/bin/wget –no-check-certificate http://www.webrtc.org/ilbc-freeware/ilbc-source-code-and-utili/ilbc-utilities/extract-cfile.awk -O extract-cfile.awk
–2013-04-10 23:17:41– http://www.webrtc.org/ilbc-freeware/ilbc-source-code-and-utili/ilbc-utilities/extract-cfile.awk
正在解析主机 www.webrtc.org… 74.125.31.121, 2404:6800:4008:c01::79
正在连接 www.webrtc.org|74.125.31.121|:80… 失败:拒绝连接。
正在连接 www.webrtc.org|2404:6800:4008:c01::79|:80… 失败:网络不可达。

看了一下,这个www.webrtd.org被盾了,需要用代理访问,windows下载之后上传即可。(PS: 后来又能下载了)

后面就遇到:

ant partial-clean
make: execvp: ant: 权限不够
make: *** [generate-apk] 错误 127

yum install ant错误消失了,但是马上就遇到:
BUILD FAILED
/root/linphone-android/build.xml:91: The following error occurred while executing this line:
/root/adt-bundle-linux-x86_64-20130219/sdk/tools/ant/build.xml:206: No supported regular expression matcher found: java.lang.ClassNotFoundException: org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp

手工安装最新的ant 1.9.0。

然后就遇到:

[aapt] /root/adt-bundle-linux-x86_64-20130219/sdk/platform-tools/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

BUILD FAILED
/root/adt-bundle-linux-x86_64-20130219/sdk/tools/ant/build.xml:647: The following error occurred while executing this line:
/root/adt-bundle-linux-x86_64-20130219/sdk/tools/ant/build.xml:688: null returned: 127

装了几个版本的libz之后都有问题,后来忽然想到README里头有一句:on some 64 bits systems you’ll need the ia32-libs package。

看了一下果然是需要32位的包,因为安卓源代码本来就是32位的。可是找了半天也没有找到这个ia32-libs,ubuntu上倒是有现成的。那就只能见招拆招了,直接http://rpmfind.net/搜 libz.so.1,找32位的下载安装,幸好缺的包也不多,再装了一个libncurses.so.5之后总算成功了。

要是32位系统的可能会更容易些,估计ubuntu会更容易些,yum现在很落后了,好多包也没有,或者就是很老。下次试试。

Linphone 2.0 for IPhone编译

新的Linphone已经支持SUBSCRIBE/NOTIFY,当然还有MESSAGE,这样的话就差不多把SIMPLE协议几个主要的功能都支持了,还是很有意义的。

于是重新下载代码编译,编译条件也没怎么变,而且出奇的顺利,开始遇到了一些问题,后来升级了XCode就可以了。

也没有遇到上次的那个armv7s的问题,强烈推荐大家重新编译。

FreeSWITCH ESL Client内存溢出

Linphone 1.x版本还不支持SUBSCRIBE/NOTIFY,所以也无法知道好友的状态,不得以做了一个代理,客户端每隔一段时间通过代理去freeswitch查询状态,代理用freeswitch ESL Client类连接freeswitch,但是代理运行一段时间之后就会内存溢出,然后崩溃。

2013-04-07 11:16:09,378 WARN [org.apache.mina.filter.logging.LoggingFilter] (LoggingFilter.java:123) – EXCEPTION :
java.lang.OutOfMemoryError: Direct buffer memory
at java.nio.Bits.reserveMemory(Bits.java:633)
at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:95)
at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:288)
at org.jboss.netty.channel.socket.nio.SocketSendBufferPool$Preallocation.<init>(SocketSendBufferPool.java:156)
at org.jboss.netty.channel.socket.nio.SocketSendBufferPool.<init>(SocketSendBufferPool.java:42)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.<init>(AbstractNioWorker.java:44)
at org.jboss.netty.channel.socket.nio.NioWorker.<init>(NioWorker.java:45)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.createWorker(NioWorkerPool.java:45)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.createWorker(NioWorkerPool.java:28)
at org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool.newWorker(AbstractNioWorkerPool.java:99)
at org.jboss.netty.channel.socket.nio.AbstractNioWorkerPool.init(AbstractNioWorkerPool.java:69)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.<init>(NioWorkerPool.java:39)
at org.jboss.netty.channel.socket.nio.NioWorkerPool.<init>(NioWorkerPool.java:33)
at org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.<init>(NioClientSocketChannelFactory.java:152)
at org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.<init>(NioClientSocketChannelFactory.java:117)
at org.freeswitch.esl.client.inbound.Client.connect(Client.java:113)

本来以为是程序里头什么地方资源没释放,后来查了一下,倒还真不是那么回事儿。

具体可以看看:Netty内存泄露XSocket内存泄漏问题深度分析,第一个讲的是现象,第二个更深入一些,说问题在于DirectByteBuffer。

不过第二个实施起来有点难度,而且也不能完全解决问题;而org.freeswitch.esl.client.inbound.Client里头用的NioClientSocketChannelFactory类作为一个工厂类确实没有必要每次都new,做成静态的即可。

于是改代码,然后重新编译。基本就是git和maven,具体可以参考:http://wiki.freeswitch.org/wiki/Java_ESL_Client

git clone libvpx失败

在虚拟主机上git clone linphone的时候失败了,底下libvpx模块clone有问题:
Submodule path ‘submodules/externals/libupnp’: checked out ‘d0b16d056e0f681a2bc6bd70859303b4bba521dc’
Cloning into ‘submodules/externals/libvpx’…
error: Failed connect to git.chromium.org:80; Connection refused while accessing http://git.chromium.org/webm/libvpx.git/info/refs
fatal: HTTP request failed
Clone of ‘http://git.chromium.org/webm/libvpx.git’ into submodule path ‘submodules/externals/libvpx’ failed
试了试telnet git.chromium.org 80可以,但是git就是不行。
看了看以前下载的记录,应该是可以的,而且从公司网络直接git clone http://git.chromium.org/webm/libvpx.git也可以。
看样子是人家把我的IP给盾了,不知道为啥,有点坑爹。

Linphone iphone编译

前面已经在CentOS上编译过Linphone安卓的源代码,但是IPhone版的需要xcode with iPhone OS SDK and MacPorts,想来这东西在CentOS上是搞不定了,正好也不着急,索性等了几天让搞iOS的同事去试试看。

但是他还是比较擅长UI开发,对于底层编译之类的不太擅长,遇到了一些问题之后就走不下去了。那么还是自己来吧,连到他的Mac Mini上去弄。虽然没有用过OS X,不过既然是基于Unix的那应该也差不离吧。

首先试着shh到Mac上,结果22端口没看,搜了一下看到:Mac OS X 10.6.2 (Snow Leopard)中, OpenSSH Server是已经安装了的,只是没有启用而已。Systerm Preferences -> Shareing ,在左侧列表中选中 “Remote Login”即可。这个很快就解决了。

然后就是中文显示问号的问题,在Puttty里头我已经设置了字体和字符集了,还是不行,后来看了一下可以登录后:
LANG=zh_CN.UTF-8
export LANG
其实还是OS X自身设置的问题,不过我也不想去改别人的开发环境,而且有没有中文也没所谓。

README上说需要先安装xcode with iPhone OS SDK and MacPorts,这两个前面已经安装过了,后面就是安装一些编译的工具,和Android的类似。在自动安装doxygen的依赖包出错:
—> Configuring ghostscript Error: org.macports.configure for port ghostscript returned: configure failure: command execution failed Error: Failed to install ghostscript
找了一圈,这个问题似乎不太好界定,有人提到需要更新macports:sudo port selfupdate,但是也遇到问题:
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl
后来加了-d参数以后得到:
configure: error: in `/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/base’: configure: error: C compiler cannot create executables
这个说法也不一,也人说需要最新的xcode,让同事看了一下,说刚刚更新过iOS 6,应该就是最新的了,最后有人提到需要安装Xcode command line tools,一问果然没安装,从Xcode的设置里头安装就可以,就是需要下载,费点时间,也不去更新MacPort了,直接再安装doxygen,这次结果就不太一样了,一堆输出之后得到:
Error: graphviz cannot be built while nawk is active.
Error: Please deactivate nawk and try again.
这次的提示就很清楚了,直接sudo port install doxygen就可以了。

后面建连接libtoolize和/usr/bin/string的时候发现已经存在了,指向也对,那就可以了。

最后make all的时候还是遇到了网太慢SILK_SDK_SRC_v1.0.8.zip下载失败的问题,直接copy过去了事儿。

后来下载其他包的时候还是失败过一次,但是最后还是成功了,虽然make的过程还是很慢。

PS: 这篇是边编译边记录,所以到最后一看,其实很没有内涵,总结起来就一句话,别忘了装Xcode command line tools,但是好歹也写了这么多了,还是发吧。