​​​​​​​

目录

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 流程及入门相关推荐

  1. Metasploit进行渗透测试的常用流程【入门】

    Metasploit是一个免费的.可下载的框架,通过它可以很容易地获取.开发并对计算机软件漏洞实施攻击.它具有图形化界面和命令行界面,这里讲的是msfconsole惯用的操作流程.本章使用的metas ...

  2. Camunda入门(四) - 流程应用(支付流程)入门示例

    参考文章:Camunda入门(四) - 流程应用(支付流程)入门示例_罗小爬EX的博客-CSDN博客_camunda入门 1. 支付流程 - 场景设定 为了快速上手Camunda,结合Camunda官 ...

  3. Springmvc开发流程(入门)

    springmvc请求的处理流程 1)发起some.do 2) tomcat(web.xml–url-pattern知道*.do的请求给DispatcherServlet) 3)DispatcherS ...

  4. 创建一个Servlet项目流程(入门)

    版本 IDEA 2020.2 JDK1.8 apache-tomcat-9.0.36 项目流程 一.IDEA中新建JaveEE项目 项目起名,选择项目存放地址,点击finish创建成功 进入项目后,右 ...

  5. 次世代游戏建模角色制作全流程,入门太需要这个了

    现在3D建模都在往次世代建模技术发展,不像手绘建模,一个低模加上贴图就搞定了. 在生活质量的提高,电子设备也越来越高档的今天,人们的审美也越来越高.次世代建模技术之所以是目前最流行的技术,在于讲究的一 ...

  6. 毕业设计论文的一般流程 - 小白入门

    毕业设计论文是大学生最后的学术工作之一,它是对所学专业知识的总结和应用,同时也是大学生在毕业前所要完成的任务.以下是毕业设计论文的一般流程以及拓展: 确定论文题目 论文题目是整个毕业设计的基础,也是后 ...

  7. 【libdatachannel】streamer与js客户端本机联调3 client流程

    继续2 [libdatachannel]pycharm运行streamer的信令服务及streamer与js客户端本机联调2 补充python服务器的打印 no close frame receive ...

  8. 2023阿里云账号注册流程新手入门教程

    阿里云账号注册支持手机号注册.阿里云APP注册.支付宝和钉钉多种注册方式,阿里云账号注册成功后需要通过实名认证才可以正常使用,下面阿里云百科图文详解阿里云账号多方式注册流程: 阿里云账号注册流程 注册 ...

  9. Flink SQL Client CLI 使用入门

    参照:https://blog.csdn.net/boling_cavalry/article/details/105964425 一.SQL Client Flink 的 Table & S ...

最新文章

  1. 数据库常用的基本操作
  2. jvm性能调优实战 - 36XX:SoftRefLRUPolicyMSPerMB配置引起的Metaspace频繁FullGC
  3. #pragma once与 #ifndef的区别为了避免同一个文件被include多次
  4. python django model关联另一个实体类
  5. wp自定义帖子没标签_谷歌对nofollow标签重新定义,百度是否有变化哪?
  6. 编写自己的Javascript库-1
  7. linux wireshark 安装教程,Linux下安装和运行Wireshark
  8. 简历python技能怎么写_简历怎么写?列出这10项重要的工作技能
  9. linux PE制作ramdisk,PE怎样在中建立一个Ramdisk盘
  10. wpe修改充值_WPE修改基础第四课:封包分析教程
  11. ADS(Advanced Design system)仿真测试元器件在不同功率下的输入阻抗
  12. DSP学习(3)—— DSP调试与追踪
  13. Silvaco 学习笔记——物理模型:载流子产生复合模型
  14. Element-UI下拉框el-select实现拼音搜索
  15. 矩阵特征值和特征向量matlab,MATLAB计算矩阵特征值和特征向量
  16. http请求 405错误
  17. Photoshop-水印的制作方法
  18. 名字作诗,让你的名片更具有趣味性和个性化
  19. 国产统信UOS系统运行小程序的探索
  20. LaTeX写一份完整的物理实验报告

热门文章

  1. Git 基本操作(入职亲体验)
  2. 【系统分析师之路】2016年系统分析师下午案例分析真题
  3. 技嘉H510M H主板安装gtx660折腾记录
  4. sublime_字体更换
  5. 重载java_方法重载
  6. python 实现126邮箱登录
  7. 【JAVA百炼成仙】筑基篇——JAVA筑基
  8. python中怎么判断输入的是否是字母 阿斯克码_python中字母与ascii码的相互转换
  9. Collecting Luggage - UVALive 2397 - 蓝桥杯 算法训练
  10. mysql主从配置duxi_MySQL 8.0主从(Master-Slave)配置