PJSIP2.0使用以及交叉编译存在问题解决

来源:互联网 发布:北京网络监控安装 编辑:程序博客网 时间:2024/06/05 09:47

http://blog.sina.com.cn/s/blog_703121450101ajyt.html

 

一、.Pjsip 的 交叉编译

./configure –host=arm-none-linux-gnueabi –target=arm-none-linux-gnueabi

生成的动态库 在交叉编译工具文件夹下 如果在开发板上运行程序的时候需要动态库,把此文件夹下的动态库拷贝到开发板的/usr/lib 下即可。

2.运行程序 进行呼叫时

会提示

Unable to find default audio device

这样的错误

1. 可能是没有安装ALSA库 或者 ALSA库不够新。

2. 是没有声音设备。

二、下面以 unbuntu 安装 als a 1.0.23 版本为例

1、下载alsa-1.0.23驱动
下载地址:http://www.alsa-project.org/main/index.php/Download,只需要下载Driver (alsa-driver)、Library (alsa-lib)、Utilities (alsa-utils)三个包即可,当然如果你要进行一些关于声音的开发也可以下载其他你用得到的包。下载得到以下三个包:
alsa-driver-1.0.23.tar.bz2
alsa-lib-1.0.23.tar.bz2
alsa-utils-1.0.23.tar.bz2

2、查看机器所用的声卡芯片组
alsa驱动是根据芯片组来驱动的,你可以先在终端里运行lspci,找到 ****** Audio device:看看芯片是什么。最好是在http://www.alsa-project.org/main/index.php/Matrix:Main的Vendors类别中找到你的主板芯片组,后面的编译安装过此中需要用到。以下以Intel HD-audio为例(在需要填写芯片组参数的地方填写hda-intel)。

下面的步骤也可以参照http://www.alsa-project.org/main/index.php/Matrix:Module-hda-intel所述。
3、解压缩并安装了alsa-driver-1.0.23包
# tar jxvf alsa-driver-1.0.23.tar.bz2
# cd alsa-driver-1.0.23
#./configure --with-cards=hda-intel --with-sequencer=yes
# make
# make install
在#./configure --with-cards=hda-intel --with-sequencer=yes命令中hda-intel就是你机器的芯片组所对应的。
4、解压缩并安装了alsa-lib-1.0.23包
# tar jxvf alsa-lib-1.0.23.tar.bz2
# cd alsa-lib-1.0.23
#./configure
# make
# make install
5、解压缩并安装了alsa-utils-1.0.23包
# tar jxvf alsa-utils-1.0.23.tar.bz2
# cd alsa-utils-1.0.23
#./configure
这一步出错,错误为:configure: error: panelw library not found 解决方法如下:
# sudo ln -s libpanelw.so.5 /usr/lib/libpanelw.so
# sudo ln -s libformw.so.5 /usr/lib/libformw.so
# sudo ln -s libmenuw.so.5 /usr/lib/libmenuw.so
# sudo ln -s libncursesw.so.5 /lib/libncursesw.so
重新执行#./configure
# make
又报错,错误为:
make[2]: xmlto: Command not found
make[2]: *** [alsactl_init.7] Error 127
也就是没有xmlto,安装就好了,
# sudo apt-get install xmlto
# make install

6、将驱动加入到内核

# sudo modprobe snd-hda-intel
# sudo modprobe snd-pcm-oss
# sudo modprobe snd-mixer-oss
# sudo modprobe snd-seq-oss

7、重启系统,OK。可以使用alsactl -v查看驱动版本

三.运用pjsip 库 编译 应用程序 可以利用PKG-CONFIG工具

一般来说,如果库的头文件不在/usr/include 等 目录中 那么在编译的时候需要用 –I 参数指定其路径 由于一个库在不同的系统上可能位于不同的目录下,用户安装库的时候也可以将库安装在不同的目录下,所以即使使用同一个库 由于库的路径的不同,造成了用-I参数指定的头文件的路径也可能不同,其结果就是造成了编译命令界面的不统一,如果使用-L参数,也会造成连接界面的不统一,编译和连接界面不统一会为库的使用带来麻烦

为了解决编译和连接界面不统一的问题,人们找到了一些解决方法。其基本思想是:事先把库的位置信息等保存起来,需要的时候再通过特定的工具将其中有用的信息提取出来供编译和连接使用,这样,就可以做到编译和连接界面的一致性。

Pkg-config 是通过库提供的一个 .pc文件获取库的各种必要信息的

在默认情况下,每个支持pkg-config的库对应的 .pc文件安装后都位于安装目录的 lib/pkgconfig下(usr/local/lib/pkgconfig)

使用pkg-config工具依赖于环境变量 PKG_CONFIG_PATH

设置PKG_CONFIG_PATH 指向.pc文件所在的目录

安装完pjsip 后 在/usr/local/lib/pkgconfig 下 会有一个名为 libpjproject.pc 的文件

用 下面的命令 编译应用程序

Gcc xxx.c –o xxx `pkg-config --cflags --libs libpjproject`

如果编译的应用程序 应用于开发板上 则在配置的时候要用交叉编译。在开发板上运行应用程序是需要的各种库,需要是交叉编译后生成的库。

四、在pjsip2.0定义了 PJMEDIA_HAS_VIDEO=1之后 将会支持视频

但编译时存在以下问题:

将会报错下面四个变量没有定义,打开指定文件 定义

#define SDL_YV12_OVERLAY 32315659

#define SDL_IYUV_OVERLAY 56555949

#define SDL_YUY2_OVERLAY 32595559
#define SDL_UYVY_OVERLAY 59565955
#define SDL_YVYU_OVERLAY 55595659

在pjmeida/src/pjmedia-videodev/sdl_dev.c 中

找不到 SDL_pow 的定义

在SDL 库中 的 src/video下 的SDL_pixels.c 中 增加这个函数的定义 函数体内 不用做任何事情

SDL_Init 初始化失败 修改pjmedia/src/pjmedia-videodev/sdl_dev.c 中的 sdl_init 函数中的if判断把其条件取反。

支持视频可能要依赖SDL FFMPEG X264 库

这三个文件的交叉编译在上篇已经说过,这里不再累赘。