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)——信令交互过程
XMPP Client 流程及入门相关推荐
- Metasploit进行渗透测试的常用流程【入门】
Metasploit是一个免费的.可下载的框架,通过它可以很容易地获取.开发并对计算机软件漏洞实施攻击.它具有图形化界面和命令行界面,这里讲的是msfconsole惯用的操作流程.本章使用的metas ...
- Camunda入门(四) - 流程应用(支付流程)入门示例
参考文章:Camunda入门(四) - 流程应用(支付流程)入门示例_罗小爬EX的博客-CSDN博客_camunda入门 1. 支付流程 - 场景设定 为了快速上手Camunda,结合Camunda官 ...
- Springmvc开发流程(入门)
springmvc请求的处理流程 1)发起some.do 2) tomcat(web.xml–url-pattern知道*.do的请求给DispatcherServlet) 3)DispatcherS ...
- 创建一个Servlet项目流程(入门)
版本 IDEA 2020.2 JDK1.8 apache-tomcat-9.0.36 项目流程 一.IDEA中新建JaveEE项目 项目起名,选择项目存放地址,点击finish创建成功 进入项目后,右 ...
- 次世代游戏建模角色制作全流程,入门太需要这个了
现在3D建模都在往次世代建模技术发展,不像手绘建模,一个低模加上贴图就搞定了. 在生活质量的提高,电子设备也越来越高档的今天,人们的审美也越来越高.次世代建模技术之所以是目前最流行的技术,在于讲究的一 ...
- 毕业设计论文的一般流程 - 小白入门
毕业设计论文是大学生最后的学术工作之一,它是对所学专业知识的总结和应用,同时也是大学生在毕业前所要完成的任务.以下是毕业设计论文的一般流程以及拓展: 确定论文题目 论文题目是整个毕业设计的基础,也是后 ...
- 【libdatachannel】streamer与js客户端本机联调3 client流程
继续2 [libdatachannel]pycharm运行streamer的信令服务及streamer与js客户端本机联调2 补充python服务器的打印 no close frame receive ...
- 2023阿里云账号注册流程新手入门教程
阿里云账号注册支持手机号注册.阿里云APP注册.支付宝和钉钉多种注册方式,阿里云账号注册成功后需要通过实名认证才可以正常使用,下面阿里云百科图文详解阿里云账号多方式注册流程: 阿里云账号注册流程 注册 ...
- Flink SQL Client CLI 使用入门
参照:https://blog.csdn.net/boling_cavalry/article/details/105964425 一.SQL Client Flink 的 Table & S ...
最新文章
- 数据库常用的基本操作
- jvm性能调优实战 - 36XX:SoftRefLRUPolicyMSPerMB配置引起的Metaspace频繁FullGC
- #pragma once与 #ifndef的区别为了避免同一个文件被include多次
- python django model关联另一个实体类
- wp自定义帖子没标签_谷歌对nofollow标签重新定义,百度是否有变化哪?
- 编写自己的Javascript库-1
- linux wireshark 安装教程,Linux下安装和运行Wireshark
- 简历python技能怎么写_简历怎么写?列出这10项重要的工作技能
- linux PE制作ramdisk,PE怎样在中建立一个Ramdisk盘
- wpe修改充值_WPE修改基础第四课:封包分析教程
- ADS(Advanced Design system)仿真测试元器件在不同功率下的输入阻抗
- DSP学习(3)—— DSP调试与追踪
- Silvaco 学习笔记——物理模型:载流子产生复合模型
- Element-UI下拉框el-select实现拼音搜索
- 矩阵特征值和特征向量matlab,MATLAB计算矩阵特征值和特征向量
- http请求 405错误
- Photoshop-水印的制作方法
- 名字作诗,让你的名片更具有趣味性和个性化
- 国产统信UOS系统运行小程序的探索
- LaTeX写一份完整的物理实验报告
热门文章
- Git 基本操作(入职亲体验)
- 【系统分析师之路】2016年系统分析师下午案例分析真题
- 技嘉H510M H主板安装gtx660折腾记录
- sublime_字体更换
- 重载java_方法重载
- python 实现126邮箱登录
- 【JAVA百炼成仙】筑基篇——JAVA筑基
- python中怎么判断输入的是否是字母 阿斯克码_python中字母与ascii码的相互转换
- Collecting Luggage - UVALive 2397 - 蓝桥杯 算法训练
- mysql主从配置duxi_MySQL 8.0主从(Master-Slave)配置