设为首页 加入收藏

TOP

集成IPP的pjsip在Linux下的static linking编译
2014-11-24 02:45:50 来源: 作者: 【 】 浏览:1
Tags:集成 IPP pjsip Linux static linking 编译

在Linux下用gcc编译pjsip并不是一件太困难的事情,但是如果要用Intel所提供的IPP开发包进行g729的流压缩处理,则可能会有一定问题。这里提供了大致指导,但是它是基于IPP5的,而且对static linking的描述在IPP6下是行不通的,需要做一定的更改。


本人正好有一个项目:在linux下开发softphone和frontdesk,支持g729流压缩以提高语音通话质量。下面是static linking编译处理的步骤。


1,下载IPP和IPP Samples并且按照说明安装它们(这个步骤应该比较简单)。
2,更改IPP Samples(_bin->bin libspeech.a->libusc.a)
mv ./ipp-samples/speech-codecs/_bin ./ipp-samples/speech-codecs/bin
mv ./ipp-samples/speech-codecs/bin/linux32_gcc4/lib/libspeech.a ./ipp-samples/speech-codecs/bin/linux32_gcc4/lib/libusc.a
3,设置环境变量
export IPPROOT=/opt/intel/ipp/6.1.2.051/ia32
export IPPSAMPLES=/home/admin0/ipp-samples


4,修改pjsip的相应源代码
4.1)在pjlib\include\pj\config_site.h 头文件中添加IPP,g729支持:
#define PJMEDIA_HAS_INTEL_IPP 1
#define PJMEDIA_HAS_INTEL_IPP_CODEC_AMR 0
#define PJMEDIA_HAS_INTEL_IPP_CODEC_AMRWB 0
#define PJMEDIA_HAS_INTEL_IPP_CODEC_G729 1
#define PJMEDIA_HAS_INTEL_IPP_CODEC_G723_1 0
#define PJMEDIA_HAS_INTEL_IPP_CODEC_G726 0
#define PJMEDIA_HAS_INTEL_IPP_CODEC_G728 0
#define PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 0
#define PJMEDIA_AUTO_LINK_IPP_LIBS 0
以下步骤是基于项目实际情况的修改,你可能并不需要。
4.2)pjmedia\src\pjmedia-codec\ipp_codec.c 在头文件 #include 前添加
----------------
#if defined(_MSC_VER) && PJMEDIA_AUTO_LINK_IPP_STATIC_LIBS
#include
#endif
---------------
"ipp_w7.h" 还有其他选项,根据操作系统,CPU类型选择不同的头文件


4.3)pjsip-apps\src\pjsua\pjsua_app.c
4.3.1) include ippcore.h to call initial static linking.
#include
4.3.2) Add
-------------
ippStaticInit();
-------------
before

for (i=0; i app_config.call_data[i].timer.id = PJSUA_INVALID_ID;
app_config.call_data[i].timer.cb = &call_timeout_callback;
}
4.3.3) set priority of g927
in app_init function.
------------------
define pj_str_t tmp;
-----------------
take out the original priority setting and replace by
--------------------
pjsua_codec_set_priority(pj_cstr(&tmp, "g729"), 240);
pjsua_codec_set_priority(pj_cstr(&tmp, "gsm"), 239);
pjsua_codec_set_priority(pj_cstr(&tmp, "pcma"), 238);
pjsua_codec_set_priority(pj_cstr(&tmp, "pcmu"), 237);
pjsua_codec_set_priority(pj_cstr(&tmp, "speex/8000"), 190);
pjsua_codec_set_priority(pj_cstr(&tmp, "ilbc"), 189);
pjsua_codec_set_priority(pj_cstr(&tmp, "speex/16000"), 180);
pjsua_codec_set_priority(pj_cstr(&tmp, "speex/32000"), 0);
------------------
以上步骤是主要的pjsip修改。项目不同,修改的方式也不同


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇学习帮Linux网络设备驱动编程 下一篇C语言函数指针实现跳转

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: