iOS webRTC + SIP 协议实现点对点音视频通话。
1、配置,大家需要下载webRTC以及SIP的frameWork,其中webRTC可以使用cocopods pod 'GoogleWebRTC'导入更方便,SIP的frameWork如下图。
1
2、做SIP信令的话需要大家对C有一定的熟悉程度,需要用C去接收信令,然后处理信息进行下一步操作。
3、SIP信令中含有webRTC所需要的SDP信息,以及ICE候选者,通过webRTC的RTCPeerConnection通过ICE建立连接,SDP内是一些编码以及需要遵守的内容。
4、接下来给大家说一下webRTC使用
首先给大家说一下音视频通话的流程,
A主叫->B被叫
1. A获取SDP offer信息,并发送SIP信息 INVITE信息
2.A发送SIP信息并携带SDP信息
3.B接收到INVITE邀请通话信息,并回复彩铃或嘟声。
4.A收到B发送的彩铃或嘟声并开始播放
5.B接受通话并携带自己的SDP answer信息发送
6.A接收到B的SDP answer信息,建立连接后双方开始通话
初始化,通过一下几个方法,初始化并获得一个peerConnection对象
2
peerConnection对象创建之后,我们需要获取音视频流通过图片3中的方法,我们可以获取到音频流。图片4中的方法,获取到视频流。
3
4
开始通话时获取SDP offer信息,并调用didCreateSessionDescription方法
5
在didCreateSessionDescription方法中,我们需要调用peerConnectiong的setLocalDescription方法,设置本地流,然后调用didSetSessionDescriptionWithError方法
6
通过didSetSessionDescriptionWithError方法我们可以判断获取的SDP信息是否有误,同时如果我们是应答方,就需要在此方法中创建SDP answer.
7
以上是peerConnectiong的初始化以及SDP的创建
然后是添加候选者以及接收到对方SDP信息后的设置,接收到对方的SDP信息之后,我们可以通过peerConnection的setRemoteDescription设置对方的SDP信息,同时设置完成之后仍需调用didSetSessionDescriptionWithError,来检查SDP信息,并且跟山一步相呼应如果我们是应答方,就需要创建SDP answer
8
接下来是ICE候选者的设置,通过SIP消息收到的SDP信息内有携带ICE候选者信息,我们通过筛选后拿到ICE候选者,并通过peerConnectiong的addIceCandidate方法添加候选者。
9
ICE候选者设置后peerConnectiong就会自动进行检查并连接,通过代理方法didChangeIceConnectionState我们可以查看ICE连接的状态。还有其他的一些代理方法在此就不给大家一一举例,有兴趣的大家可以下来webRTC.frameWork进行查看。
以上就是webRTC+SIP的大致流程,其中SIP不是很熟悉,所以给大家描述的不是太清楚,有什么疑问欢迎私信。
以下是一些关键代码的提取地址,如有需要请自取:
1、SipManager OC 语言,用于接收SIP信息。(还有待完善,会及时更新链接)
链接: https://pan.baidu.com/s/1NpdjE56S_XaqIgS31kBjzA 密码: v0hq
2、Cliinterface C 语言,用于直接接收并处理SIP信息。
链接: https://pan.baidu.com/s/1ICUw09XmCMna77ZwjIQgiQ 密码: 9hi6
3、sofiasip.framework
链接: https://pan.baidu.com/s/1eeT67REjo1NaHsNmYalUTg 密码: j92d
4、WebRTC.framework
链接: https://pan.baidu.com/s/1kE8azhEPpK61l1Vkbfgvnw 密码: 7afg












网友评论