计算机系统应用教程网站

网站首页 > 技术文章 正文

webrtc之一对一通话原理(1) webrtc 语音对讲

btikc 2024-10-02 12:12:52 技术文章 11 ℃ 0 评论

0.引言

本篇文章主要讲解webrtc的通话原理的信令设计和媒体协商原理,理解整个信令交互的过程,对于理解webrtc音视频通话,具有很大的帮助。参考文章内容列表如下:

websocket聊天实战(4)之js补充

WebSocket基础讲解(1)

WebSocket基础讲解(2)

websocket聊天实战(1)

websocket聊天实战(3)

webrtc实战打开摄像头和麦克风

详细讲解webrtc原理(1)


webrtc整体的一个通话原理的信令和媒体协商交互部分如下图示:



1.信令设计部分

A客户端通过join加入到信令服务器里面来。当B通过join加入到信令服务器,随后就会通知到A客户端。同理,信令服务器通过resp-join也会告诉B端,A端已经加进来了。

每次有新的客户端加进来时,那么就会调用New RTCPeerConnection,就会绑定onicecandidate等回调函数,比如这里的Peer-A。Peer-A再使用addTrack(track,localStream)去把本地流添加进来。详细交互如下图所示:

关键记住以下一些步骤:

(1)信令部分主要是两端的connect信令服务器。

(2)join房间。

(3)Peer-A和Peer-B获取到对端的remoteUid

(4)new RTCPeerConnection。

(5)addTrack(track,localStream)添加本地流。



2.媒体协商部分

媒体协商关键记住一些点,关键步骤如下:

(1)Peer-A端(发起端)的CreateOffer,Peer-B端(接收端)的CreateAnswer。

(2)Peer-A端和Peer-B端分别使用SetRemoteDescription和SetLocalDescription去设置SDP信息。

(3)Peer-A端和Peer-B端分别发送ICE Request信息,都能接收到对方的candidate信息。

(4)Peer-A端和Peer-B端相互接收对方的音视频数据。

(5)Peer-A端和Peer-B端的一方离开,或多方离开,就会通知对方并删除一些资源。


比如Peer-A端通过CreateOffer(拿到的是浏览器的信息,支持的媒体信息)端拿到SDP,并通过SetLocalDescription把这些信息,设置到本地,然后,Peer-A端也会把这些信息发送给对方,如这里描述的Peer-B端。Peer-B端收到Peer-A端的SDP信息后,也是会做同样的事情,分别调用New RTCPeerConnection,绑定onicecandidate等回调函数,并调用addTrack(track, localStream)添加本地流,通过setRemoteDescription设置对方传递过来的信息。Peer-B端也会通过CreateAnswer拿到本地浏览器支持的媒体信息,然后也是通过SetLocalDescription,设置到本地。Peer-B端并通过answer(回复的是sdp信息)去回复Peer-A。也就是说Peer-A发送offer给B端,那B端就一定要发answer给B端。当Peer-A端接收到Peer-B的answer信息后,那么Peer-A端会调用setRemoteDescription进行设置和保存。Peer-A和Peer-B在完成前面的工作后,就分别调用ontrack获取对端的码流,这个时候一般是拿到对方码流的句柄,但是这时候数据流还没有发出来。Peer-A通过ICE Request向coturn服务器发起打洞,并拿到地址后,就会调用oniceCandidate的回调方法,这个回调方法就是负责拿到打洞的地址,然后就可以向Peer-B端去发送candidate,Peer-B端拿到candidate信息后,就会通过addiceCandidate添加到自己的RTCPeerConnection。同理,Peer-B端向Peer-A也是一样的流程。如果是拿到多组candidate信息后,那就会相互匹配,如果匹配都不成功,就会去走中继了。无论是走中继成功还是拿到candidate成功后,两端就可以传输数据,然后使用音视频通话了。如果某一方要离开当前通话,那就会发送leave命令到信令服务器,这时候A端就会调用close方法(释放本地和远端的一些资源),信令服务器删除Peer-A并通知Peer-B,这是Peer-B就知道Peer-A已经离开了,Peer-B端调用close方法(释放本地和远端的一些资源)。Peer-A端和Peer-B端交互时序如下图所示:



注意:上面所说的这些函数,都是属于PeerConnection。offer和answer只是表示不同的方向,实际就是传递的都是sdp信息。ICE Request不会有一个顺序,对端都是相互请求,并不是Peer-A端发起ICE Request,才能由Peer-B端发起,互相不影响。只要是拿到这个candiate信息后,就会发送给对方。


3.总结

本篇文章讲解了信令交互的主要原理,欢迎关注,转发,收藏,点赞

后面关于项目和音视频面试有关的知识,会发布在微信公众号,可以关注微信公众号"记录世界 fron antonio"

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表