iOS PJSIP接入

1.PJSIP编译2.PJSIP 对 G729 支持:

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

编译不同处理器版本 这里只编译真机,模拟器没意义 命令: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 本来就包含,不用弄。

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: