2019/8/26更新,更新几点东西:
1.此教程可能已经过时,距离这篇的起稿已经过去了两年,很多东西都已经更改,同时由于本人也在研究其他方向,本教程将不再维护。
2.关于QQ群聊,有不懂的地方可以加群讨论,为了更高效的提问,请学习提问的智慧
3.本人已转移博客到自行搭建的博客平台,对音视频(webrtc)感兴趣的同学, 欢迎收藏订阅,这是链接
一 . 编译
具体编译过程可参考我之前的文章:快速移植Linphone到自己的项目, 当然如果不想花费那么多时间编译下载子模块的, 可以到百度网盘进行下载, 提供两种方式的SDK:
- .a形式的SDK, 就是老版的打包方式,链接:https://pan.baidu.com/s/1bplNAMz 密码:qmm8
2.Framework形式的SDK, 就是最新使用的打包方式,链接: https://pan.baidu.com/s/1gfth80z 密码: 58bp
今天我们要讲的是第二种方式的移植, 可以先看一下官网的教程:
After the SDK has been built, add all the .framework files located in liblinphone-sdk/apple-darwin/Frameworks to your XCode project Embedded Frameworks. Add a Run Script step to your build steps, put it after your step to embed frameworks, set it to use our deploy.sh script located in liblinphone-sdk/apple-darwin/Tools.
官网写的比较简洁, 大意就是把SDK拖入工程里面, 然后添加个脚本, 就完事了. 但事实并不是这么简单, 还需要做一些额外的设置才行. 接下来是我们的移植过程
二 . 移植
- 下载完Framework版本的SDK后, 先把SDK拷贝到跟项目同一目录下, 我们只需要用到liblinphone-sdk下的apple-darwin这个文件夹即可, 其他的不需要x86_64这些不需要, 如下图:
2.链接一下Framework, Build Phases->Link Binary With Libraries, add + :
3.设置一下Header Search Paths:
设置为include文件的目录:
$(SRCROOT)/liblinphone-sdk/apple-darwin/include
4.运行一下, 看下能否编译运行, 出现以下结果:
嗯... 看来还没配置完成.如果出现image not found, 则需要第五步
5.添加embedded Framework
6.再运行一下,没有任何报错, good job.
7.设置pch文件
如果项目本身已经有了pch文件, 则不需重复添加pch, 而没有pch文件的, 则需要添加一下, 具体教程可百度之. 然后在pch添加以下代码, 目的主要是, SDK里面引用了Cocoa里面的一些框架但没引用相关头文件, 不全局添加Foundation跟UIKit会报错.
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif
8.添加一下linphonemanager的头文件, 本人已从linphone-demo抽离单独的linphonemanager, 具体请点击github链接. 然后开启linphone-core:
可以成功开启core.
在这里解释一下, LinphoneManager这个文件主要封装了开启核心, 进行一些基本的初始化设置, 还有处理一些定时器的事件等. 由于官方demo的LinphoneManager绑定了demo其他的一些功能业务, 所以需要我们进行抽离. 而SMLinphoneConfig这个文件则是本人封装了些注册方法, 还有打电话方法, 可直接注册注册还有打电话.
9.添加一些额外的设置
首先在Finder中, 把Resources跟Tools两个文件夹拷贝到工程目录下, 然后用下面的方法(Add Files to)添加进项目根目录里面, 根目录里面, 根目录里面, 重要的事情说三遍, 添加Linphone官方Demo的两个文件夹:
Resources文件里面包含一些配置文件, Tools包含一些脚本配置文件.
1)添加对Framework进行瘦身的脚本, 主要作用就是在上架的时候, 去掉SDK包里面的不需要的x86_64框架, 目前集成过程中可选. 在上架的时候, 可自己手动去除, 搜索lipo -remove命令即可.
2)设置资源文件
linphonerc以及linphonerc-factory为系统默认的一些参数配置文件, 开发者可以直接对一些参数进行修改, 如linphonerc下的:
解释一下: linphonerc里面的配置是持久化配置, 就是说在第一次安装APP之后起效, 换句话说, APP已经安装了一次之后, 以后在xcode改了这个文件配置之后, 然后再运行, 是不会起效的. 如果想要即时起效, 需要修改linphonerc-factory这个文件, 如果想要linphonrc这个文件起效, 需要卸载重装才能起效, 这点要注意下.
[sound]
capture_dev_id=AU: Audio Unit Receiver
eq_active=0
playback_dev_id=AU: Audio Unit Receiver
[video]
automatically_accept=1
automatically_initiate=1
capture=1
display=1
enabled=1
show_local=0
size=qvga
具体参数意义可以参考linphone-demo的相关页面, 在此不展开说明.
另外一些sounds文件可以替换为自家的音频文件.
开启核心的时候, 如果控制台出现以下错误, "Can't find "(null)":", 说明linphone没找linphonerc的这个配置文件, 重新检查第10步有没有正确导入两个资源文件.
三 . 一些链接:
linphonemanager精简文件可到GitHub下载, 下载地址
demo可加群下载, 欢迎交流讨论, QQ群号: 578410849
10.17日补充, 完整linphone-demo, 可直接编译版本, 版本号:3.16.5,百度网盘
链接: https://pan.baidu.com/s/1bo7nGCZ 密码: uju9
MD5: 75023f5c0f31beb3f3e7617d5b79018b
11.13更新补充, 发现那个瘦身脚本在打包的时候不起作用, 不知是什么原因, 就是在打包过程中, 会报错. 间接处理方式就是使用lipo -remove命令对SDK进行瘦身, 去除x86_64这个架构. 如网友遇到相同的问题, 并且有好的解决方法, 留下您的宝贵意见. 感谢
End