本发明涉及视频直播技术领域,具体为一种ios移动端基于socket.io和webrtc的观看端视频连麦架构。
背景技术:
现有技术中,主播端和观看端各自都采集自己的视频源,然后通过rtmp协议发送给对方,也就是当连麦时,双方都是主播端,然后当自己拿到对方发过来的音视频数据的时候,把数据和自己本身的音视频数据进行合并显示,就完成了连麦;现有技术的缺点:rtmp流媒体方案由于延时较多,无法满足即时互动需求。
技术实现要素:
本发明的目的在于提供一种ios移动端基于socket.io和webrtc的观看端视频连麦架构,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种ios移动端基于socket.io和webrtc的观看端视频连麦架构,包括webrtc建立p2p通信和信令传输,webrtc建立p2p通信包括以下流程:
a、使用webrtc构建实时音视频通信;
b、在clienta和clientb之间传送彼此的sdp信息和candidate信息,clienta和clientb通过这些信息建立p2p连接来传送音视频数据;
c、clienta向clientb发起对聊请求。
优选的,所述步骤c中对聊请求方法如下:
a、客户端a首先创建peerconnection对象,然后打开本地音视频设备,将音视频数据封装成mediastream添加到peerconnection中;
b、客户端a调用peerconnection的createoffer方法创建一个用于offer的sdp对象,sdp对象中保存当前音视频的相关参数;客户端a通过peerconnection的setlocaldescription方法将该sdp对象保存起来,并通过signal服务器发送给客户端b;
c、客户端b接收到客户端a发送过的offersdp对象,通过peerconnection的setremotedescription方法将其保存起来,并调用peerconnection的createanswer方法创建一个应答的sdp对象,通过peerconnection的setlocaldescription的方法保存该应答sdp对象并将它通过signal服务器发送给客户端a;
d、客户端a接收到客户端b发送过来的应答sdp对象,将其通过peerconnection的setremotedescription方法保存起来;
e、在sdp信息的offer/answer流程中,客户端a和客户端b已经根据sdp信息创建好相应的音频channel和视频channel并开启candidate数据的收集,candidate数据可以简单地理解成客户端的ip地址信息;
f、当客户端a收集到candidate信息后,peerconnection会通过onicecandidate接口给客户端a发送通知,客户端a将收到的candidate信息通过signal服务器发送给客户端b,客户端b通过peerconnection的addicecandidate方法保存起来;同样的操作客户端b对客户端a再来一次;
g、客户端a和客户端b就已经建立了音视频传输的p2p通道,客户端b接收到客户端a传送过来的音视频流,会通过peerconnection的onaddstream回调接口返回一个标识客户端a端音视频流的mediastream对象,在客户端b端渲染出来即可。同样操作也适应客户端b到客户端a的音视频流的传输。
优选的,所述信令传输包括以下流程:
a、观看端和主播端都已经和信令服务器建立好socket.io连接;
b、观看端监听room_setting事件,收到room_setting消息后,解析其中的allow_speak_interaction字段,表示当前通话允不允许视频连麦,如果允许则进行以下流程,如果不允许,以下流程全部不走;
c、观看端发送request_speak消息,表示申请连麦;
d、如果60秒还没有收到信令服务器发过来的允许连麦的消息,则观看端主动发送cancel_request_speak消息,表示主动挂断连麦,即本次连麦失败;
e、观看端监听accept_speak消息,当主播端接受连麦申请时,监听的这个事件会收到消息,消息中包含申请连麦人员的唯一id,保存此值;
f、观看端发送speak_enter事件;
g、主播端发送给观看端speak_peer_list消息,其中包含所有用户和连麦相关的信息,包括用户id,用户角色,用户名称;
h、观看端根据上一步骤speak_peer_list中的用户列表,得到主播端的用户信息,和主播端开始建立webrtc的p2p通信;
i、当观看端接收到speak_peer_list消息后,如果十秒内还没有接收到流媒体数据的话,观看端将发送hangup_interaction消息到主播端,挂断连麦,并回收相应的连麦资源;
j、观看端主动挂断连麦的时候,观看端会发送hangup_interaction消息,主播端会返回speak_disconnect消息,表示成功挂断连麦,观看端做相应的清理资源操作,当主播端主动挂断连麦的时候,主播端会发送speak_disconnect消息给观看端,观看端接收到speak_disconnect消息后,会挂断连麦,并做相应的清理资源的操作。
与现有技术相比,本发明的有益效果是:本发明中,ios移动端视频直播连麦时,用socket.io来进行主播端和观看端合理的信令传输,用webrtc来进行实时音视频通话,连麦码流采用高实性协议传输,少了服务器中转环节,更低的时延。
附图说明
图1为本发明的webrtc构建实时音视频通信流程图;
图2为本发明的信令传输流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-2,本发明提供一种技术方案:一种ios移动端基于socket.io和webrtc的观看端视频连麦架构,包括webrtc建立p2p通信和信令传输,webrtc建立p2p通信包括以下流程:
a、使用webrtc构建实时音视频通信;
b、在clienta和clientb之间传送彼此的sdp信息和candidate信息,clienta和clientb通过这些信息建立p2p连接来传送音视频数据;
c、clienta向clientb发起对聊请求。
本实施例中,步骤c中对聊请求方法如下:
a、客户端a首先创建peerconnection对象,然后打开本地音视频设备,将音视频数据封装成mediastream添加到peerconnection中;
b、客户端a调用peerconnection的createoffer方法创建一个用于offer的sdp对象,sdp对象中保存当前音视频的相关参数;客户端a通过peerconnection的setlocaldescription方法将该sdp对象保存起来,并通过signal服务器发送给客户端b;
c、客户端b接收到客户端a发送过的offersdp对象,通过peerconnection的setremotedescription方法将其保存起来,并调用peerconnection的createanswer方法创建一个应答的sdp对象,通过peerconnection的setlocaldescription的方法保存该应答sdp对象并将它通过signal服务器发送给客户端a;
d、客户端a接收到客户端b发送过来的应答sdp对象,将其通过peerconnection的setremotedescription方法保存起来;
e、在sdp信息的offer/answer流程中,客户端a和客户端b已经根据sdp信息创建好相应的音频channel和视频channel并开启candidate数据的收集,candidate数据可以简单地理解成客户端的ip地址信息;
f、当客户端a收集到candidate信息后,peerconnection会通过onicecandidate接口给客户端a发送通知,客户端a将收到的candidate信息通过signal服务器发送给客户端b,客户端b通过peerconnection的addicecandidate方法保存起来;同样的操作客户端b对客户端a再来一次;
g、客户端a和客户端b就已经建立了音视频传输的p2p通道,客户端b接收到客户端a传送过来的音视频流,会通过peerconnection的onaddstream回调接口返回一个标识客户端a端音视频流的mediastream对象,在客户端b端渲染出来即可。同样操作也适应客户端b到客户端a的音视频流的传输。
本实施例中,信令传输包括以下流程:
a、观看端和主播端都已经和信令服务器建立好socket.io连接;
b、观看端监听room_setting事件,收到room_setting消息后,解析其中的allow_speak_interaction字段,表示当前通话允不允许视频连麦,如果允许则进行以下流程,如果不允许,以下流程全部不走;
c、观看端发送request_speak消息,表示申请连麦;
d、如果60秒还没有收到信令服务器发过来的允许连麦的消息,则观看端主动发送cancel_request_speak消息,表示主动挂断连麦,即本次连麦失败;
e、观看端监听accept_speak消息,当主播端接受连麦申请时,监听的这个事件会收到消息,消息中包含申请连麦人员的唯一id,保存此值;
f、观看端发送speak_enter事件;
g、主播端发送给观看端speak_peer_list消息,其中包含所有用户和连麦相关的信息,包括用户id,用户角色,用户名称;
h、观看端根据上一步骤speak_peer_list中的用户列表,得到主播端的用户信息,和主播端开始建立webrtc的p2p通信;
i、当观看端接收到speak_peer_list消息后,如果十秒内还没有接收到流媒体数据的话,观看端将发送hangup_interaction消息到主播端,挂断连麦,并回收相应的连麦资源;
j、观看端主动挂断连麦的时候,观看端会发送hangup_interaction消息,主播端会返回speak_disconnect消息,表示成功挂断连麦,观看端做相应的清理资源操作,当主播端主动挂断连麦的时候,主播端会发送speak_disconnect消息给观看端,观看端接收到speak_disconnect消息后,会挂断连麦,并做相应的清理资源的操作。
本发明中,ios移动端视频直播连麦时,用socket.io来进行主播端和观看端合理的信令传输,用webrtc来进行实时音视频通话,连麦码流采用高实性协议传输,少了服务器中转环节,更低的时延。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。