首页 > 代码库 > 交叉编译音频(无视频)版linphone

交叉编译音频(无视频)版linphone

交叉编译音频(无视频)版linphone


环境: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的设备文件是否都在,若都再得话就可以开始编译了。