Linphone 库的应用 (二)
来源:互联网 发布:苹果手机频谱分析软件 编辑:程序博客网 时间:2024/06/01 19:34
上篇中已经将linphone sdk 引入到自己的项目中并成功编译通过,下面就是代码的阅读和应用了。linphone的demo app 做得很完善,而且音视频通话部分大多也是应用封装得库方法,所以demo中的很多方法是可以拿来直接用的(仅供学习啦。如果商用,还是原创比较好,嘿嘿~~)
下面记录一下我在自己的项目中借鉴linphone demo的过程和经验:
做音视频通话这部分,主要用到的linphone-iPhone的文件有以下几个:
如上图所示,将这几个文件复制到本地项目的目录下,然后从Xcode中添加进来。因为主要的库应用是linphonecore,所以在要进行操作的类中只要用到库的地方都要加一句#import"linphone/linphonecore.h".
为了能让应用在启动时就为通话进行一些设置,需要在项目的appdelagate.h 和appdelegate.m中进行某些方法的扩充。除了头文件的引入,再就是在application:didFinishLaunchingWithOptions:中加入以下代码,启动这个库的应用。
//开启linphone服务
[[LinphoneManagerinstance]startLibLinphone];
然后就是具体的实现主叫和应答了
linphone-iphone中关于通话的有几个类:PhoneMainView,这个类似与自己项目中的TelephoneViewController类,从该类中调用是主叫还是被叫的界面及应用。
主叫部分:
该部分真正实现功能的代码并不复杂,归根结底还是调用linphone中的库的方法,只需自己完成跳转和关联即可。最根本的功能实现放在TelephoneViewController.m的实现函数turnToIPCallView:中。由于目前仅供测试使用,主叫仍然使用的是sip服务器,格式也是写的固定的已注册过的linphone账号,被叫也是写成的固定的账号:
[selfaddProxyConfig:@"beryl"password:@"123456"domain:@"sip.linphone.org"];
if (textTemp.length >0) {
ABRecordRef contact = [[[LinphoneManagerinstance]fastAddressBook]getContact:textTemp];
if (contact) {
displayName = [FastAddressBookgetContactDisplayName:(__bridgeABRecordRef)(textTemp)];
}
[[LinphoneManagerinstance]call:@"mydownload2009"displayName:displayNametransfer:FALSE];
}
这样主叫的部分功能就可以简单的实现了。在一台真机上用自己的应用可以发出呼叫,即可将呼叫通知发给另一台真机上并启动linphone-app的incomingCall,接通后即可通话。
被叫部分:
被叫部分的实现主要涉及两个controller之间的关联,即TelephoneViewController和IncomingCallViewController
首先在TelephoneViewController.m的viewDidLoad方法中加入下面的代码,实现呼叫的通知:
[[NSNotificationCenterdefaultCenter]addObserver:self
selector:@selector(callUpdate:)
name:kLinphoneCallUpdate
object:nil];
然后在该类中加入callUpdate的方法定义和实现。该方法主要是实现对call的状态的判断和相应的处理,这里暂时关注LinphoneCallIncomingReceived的状态,即在switch函数中:
case LinphoneCallIncomingReceived:
{
[selfdisplayIncomingCall:call];
}
IncomingCallViewController* incomingCallViewController = [[IncomingCallViewControlleralloc]init];
AudioServicesPlaySystemSound([LinphoneManagerinstance].sounds.vibrate);
if(incomingCallViewController !=nil) {
[incomingCallViewControllersetCall:call];
[incomingCallViewControllersetDelegate:self];
// [self.navigationController pushViewController:incomingCallViewController animated:YES];
onAcceptClick:)了.
今天暂时完成了这些工作,还有的问题就是setCall中对call属性赋值后无法进入下一步,会造成循环执行直到崩溃。。。
然后就是对incomingCallView的设置,不要把界面的源码设置直接放到viewDidLoad中,可以写一个init方法,然后初始化一下,加载界面。
- Linphone 库的应用 (二)
- linphone中h264的 RTP打包(二)
- linphone中h264的 RTP打包(二)
- Linphone-移植(二)
- Linphone callState 电话状态的监听状态(二)
- linphone编译(二) linux 下编译ffmpeg
- linphone-去掉linphone的ContactsListFragment联系人界面
- linphone-去掉About界面(二)
- Linphone 的编译
- linphone sdk 的使用
- LinPhone开发文档二:在Android/iPhone上使用linphone
- linphone
- linphone
- linphone
- linphone
- Linphone SDK开源库的学习和使用(一)
- Linphone SDK开源库的学习和使用(三)
- 基于Linux开源VOIP系统LinPhone[二]
- sharepoint cmdlet 3管理列表
- spark cache和chechpoint
- 复数的相加相减
- 你们好
- linux之SQL语句简明教程---UPDATE DELETE FROM
- Linphone 库的应用 (二)
- sharepoint cmdlet(4)文档库管理
- 去掉快捷方式箭头
- ubuntu下安装、卸载软件命令
- UIScrollView的scrollRectToVisible方法无效
- hdu 1102 A + B Problem II (java大数)
- Hbase安装与配置
- UVA - 12169 Disgruntled Judge (模线性方程的解为同余系)
- 算法谜题二手套选择