环境:Ubuntu10.04、fscl mx53
linphone3.6.1
依赖库:alsa-lib-1.0.18 ncurses-5.9 readline-5.1 libosip2-3.6.0 libeXosip2-3.6.0 libogg-1.1.4 speex-1.2rc1 libxml2-2.7.6
安装configure依赖工具:
sudo apt-get install libtool automake autoconf
设置环境变量:
export PREFIX =/home/ray/linphone/target
export HOST=arm-linux
编译依赖库:
alsa-lib-1.0.18
./configure --prefix=$PREFIX --host=$HOST --disable-static --disable-aload --disable-rawmidi --disable-seq --disable-ucm --disable-alisp --disable-old-symbols --disable-python --with-alsa-devdir=/dev && make && make install
ncurses-5.9
./configure --prefix=$PREFIX --host=$HOST --with-gnu-ld --with-shared --disable-static && make && make install
readline-5.1
./configure --prefix=$PREFIX --host=$HOST --with-gnu-ld --with-shared --disable-static && make && make install
libosip2-3.6.0
./configure --prefix=$PREFIX --host=$HOST --with-gnu-ld --with-shared --disable-static && make && make install
libeXosip2-3.6.0
./configure --prefix=$PREFIX --host=$HOST --disable-static OSIP_CFLAGS=-I$PREFIX/include OSIP_LIBS=-"L$PREFIX/lib -losip2 -losipparser2" && make && make install
libogg-1.1.4
./configure --prefix=$PREFIX --host=$HOST --with-gnu-ld --with-shared --disable-static && make && make install
speex-1.2rc1
./configure --prefix=$PREFIX --host=$HOST --disable-static --enable-fixed-point --enable-arm-asm --with-ogg-libraries=$PREFIX/lib --with-ogg-includes=$PREFIX/include && make && make install
libxml2-2.7.6
./configure --prefix=$PREFIX --host=$HOST --with-gnu-ld --with-shared --disable-static && make && make install
编译linphone:
linphone3.6.1
./configure --host=$HOST --prefix=$PREFIX/linphone --with-gnu-ld --disable-static --disable-video --disable-oss --disable-gtk_ui --disable-pulseaudio --enable-alsa PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
此时一个LINPHONE就编译成功了,把工具和相关库拷贝到板子上,建立相关符号连接,启动LINPHONE查看下声卡设备是否发现了ALSA,如果没有说明没有编译成功,因为LINPHONE默认的是OSS声卡,但是要实现语音必须用ALSA。检查参数,看是否指明了让其自动寻找ALSA。
注意:
编译后会生成linphonec与linphonecsh,必须将linphonec所在的目录添加到环境变量PATH下才可成功运行linphonecsh,如linphonecsh init -c /root/.linphonerc -a,若想运行视频版则添加-C -D(需配置linphone库的加载路径环境变量LD_LIBRARY_PATH);
配置文件默认为/root/.linphonerc,可以修改配置文件中的asterisk服务器ip和port及登录用户名和密码,其他一些配置是根据linphonecsh 初始化的入参配置的;
音频库可以选择oss或者alsa,可以在运行linphonec后通过soundcard list来查看当前加载的显卡驱动,打电话为call id,id为在asterisk下注册的用户名,如call 1129;
关于开发板上运行linphonec时找不到alsa声卡的问题:
在Ubuntu上执行env
PATH=/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin
将alsa放到交叉编译器的lib下:
/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/arm-fsl-linux-gnueabi/multi-libs/lib
/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/arm-fsl-linux-gnueabi/multi-libs/usr/lib
再重新编译linphone
再把alsa考到开发板/usr/lib下
linphonec> soundcard list
0: ALSA: default device
1: ALSA: imx-3stack
2: ALSA: imx-3stack-spdif
至于为什么把alsa应用库考到编译器的lib下就可以找到alsa声卡的原因我还没搞懂,还望各位大虾指教。
附:
LINUX中的音频驱动有OSS和ALSA两种,OSS是商业性质的而且只公布了部分源码,现在内核里带的都是老版本的,并且不支持多线程的(我在移植过程中发现,OSS只能在一时刻提供一种功能,录音的话就不能播音,播音的话就不能录音),ALSA是内核中现在最常用的音频驱动,支持多线程并且是完全开源的。OSS提供的设备接口有 mixer和dsp,ALSA提供pcm,midi,mixer,controlc,seq,timer等,要成功实现语音要使用ALSA驱动,在移植前期请确保你的内核中还有ALSA驱动,一般内核都带有驱动,只是设备文件的目录可能并不在默认的/dev/snd下并且要移植相应的库文件到板子上,这时候你就要在编译的时候注意参数的设置,在开发板上首先ls看下ALSA的设备文件是否都在,若都再得话就可以开始编译了。
交叉编译音频(无视频)版linphone,布布扣,bubuko.com