分享

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

 xinyz4104 2014-08-21

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

一、.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./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./main/index.php/Matrix:MainVendors类别中找到你的主板芯片组,后面的编译安装过此中需要用到。以下以Intel HD-audio为例(在需要填写芯片组参数的地方填写hda-intel)。

下面的步骤也可以参照http://www./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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多