PJSIP arm 开发笔记

http://blog.csdn.net/suer0101/article/details/7488783

 

浮点的可用性

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

  1. #define PJ_IS_LITTLE_ENDIAN 1 
#define PJ_IS_LITTLE_ENDIAN 1


 

否则会出错,没有定义处理器的大小端。一般CPU都是小端吧!大端比较少。个人认识,怎样辨别大小端呢?

  1. #include <stdlib.h> 
  2. #include <stdio.h> 
  3.  
  4. int  main(void
  5.     union 
  6.     { 
  7.         long l; 
  8.         char c[sizeof(long)]; 
  9.     }u; 
  10.   
  11.     u.l = 1; 
  12.     if (u.c[sizeof(long) - 1] == 1) 
  13.         printf("Your processor is big endian!\n"); 
  14.     else 
  15.         printf("Your processor is little endian!\n"); 
  16.          
  17.     return 0; 
#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


静态编译PKGCONFIG

移植时我把静态库保存到/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

以交叉编译测试程序中的录音程序为例

  1. all: recfile 
  2.  
  3. CC = arm-linux-gcc 
  4. recfile: recfile.c 
  5.     $(CC) -o $@ $< `pkg-config --cflags --libs libpjproject` 
  6.  
  7. clean: 
  8.     rm -f recfile 
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人的电话会议

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PJSIP是一个开源的多媒体通信库,可用于实现语音、视频通话和实时消息传递等功能。并且,它是跨平台的,可以在多种操作系统和嵌入式设备上运行。下面我们来介绍一下PJSIPARM架构上的移植过程。 首先,ARM架构是一种广泛应用于嵌入式设备的处理器架构。要在ARM移植PJSIP,需要做以下几个步骤。 1. 环境配置:首先,我们需要为ARM架构搭建开发环境。这包括安装交叉编译工具链,配置环境变量和 PATH 路径。交叉编译工具链包含了针对ARM架构的编译器、链接器等工具。通过配置环境变量,可以使得编译时使用交叉编译工具链而不是本地工具链。 2. 修改源码:其次,需要对PJSIP源代码进行修改,以适应ARM架构。这些修改通常包括对编译选项、头文件和库的路径进行设置,以及对不同硬件平台的适配。此外,还需要根据具体的需求进行功能的选择和配置。 3. 编译与链接:在完成源代码的修改之后,我们可以使用交叉编译工具链对PJSIP进行编译和链接。编译过程中,编译器会根据指定的编译选项生成与ARM架构对应的机器码。链接过程中,则会将编译生成的目标文件和库文件进行链接,生成最终的可执行文件。 4. 测试和调试:在完成编译和链接之后,可以在ARM设备上部署并运行移植好的PJSIP。在测试过程中,可以检查功能是否正常,性能是否满足要求。如果出现问题,还可以通过调试工具对程序进行调试,找出并修复问题。 总的来说,PJSIPARM架构上的移植需要配置开发环境,修改源代码,进行编译和链接,并进行测试和调试。同时,由于ARM架构广泛应用于嵌入式设备,移植PJSIPARM上可以为嵌入式设备提供强大的多媒体通信能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值