WebRTC系列-WebRTC基础(四)连接建立时序图及运行机制

本文详细介绍了WebRTC的连接建立时序图,包括STUN/TURN服务、信令服务和客户端的交互过程。通过信令服务,客户端A和B在各自创建PeerConnection并准备好媒体流后,交换SDP和ICE信息,完成连接。同时,文章还概述了WebRTC的主要接口类,如MediaStream、RTCPeerConnection和RTCDataChannel,以及PeerConnection的调用过程和时序图。
摘要由CSDN通过智能技术生成

1. 连接建立时序图

WebRTC消息的交互是交个应用自己去实现,主要是完成媒体协商和ICE穿透功能,这两个只是点会在接下来的章节里介绍;先看下WebRTC的建立连接时序图:
WebRTC的建立连接时序图1

上图中按照颜色不同,WebRTC的连接建立主要分为三大部分,stun/turn服务(绿色)、信令服务(黄色)、各个客户端(蓝色);接下来分析这三部分是如何完成WebRTC连接的建立过程:

  1. WebRTC中不提供信令服务,需要客户端自己实现信令服务可以是https的服务,也可以是socketio或websocket等信令服务;客户端A和B在服务端启动后连接上信令服务,为后续媒体协商做好消息发送准备;
  2. client A作为offer(发起方)先调用WebRTC提供的API创建一个peer对象,然后将准备好的媒体stream(同时要调用peerFactor创建音视频的track,将音频track和视频track添加到stream中)加入到peer中,这时候client Ad的媒体已经准备好了;
  3. 这时候调用peerconnection的offer方法后,会生成sdp通过回调返回到应用;
  4. 拿到offer SDP后client A 通过信令服务转发给client B,同样的client B应该再收到sdp调用peer的setRemote前将本地的stream加入到peer中,然后调用CreateAnswer方法
  5. 然后通过peer的回调就可以拿到answer SDP,通过信令服务发送给client A;
  6. 补充流程:在上述流程中candidate的生成是在client A和client B 调用setLocal后就开始持续手机candidate了,这里客户端一般需要换存等到setRemote后再发送给对方或自己在调用setRemote后再加入对方的candidate
  7. 这时候peerConnection会给客户端通过回调接把local candidate以及stun服务返回的reflex和relay的candidate按照顺序返回给客户端,这时候client A和client B就可以通过信令服务交换ICE信息,同时尝试打洞及连接过程;
  8. 当连接完成后,peerCOnnection就会通过回调告知ice的状态,当成功后同时也会回调一个对方媒体数据的消息onAddStream;
    经过上述基本WebRTC的连接就可以建立,双方就可以开始通话,当有网络变化时候,可以通过持续的candidate收集,双方交换后重新开始尝试建立连接,或者客户端主动调用restartICE方法。

2. 运行机制及主要接口类

2.1 概念介绍

在开始之前先介绍两个概念:流(mediaStream)与轨(track),

  • track:像一路视频一路音频都是单独的轨分别叫音轨和视频轨;两路视频之间也是两路轨,是不相交的;
  • mediaStream:借鉴传统的媒体流的概念,一路流里面包含视频轨、音频轨、字幕轨等;
    track和mediaStream主要是一个层级关系,在媒体流里一般都包含一个或多个轨;

2.2 几个重要类

WebRTC在面向应用层的接口提供了几个重要的类,如图:
在这里插入图片描述

  • MediaStream 也就是媒体流,WebRTC将其封成一个单独的类;
  • RTCPeerConnection WebRTC中最重要的类,这个类是大而全的类,包含了WebRTC的大部分对外接口的功能,对应用来说就很方便;在应用层只要创建一个链接,然后将mediaStream添加的peer中,用户不用去管传输、链接建立,编解码等都在内部执行;
  • RTCDataChannel 通过peerconnection创建,主要用于发送二进制数据;

2.3 PeerConnection调用过程

WebRTC官网也提供了一个简单介绍如图:
在这里插入图片描述
最上面的stream也就是上节介绍过的一个MediaStream中会包含多个track,而每一个音频或者视频都是单独的一个轨;接下来就是PeerConnection类的调用过程,按照从左到右按照箭头走向介绍:

  • PeerConnectionFactoryInterface 在这个类中会创建两个关键线程work Thread和signaling Thread 以及同时会创建PortAllocator(端口分配,源码分析会讲到);
  • 同时PeerConnectionFactoryInterface世界也是一个链接工厂,通过调用其提供的接口CreateLocalVideo/AudioTrack就能创建出视频、音频的Track(是LocalVideo/AduioTrackInterface接口类型的),通过CreateLocalMediaStream方法可以创建LocalMediaStreamInterface接口类性的媒体流,然后通过CreatePeerConnection方法可以创建出PeerConnectionInterface接口类型的PeerConnection;
  • 其中LocalVideo/AduioTrackInterface通过mediaStream的AddTrack方法将音频视频轨添加的LocalMediaStreamInterface接口类中;LocalMediaStreamInterface又通过PeerConnection的AddStream方法将轨道流添加到每一个PeerConnectionInterface中,
  • WebRTC中的状态等事件通过PeerConnectionInterface的PeerConnectionObserve回调(Callback)给应用.

2.3 PeerConnection调用时序图

上述介绍的几个类的调用时序图(官方的时序图),这几个图其实也就是对开篇综合图的一个详细的分解,当然也最主要是包含了几个关键类的调用关系及调用顺序:

  1. 呼叫方(offer)的时序图:
    在这里插入图片描述
  • 应用应该调用方法生成PeerConnectionFactory对象(且全局有且只有一个);
  • 通过这个factory创建peerConnection的实例;
  • 依次调用对应的方法创建mediaStream、audioTrack和videoTrack的对象,然后将audioTrack和videoTrack加入到mediaStream中;
  • 将创建好的stream加入到peerConnection中,接着调用peerConnect的offer方法提交这个媒体改变;
  • 时候PeerConnection通过应用监听的回调告诉应用有流更新或改变,同时也会回调offer的sdp数据给application;
  • 应用拿到这个sdp(offer)发送给远端;
  • 远端收到后生成answer发送给application,然后调用setRemote告诉PeerConnection;
  • 当双方都准备完成就开始尝试连接;
  • 媒体一旦连接成功,就会通过peerConnection的回调告诉应用;
  1. 接收方(answer)的时序图:
    在这里插入图片描述
    与offer端想法的是Application先会收到远端的sdp消息,然后进入流程;\
  • 调用对应的方法创建唯一的PeerConnectionFactory;
  • 然后调用CreatePeerConnection方法创建PeerConnection对象;
  • 接着调用peer对象的(先调用peer的setRemote提交远端的sdp)answer方法提交,
  • PeerConnection会通过回调告诉Application添加了一个媒体流(能获取到peer 在底层生成的远端的多个媒体的track),
  • 然后依次调用对应的方法创建mediaStream、audioTrack和videoTrack的对象,然后将audioTrack和videoTrack加入到mediaStream中,然后提交个peerConnetion ;(注:这里删除的原因是,实际上在创建peer的时候就应该加入了,在下一篇讲接口使用的时候会介绍);
  • 调用peer的answer方法会通过回调返回anser SDP ,Application将这个sdp通过信令发送给远端;
  • 当双方都准备完成就开始尝试连接,连接建立完成就可以进行通话互动;
  1. 结束通话的时序图:
    在这里插入图片描述
    任何一端的Application通过调用PeerConnection的close方法断开连接的同时,WebRTC会通过PeerCOnnection的回调方法告诉应用当前的关闭状态以及媒体流移除等通知;同时也会告知对方关闭消息,当双方关闭后结束通话(后续的四个箭头步骤,在WebRTC底层实现),最终的关闭会推送close状态;

到这里,WebRTC的信令时序图集运行的机制这里介绍完毕;
下一篇,介绍这些接口类在iOS端的使用及类关系;

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: webrtc-qt-example是一个基于Qt框架开发的WebRTC示例项目。 WebRTC是一种开源的实时通信技术,能够支持音频、视频和数据的实时传输。它通过浏览器之间的端对端连接,实现了高质量的实时通信。 webrtc-qt-example的目的是展示如何使用Qt进行WebRTC开发。Qt是一套跨平台的C++应用程序开发框架,它提供了丰富的工具和库,使开发者能够快速构建可靠的应用程序。 这个示例项目提供了一些基本的功能和界面,使开发者能够了解和学习如何将WebRTC集成到Qt应用程序中。它包含了常见的WebRTC功能,如媒体流捕获、媒体流传输、信令交换等。 通过webrtc-qt-example,开发者可以学习到如何使用Qt的多媒体模块来捕获音频、视频和媒体设备。同时,也可以学习到如何使用Qt的网络模块来进行实时信令交换和流传输。 这个示例项目还提供了一些简单的界面,方便开发者进行测试和调试。开发者可以通过该界面实现与其他WebRTC应用的通信,例如建立视频通话、音频通话等。 总之,webrtc-qt-example是一个非常实用的示例项目,可以帮助开发者快速上手并掌握WebRTC在Qt中的开发。 ### 回答2: webrtc-qt-example是一个基于Qt框架的WebRTC示例应用程序。WebRTC是一种开源项目,它提供了在浏览器之间进行实时通信的能力,包括视频和音频的传输。而webrtc-qt-example则是将这种技术集成到Qt应用程序中的一个示例。 在webrtc-qt-example中,它使用了Qt的多媒体框架和WebRTC提供的API来实现音视频的传输和显示。通过使用WebRTC的API,webrtc-qt-example可以建立点对点的连接,进行音频和视频的实时传输。 webrtc-qt-example中的代码结构清晰,易于理解和扩展。它提供了一些基本的功能,如建立连接、发送和接收音视频流、呼叫取消等。开发者可以根据自己的需求来对这些功能进行定制和扩展。 此外,webrtc-qt-example还支持一些高级特性,如媒体设备的选择、音视频的编码和解码等。开发者可以通过修改代码来选择不同的媒体设备,并且可以使用不同的编码和解码算法来满足自己的需求。 总之,webrtc-qt-example是一个很棒的WebRTC示例应用程序,它可以帮助开发者快速了解和使用WebRTC技术。无论是为了实现实时视频通话、视频会议还是其他需要音视频传输的应用场景,webrtc-qt-example都提供了一个良好的起点,帮助开发者快速上手并实现自己的需求。 ### 回答3: webrtc-qt-example是一个基于Qt框架和WebRTC技术的示例应用。WebRTC是一种用于在Web浏览器上实现实时通信的开源项目,它提供了一套丰富的API和协议,可以实现音视频通话、数据传输以及屏幕共享等功能。 webrtc-qt-example利用Qt框架提供的跨平台能力,结合WebRTC技术,展示了在Qt应用中如何实现实时通信功能。这个示例应用具有以下特点和功能: 1. 界面友好:webrtc-qt-example使用Qt的GUI绘制工具,具有美观、直观的用户界面,便于用户操作和使用。 2. 实时通信:webrtc-qt-example内置了WebRTC音视频通信功能,可以实现实时的语音和视频通话,支持两个或多个用户之间的通信。 3. 数据传输:除了音视频通话,webrtc-qt-example还支持在通话中传输数据。可以通过编写代码,实现实时文本传输或共享文件等功能。 4. 屏幕共享:webrtc-qt-example还支持屏幕共享功能,可以将自己的屏幕内容分享给其他用户,实现远程协助或在线教育等应用场景。 通过webrtc-qt-example的学习和实践,开发者可以了解并深入理解WebRTC技术的使用方法,以及在Qt框架中的应用。同时,借助webrtc-qt-example提供的示例代码和API文档,开发者可以进一步开发出更加复杂和功能丰富的实时通信应用,满足不同领域的需求。 总之,webrtc-qt-example是一个基于Qt框架和WebRTC技术的示例应用,具备实时音视频通话、数据传输和屏幕共享等功能,适用于开发者学习、实践和开发基于WebRTC的实时通信应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简简单单lym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值