PJSIP开发VoIP记录1 - 编译与集成
本文仅用于记录使用PJSIP开发VoIP,会陆续
更新...
开发工具:Xcode9.2
开发语言:swift 4.0
1.编译
编译的资料有很多,官网也写的很详细,如果不想看英文,这里推荐一篇pjsip for iOS:编译多平台支持的静态库,合并静态库的脚本有点问题,这里提供一个合并静态库的命令行例子,可以自己在终端用命令进行合并
lipo -create -arch armv7 libpjnath-armv7-apple-darwin_ios.a -arch arm64 libpjnath-arm64-apple-darwin_ios.a -arch armv7s libpjnath-armv7s-apple-darwin_ios.a -arch i386 libpjnath-i386-apple-darwin_ios.a -output libpjnath-apple-darwin_ios.a
坑:
我装了两个Xcode(一个命名Xcode8,一个命名Xcode9),使用lipo命令的时候把主要的一个Xcode在finder中命名为Xcode才成功了
当然静态库都都可以不用自己编译了(如果对开发功能有特殊需求还是自己编译比较好,需要什么就配置什么),网上有很多,也可以用cocoapods导入,gitHub项目地址,但我在开发过程中用cocoapods导入后,在拨打电话的时候遇到一个问题:提示我....Temporary failure in sending Request msg INVITE/cseq=22074 (tdta0x1028af000), will try next server: Unsupported transport (PJSIP_EUNSUPTRANSPORT)
,开发时间紧迫,最后放弃,改用编译好的库,这里提供一个我现在使用的库,下载地址gitHub(需要自己配置ipv6,若不配置,在ipv6情况下是会崩溃的,审核时有时候可能是ipv6环境)。
2.集成
将下载的文件拖入工程,我这里新建了一个PJSIP的文件夹,将Include和lib放入文件夹再拖到工程,我的目录结构如下图
目录
然后参考pjsip for iOS:实现一个简单的语音通话APP一步步来
2.1.设置Build Settings
1.把ENABLE_BITCODE设置为NO
2.在Header Search Path 中添加路径
$(PROJECT_DIR)/TestPJSIP/PJSIP/includes/pjlib
$(PROJECT_DIR)/TestPJSIP/PJSIP/includes/pjlib-util
$(PROJECT_DIR)/TestPJSIP/PJSIP/includes/pjmedia
$(PROJECT_DIR)/TestPJSIP/PJSIP/includes/pjnath
$(PROJECT_DIR)/TestPJSIP/PJSIP/includes/pjsip
路径
这个路径需要按照自己的实际路径来,不要直接复制粘贴
3.Other Linker Flags中添加-ObjC
4.Preprocessor Macros中添加PJ_AUTOCONF=1
2.2设置Build Phases
在Build Phases
中的 Link Binary With Libraries
中添加下面两个 Framework :
- AudioToolbox
- AVFoundation
2.3创建Header
因为使用的是swift开发,而库文件是OC的,所以需要建立桥接文件,如何建立桥接文件请参考iOS第三方库的使用方法以及常用的第三方库,建好之后在桥接文件中添加如下代码:
#import "pjsip.h"
#import "pjsua.h"
现在集成就成功了,command + B编译一下,不出意外是没问题了。那么今天就写到这里了,晚上有时间再更新swift版PJSIP的使用