PJ_HAS_FLOATING_POINT这个宏可以控制浮点的可用性,它在头文件<pj/config.h>里面默认设置为1,你也可以在<pj/config_site.h>里面把它复写为0。
PJLIB, PJLIB-UTIL和PJSIP不需要任何浮点的支持。即使浮点没有使用,它们也能正确地工作。但是,PJ_HAS_FLOATING_POINT这个宏却必须要设置来激活相应的一些低效率运行的代码(fallback code)。
在PJMEDIA里面情况不一样,像音频发生器、RTCP的统计、Speex的编解码、AEC这些PJMEDIA的组件使用定点来计算低效率运行的运算,它们是在PJ_HAS_FLOATING_POINT设置为0 时被激活的。但是,其它的一些组件就不能选择使用定点计算,所以不管浮点运算是否设置,基于浮点运算的代码会正常被使用,这样的组件有更改采样率、PLC、iLBC编解码。
移植pjprodect-1.12
在移植到开发板的时候,配置时选择不使用浮点,结果报出缺少库的错误,去掉那一特性后移植成功。可是,使用浮点计算的话对CPU的要求较高,到底硬件是否满足要求需要做实验进一步确认,先把它移植过去再说。
1)在/pjsip/include/pj/目录下创建config.h,编辑并加入:
#define PJ_IS_BIG_ENDIAN 0
#define PJ_IS_LITTLE_ENDIAN 1
否则会出错,没有定义处理器的大小端。一般CPU都是小端吧!大端比较少。个人认识,怎样辨别大小端呢?
#include <stdlib.h> #include <stdio.h> int main(void) { union { long l; char c[sizeof(long)]; }u; u.l = 1; if (u.c[sizeof(long) - 1] == 1) printf("Your processor is big endian!\n"); else printf("Your processor is little endian!\n"); return 0; }
2) ./configure --prefix=/wo/arm/pjsip --host=arm-linux --disable-ssl --disable-opencore-amrnb
3) make dep
4) make
5) make install
移植时我把静态库保存到/wo/arm/pjsip目录下,静态编译时首先需要设置终端的环境变量,然后再利用/lib/pkgconfig/libpjproject.pc文件进行交叉编译会比较简单,如果不这样做的话,你可以去看看你生成的库有多少,一个个去手动链接很麻烦的,竟然移植时生成了这个pc文件,那就好好利用它。
1)设置环境变量
export PKG_CONFIG_PATH=/wo/arm/pjsip/lib/pkgconfig:$PKG_CONFIG_PATH
这样设置好的环境变量仅在终端有效,查看是否设置成功:
echo $PKG_CONFIG_PATH
如果打印的是之前设置的路径就OK
2)makefile
以交叉编译测试程序中的录音程序为例
all: recfile CC = arm-linux-gcc recfile: recfile.c $(CC) -o $@ $< `pkg-config --cflags --libs libpjproject` clean: rm -f recfile
程序在开发板上运行时出错:
./recfile: error while loading shared libraries: libuuid.so.1: cannot open shared object file: No such file or directory
不能加载共享库,唉~又是库的问题!可是我在生成的静态库里面没有发现uuid这个库啊!不管了,修改PC文件,不链接这个库试试看。
可以正常运行,也不知道哪个程序会应用到这个库,不管,出问题再解决。uuid是用于身份的唯一标识,有什么用啊?在这处项目里面。
在编译playfile.c的时候提示没有util.h这个文件,在源码包的/pjsip-apps/src/samples里有这个文件,把它复制到编译后的include目录里面就可以了!
默认是最多保持4人的电话会议