从零开始搭建音视频通话服务
这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战
目录
- iOS 从零开始搭建音视频通话服务01-协议选择(Linphone)
- iOS 从零开始搭建音视频通话服务02-搭建一个sip服务器上
- iOS 从零开始搭建音视频通话服务03-搭建一个sip服务器下
- iOS 从零开始搭建音视频通话服务04-初始化和登录
- iOS 从零开始搭建音视频通话服务05-接听语音通话
前言
经过一周的努力,终于完成了服务器的部署和sip账号登录,接下来要完成通话功能了,由于自己搭的sip服务器不完整,公司的已经搞好了,所以现在都是用公司的开发了,不拿自己的玩了。云服务器的路由是一层又一层,在虚拟机里面一模一样的步骤,虚拟机的可以访问到,云服务器就是访问不到,难受得很。。。如果是先看这篇文章的,建议先看前面的初始化和登录篇。
音频通话
添加通话状态的代理
通话状态的回调是onCallStateChanged,和登录状态的回调一样,也是CoreDelegate中的一个。使用Core.addDelegate()添加到代理组中。
- CoreDelegate
- 添加
onCallStateChanged,State对应通话的状态,根据不同的状态进行不同的处理。
mCoreDelegate = CoreDelegateStub( onCallStateChanged: { (core: Core, call: Call, state: Call.State, message: String) in
if (state == .IncomingReceived) { // 收到通话请求
//TODO: XXX
} else if (state == .Connected) { // 通话联通
//TODO: XXX
} else if (state == .Released) { // 通话结束
//TODO: XXX
}
})
mCore.addDelegate(delegate: mCoreDelegate)
接听电话
收到通话请求后,可以调用mCore.currentCall?.accept()来接通电话,也可以直接使用call.terminate()来接通电话。前提是要设置麦克风的使用权限。
func acceptCall() {
// 必须设置麦克风权限"Privacy - Microphone usage description"
do {
try mCore.currentCall?.accept()
} catch { NSLog(error.localizedDescription) }
}