XMPP Client 流程及入门

​​​​​​​

目录

1. Smack Android Demo

1.1 WebRtc 交互流程图

1.2 源码分析

1.2.1  创建PeerConnectionFactory

1.2.2 创建PeerConnection

1.2.3 创建并添加本地音频轨到PeerConnection - AddTracks

1.2.4 创建Offer,CreateOffer​​​​​​​

2. Janus 服务器


1. Smack Android Demo

1.1 WebRtc 交互流程图

两个客户端按照Session Description Protocol(SDP协议)交换双方的元数据。​​​​​​​

  • 天蓝色背景表示两个需要建立P2P通信的两个端点,端上运行着peerconnect_client程序。其中呼叫端成为Caller,被呼叫端为Callee。在端上执行的步骤均以黑色字体展现。
  • 粉色背景表示的是信令服务器,运行着peerconnect_server程序。端与服务器的信令交互过程也以粉色字体展示。
  • 橘红背景表示的是STUN服务器,运行着STUN服务器程序。工程中以谷歌提供的STUN服务器作为STUN测试服务器,地址为"stun:stun.l.google.com:19302"。端与STUN服务器的交互也以橘红色的字体展示。
  • 以绿色字体展示端与端之间的音视频传输。

​​​​​​​

1.2 源码分析

当WebRTC的端与信令服务器建立连接之后,可以通过与服务器的信令交互获知对等端点的存在,进一步通过信令向对端发起呼叫。在发起呼叫之前,发起方需要在本地做一些初始化工作,创建两个重要的对象:PeerConnectionFactory和PeerConnection。

1.2.1  创建PeerConnectionFactory

PeerConnectionFactory提供的能力——公有方法

  • 创建PeerConnection:CreatePeerConnection();
  • 创建音频源:CreateAudioSource(),为创建音频Track提供参数;
  • 创建视频轨:CreateVideoTrack();
  • 创建音频轨:CreateAudioTrack();
  • 获取ChannelManager:channel_manager();

1.2.2 创建PeerConnection

PeerConnectionObserver是PeerConnection的回调接口,应用层可以必须提供回调接口的实现,以便响应PeerConnection的事件。这些接口大致分为如下几类:

状态相关回调:

  • OnSignalingChange:信令状态改变。
  • OnConnectionChange:PeerConnection状态改变。

远端流或者轨道的添加或者移出:

  • OnAddStream:收到远端Peer的一个新stream。
  • OnRemoveStream:收到远端Peer移出一个stream。
  • OnAddTrack:当一个receiver和它的track被创建时。Plan B 和 Unified Plan语法下都会被调用,但是Unified Plan语法下更建议使用OnTrack回调,OnAddTrack只是为了兼容之前的Plan B遗留的接口,二者在同样的情况下被回调。
  • OnTrack:该方法在收到的信令指示一个transceiver将从远端接收媒体时被调用,实际就是在调用SetRemoteDescription时被触发。该接收track可以通过transceiver->receiver()->track()方法被访问到,其关联的streams可以通过transceiver->receiver()->streams()获取。只有在Unified Plan语法下,该回调方法才会被触发。
  • OnRemoveTrack:该方法在收到的信令指示某个track中将不再收到媒体数据时触发。Plan B语法下,对应的receiver将被从PeerConnection中移出,并且对应track将被设置为muted状态;Unified Plan语法下, 对应的receiver将被保留,对应的transceiver将改变direction为仅发送sendonly 或者非活动inactive状态

ICE过程相关:

  • OnRenegotiationNeeded:需要重新协商时触发,比如重启ICE时。
  • OnIceCandidate:收集到一个新的ICE候选项时触发。
  • OnIceCandidateError:收集ICE选项时出错。
  • OnIceCandidatesRemoved:当候选项被移除时触发。
  • OnStandardizedIceConnectionChange:符合标准的ICE连接状态改变。
  • OnIceGatheringChange:ICE收集状态改变。
  • OnIceConnectionReceivingChange:ICE连接接收状态改变。
  • OnIceSelectedCandidatePairChanged:ICE连接所采用的候选者对改变。

DataChannel相关:

  • OnDataChannel:当远端打开data channel通道时触发。

1.2.3 创建并添加本地音频轨到PeerConnection - AddTracks

初始化本地的媒体,也即创建本地的音频轨(AudioTrack)、视频轨(VideoTrack)、数据通道(DataChannel),并将这些本地的媒体轨道添加到PeerConnection对象中。

1.2.4 创建Offer,CreateOffer​​​​​​​

可调用PeerConnection::CreateOffer()创建本地SDP对象。

CreateOffer方法执行过程是比较明朗的,也有必要将涉及的基本观念、设计方式交代下:

  • WebRTC中将CreateOffer、CreateAnswer、SetLocalDescription、SetRemoteDescription、AddIceCandidate这5个与SDP会话相关的API认为是一个Operation,这些Operation必须是挨个执行,不能乱序,不能同时有两个交互执行。因此,设计了一套操作链的接口,由OperationsChain类提供此功能。当链入一个操作时,如果队列中没有其他操作,那么该操作会被立马执行;若是操作链中存在操作,那么本操作就入队操作链,等待上一个操作执行完成之后,以回调的形式(即上述代码中的operations_chain_callback回调方法)来告知执行下一步操作。
  • CreateSessionDescription,ObserverOperationWrapper相当于一个封装了 "Offer操作结果回调 + 操作链操作完成回调"的一个对象,一直沿着CreateOffer调用链往下传,直到能够判断是否能成功创建Offer的地方,创建Offer这个操作完成的地方,然后去触发其承载的回调函数,以便告知上层操作结果,然后触发下一个操作。具体见源码
     

1. webrtc服务器janus android客户端编译学习三​​​​​​​

2. WebRTC入门系列2:RTCPeerConnection

 

3. Peer Connection

4.WebRTC源码分析-呼叫建立过程之一(综述)

2. Janus 服务器

1. Janus源码分析(2)——主入口main

 2. Janus源码分析(5)——echotest分析

 3. WebRTC多人音视频解决方案-流量对比

 

4.Janus源码分析(4)——信令交互过程​​​​​​​

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值