iOS PJSIP 接入

1.PJSIP编译

编译前先安装cmake 或升级,这一步自己搜搜。

到官网下载最新 release 版或其他版 https://www.pjsip.org/download.htm 减压

命令行 cd 到相应文件夹如:cd /Users/makeyu/Documents/我的工程/OtherproductMy/sip通话/pjproject-2.12 (命令行敲 cd 空格 把文件夹拖入)

编译到指定文件夹,先在文件夹下创建一个指定文件夹:如:mkdir sdk_output
请添加图片描述
添加配置信息
在文件夹中,pjlib/include/pj 中的config_site.h 添加
#define PJ_CONFIG_IPHONE 1
#include <pj/config_site_sample.h>

编译不同处理器版本
这里只编译真机,模拟器没意义
命令:sudo ARCH=’-arch 处理器’ ./configure-iphone --prefix=sdk_output全路径/arm64

arm64
sudo ARCH=’-arch arm64’ ./configure-iphone --prefix=/Users/makeyu/Documents/我的工程/OtherproductMy/sip通话/pjproject-2.12/sdk_output/arm64
make dep && make clean && make
make install

armv7
sudo ARCH=’-arch armv7’ ./configure-iphone --prefix=/Users/makeyu/Documents/我的工程/OtherproductMy/sip通话/pjproject-2.12/sdk_output/armv7
make dep && make clean && make
make install

其他的类似

编出来的lib中的文件如:libpjsua2-arm64-apple-darwin_ios.a,名字中带处理器——平台,使用时不需要这些。要去掉即 libpjsua2.a

合并
如果使用多处理器的可合并不同版本。(其实只用arm64 就可以)

创建合并后的文件夹,最终放在sdk_output/all/lib中,合并时命名为最后使用的名字。
mkdir sdk_output/all
mkdir sdk_output/all/lib

cd 到sdk_output 文件夹
cd sdk_output

合并 lipo -create 版本1.a 版本2.a 其他版本等 -output all/lib/名.a 。 可用Xcode建立一个iOS demo,模拟器跑,遍历sdk_output/arm64 中的文件,字符串替换、组合…创建以下命令文本,以下只以arm64、armv7为例:

lipo -create arm64/lib/libpjsua2-arm64-apple-darwin_ios.a armv7/lib/libpjsua2-armv7-apple-darwin_ios.a -output all/lib/libpjsua2.a
lipo -create arm64/lib/libpjsip-arm64-apple-darwin_ios.a armv7/lib/libpjsip-armv7-apple-darwin_ios.a -output all/lib/libpjsip.a
lipo -create arm64/lib/libsrtp-arm64-apple-darwin_ios.a armv7/lib/libsrtp-armv7-apple-darwin_ios.a -output all/lib/libsrtp.a
lipo -create arm64/lib/libpjmedia-arm64-apple-darwin_ios.a armv7/lib/libpjmedia-armv7-apple-darwin_ios.a -output all/lib/libpjmedia.a
lipo -create arm64/lib/libspeex-arm64-apple-darwin_ios.a armv7/lib/libspeex-armv7-apple-darwin_ios.a -output all/lib/libspeex.a
lipo -create arm64/lib/libyuv-arm64-apple-darwin_ios.a armv7/lib/libyuv-armv7-apple-darwin_ios.a -output all/lib/libyuv.a
lipo -create arm64/lib/libpjmedia-audiodev-arm64-apple-darwin_ios.a armv7/lib/libpjmedia-audiodev-armv7-apple-darwin_ios.a -output all/lib/libpjmedia-audiodev.a
lipo -create arm64/lib/libpjmedia-videodev-arm64-apple-darwin_ios.a armv7/lib/libpjmedia-videodev-armv7-apple-darwin_ios.a -output all/lib/libpjmedia-videodev.a
lipo -create arm64/lib/libpjsip-ua-arm64-apple-darwin_ios.a armv7/lib/libpjsip-ua-armv7-apple-darwin_ios.a -output all/lib/libpjsip-ua.a
lipo -create arm64/lib/libg7221codec-arm64-apple-darwin_ios.a armv7/lib/libg7221codec-armv7-apple-darwin_ios.a -output all/lib/libg7221codec.a
lipo -create arm64/lib/libpjmedia-codec-arm64-apple-darwin_ios.a armv7/lib/libpjmedia-codec-armv7-apple-darwin_ios.a -output all/lib/libpjmedia-codec.a
lipo -create arm64/lib/libpjsua-arm64-apple-darwin_ios.a armv7/lib/libpjsua-armv7-apple-darwin_ios.a -output all/lib/libpjsua.a
lipo -create arm64/lib/libpjnath-arm64-apple-darwin_ios.a armv7/lib/libpjnath-armv7-apple-darwin_ios.a -output all/lib/libpjnath.a
lipo -create arm64/lib/libgsmcodec-arm64-apple-darwin_ios.a armv7/lib/libgsmcodec-armv7-apple-darwin_ios.a -output all/lib/libgsmcodec.a
lipo -create arm64/lib/libpj-arm64-apple-darwin_ios.a armv7/lib/libpj-armv7-apple-darwin_ios.a -output all/lib/libpj.a
lipo -create arm64/lib/libwebrtc-arm64-apple-darwin_ios.a armv7/lib/libwebrtc-armv7-apple-darwin_ios.a -output all/lib/libwebrtc.a
lipo -create arm64/lib/libilbccodec-arm64-apple-darwin_ios.a armv7/lib/libilbccodec-armv7-apple-darwin_ios.a -output all/lib/libilbccodec.a
lipo -create arm64/lib/libresample-arm64-apple-darwin_ios.a armv7/lib/libresample-armv7-apple-darwin_ios.a -output all/lib/libresample.a
lipo -create arm64/lib/libpjlib-util-arm64-apple-darwin_ios.a armv7/lib/libpjlib-util-armv7-apple-darwin_ios.a -output all/lib/libpjlib-util.a
lipo -create arm64/lib/libpjsip-simple-arm64-apple-darwin_ios.a armv7/lib/libpjsip-simple-armv7-apple-darwin_ios.a -output all/lib/libpjsip-simple.a

编译好后文件夹如图:

请添加图片描述
使用
将arm64 文件夹下的 include 文件夹、all 文件夹下的 lib 文件夹拷贝到工程文件夹下指定的文件夹内 如:pjsip-sdk,再将pjsip-sdk 下的include、lib 引入或拖入工程

注意!include 内的只需要拖单个文件就行。文件夹不用。
请添加图片描述
command B 一下工程,如果报错 PJ_AUTOCONF ,在工程宏定义中加 PJ_AUTOCONF=1 ,Apple Clang - Preprocessing 下 Preprocessor Macros 中 Debug、Release 都加上请添加图片描述
至此就可以使用了。

2.PJSIP 对 G729 支持:

下载G729 (bcg729)
参照pjsip 文档 https://trac.pjsip.org/repos/ticket/2029 中 Source code to bcg729, (download ​here). 指定的git地址下载或clone

然后参照文档中For iOS 将bcg729 编入sdk,两个步骤 1.编译iOS版bcg729,编译出bcg729.a 和.h文件 2.编译pjsip,并支持、关联第一步编译的东西。

1.编译 bcg729 iOS版 ,cd到 bcg729 文件夹下,同样先创建一个输出文件夹:ios_output
用cmake根据命令编译,具体命令可在 bcg729 文件夹下 README.md 中有,下载的git 网址上也有,都一样。编译后如下图:(你编译多出来的其他文件没用可以删掉)
请添加图片描述
注意!!这一步编译后编译的都是 macos 版本的,不能用于ios,也没找到修改或解决的办法。最后只好用咱们Xcode编了;

Xcode 创建iOS版bcg729静态库
一些第三方库,之所以要编译,是因为支持多平台,支持多平台的基础是,代码是用c或c++写的,OC对这两个是直接支持的,所以理论上把源码拖进工程就能使用,但一个第三方库为了独立,好拆卸,往往有很多重合的东西,比如独立的G729这个模块、g7221模块,有可能有重名或重合的文件或定义的东西,加上第三方中又有其他第三方,所以要编译;那么也就是说直接把源码放到工程里会有很多冲突。

iOS 开发中可以用Xcode 创建动静态库,不知道的搜搜

Xcode创建名为:bcg729的iOS静态库,把源码中(下载下来的bcg729文件夹中),include、src 中的.h、 .c文件加到iOS静态库,编译(command B)
请添加图片描述
将编译好的 libbcg729.a,拷贝到上述编译ios_output中lib中,把原先的替换掉。

请添加图片描述
2.设置PJSIP支持G729
在config_site.h 中添加:
#define PJMEDIA_HAS_BCG729 1

关联bcg729编好的iOS 版输出路径,ios_output

关联命令:./configure-iphone --with-bcg729=ios_output全路径
如 ./configure-iphone --with-bcg729=/Users/makeyu/Documents/我的工程/OtherproductMy/sip通话/bcg729/ios_output

加上原来的有关处理器的配置 ./configure-iphone 一起为:

arm64 支持G729
sudo ARCH=’-arch arm64’ ./configure-iphone --prefix=/Users/makeyu/Documents/我的工程/OtherproductMy/sip通话/pjproject-2.12/sdk_output/arm64 --with-bcg729=/Users/makeyu/Documents/我的工程/OtherproductMy/sip通话/bcg729/ios
make dep && make clean && make
make install

同理再编译其他版本,以及合并。参照1

3.编译好后,需要将libbcg729.a工程即可使用
请添加图片描述
相关的.h文件,pjsip 本来就包含,不用弄。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
exosip和pjsip都是开源的VoIP协议栈。 exosip是eXtended Osip的缩写,是一个基于oSIP库的高级SIP协议栈,用于在基于SIP(Session Initiation Protocol)的通信系统中实现VoIP功能。它提供了面向对象的API,使开发者能够轻松地编写自己的SIP应用程序。exosip支持SIP标准中的大部分功能,例如会话建立、信令传输、媒体流传输等。通过exosip,开发者可以构建自己的VoIP应用程序,如IP电话、语音会议系统等。 pjsip是一个开源的多媒体通信库,它实现了IP电话、呼叫中心、音视频会议等功能。pjsip是基于SIP协议的,但它也支持其他常用的VoIP协议,如UDP、TCP、TLS、HTTP等。它提供了完整的SIP协议栈和相关的音视频引擎,以及接口和工具,便于开发者使用。pjsip具有良好的跨平台性,可以在多种操作系统上运行,包括Windows、Linux、Android、iOS等。 exosip和pjsip都是基于开源的oSIP库开发的,但它们的主要区别在于功能和用途。exosip更偏向于提供高级的SIP协议栈,支持各种SIP标准功能的开发,适用于构建复杂的SIP应用程序。而pjsip则更多地提供了一个完整的VoIP通信库,包括SIP协议、音视频通信引擎等,适用于开发各种类型的VoIP应用。 总的来说,exosip和pjsip都是非常有用的开源VoIP协议栈,可以帮助开发者快速构建各种VoIP应用程序,提供灵活的通信解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值