STUN 、TURN 和ICE如何工作 (两个端点交互流程):

我们假设两个对等方A和B都使用WebRTC对等双向媒体流(例如,视频聊天应用程序)的情况。

要连接到B的应用程序,A的应用程序必须生成SDP offer。SDP offer包含有关A的应用程序想要建立的会话的信息,包括要使用的编解码器,这是音频还是视频会话等。它还包含 ICE candidates,它们B应用程序用于尝试连接A应用程序需要用到的A的IP和port。

为了建立ICE候选者列表,A的应用程序向STUN服务器发出了一系列请求。服务器返回发起请求的公共IP地址和端口对。A的应用程序将每对添加到ICE候选列表中,换句话说,它收集ICE候选。一旦A的应用程序完成了ICE候选者的收集,它就可以返回SDP。

接下来,A的应用程序必须通过这些应用程序进行通信的信令通道将SDP传递给B的应用程序。WebRTC标准未指定用于此交换的传输协议。它可以通过HTTPS,安全WebSocket或任何其他通信协议执行。

现在,B的应用程序必须生成一个SDP Answer。B的应用程序遵循上一步中使用的A步骤:收集ICE candidates等。然后B的应用程序需要将此SDP Answer通过信令服务器返回给A的应用程序。

在A和B交换了SDP之后,它们将执行一系列连接检查。每个应用程序中的ICE算法都从对方SDP中收到的列表中获取ICE candidates IP /端口对,并向其发送STUN请求。如果另一个应用程序返回了响应,则原始应用程序认为检查成功,并将该IP /端口对标记为有效的ICE候选者。

在对所有IP /端口对完成连接检查之后,应用程序进行协商并决定使用剩余的有效对之一。选择一对后,媒体开始在应用程序之间流动。(有效通道选择策略一般是host>p2p>releay)

如果任何一个应用程序都找不到通过连通性检查的IP /端口对,它们将向TURN服务器发出STUN请求以获取媒体中继地址。中继地址是一个公共IP地址和端口,用于转发与应用程序之间接收到的数据包并设置中继地址。然后将该中继地址添加到候选列表,并通过信令通道进行交换。

PS:实际上实现时,使用的是生成SDP和交换ICE candidates 可以是并行执行。即生成SDP并不需要与STUN服务器通信。ICE candidate 信息不用包含在SDP 中发送。这样可以提高建立链接的速度。不用等ICE candidate搜集完成后才进行信令通信。

AWS KVS(Kinesis Video Streams)之WebRTC相关推荐

  1. AWS KVS(Kinesis Video Streams)之WebRTC的C库

    作为小白用户编译就卡出各种问题.各种环境问题各种bug调试. 针对亚马逊的kvs 的vs2019编译去除kvs的信令服务器代码,实现自己的mqtt信令控制.最终可以p2p发送视频数据和音频数据. 编译 ...

  2. AWS KVS(Kinesis Video Streams)之WebRTC的C库测试

    想要验证AWS KVS with WebRTC的嵌入式C库,我们将其源码编译(详见WebRTC编译过程)后,可以运行其提供的sample,注:该过程是在Linux环境上. 1.编译结束后,我们在bui ...

  3. AWS KVS(Kinesis Video Streams)之WebRTC集成过程(六)

    因为我们的实际的使用过程是智能摄像头设备(门铃/Camera)和Echoshow(实际上是Alexa)对接,实现语音全双工,我们计划集成AWS提供的完整的WebRTC的方案(SDK),因此在所有依赖库 ...

  4. AWS KVS(Kinesis Video Streams)之WebRTC移植编译(五)

    在使用KVS完整的WebRTC的SDK(包括信令.STUN/TURN等),我们还需要编译(详见SDK的依赖项)如下两个库 1.amazon-kinesis-video-streams-producer ...

  5. AWS KVS(Kinesis Video Streams)之WebRTC移植编译(一)

    本文在于记录amazon-kinesis提供的设备端WebRTC SDK的依赖项编译过程,该过程在嵌入式设备君正平台验证 1.首先我们可能需要一个墙外的服务器拉取代码,我是在开启了一个AWS的美国环境 ...

  6. AWS KVS(Kinesis Video Streams)之WebRTC移植编译(三)

    继上一篇文章后,中途被其他事情耽误两周,现在继续... 编译第三方库: 一.[君正平台:编译usrsctp] 1.下载源码 git clone https://github.com/sctplab/u ...

  7. AWS KVS(Kinesis Video Streams)之WebRTC依赖项

    KVS WebRTC依赖于openssl.srtp.usrsctp.kvspic.我们挨个来编译,如果我们需要往嵌入式设备中移植,需要移植这些依赖项,因此在编译移植前,我们需要得到源码. 先下载所有代 ...

  8. AWS KVS(Kinesis Video Streams)之WebRTC集成过程报错问题整理(七)

    在前面我已经将君正T31X平台的WebRTC相关的依赖库编译完成,且现在将kvsWebrtcClientMaster测试用例也需要编译出来,在Camera中运行,验证依赖库的正确性. 根据自己编写的C ...

  9. AWS KVS(Kinesis Video Streams)之WebRTC集成过程报错问题整理(八)

    1.用例情况: [1]第一组 master:君正平台的 kvsWebrtcClientMaster viewer:https://us-west-2.console.aws.amazon.com/ki ...

最新文章

  1. 利用计算机解决问题实际依赖,行测答题技巧:准确把握加强、削弱的“相关性”...
  2. Android - 文件读写操作 总结
  3. for循环与while循环效率对比·5年以下编程经验必看C#】
  4. 视频 | OFC上的腾讯声音
  5. RxLifecycle详细解析
  6. google Chrome 浏览器源码地址地址!
  7. VDI序曲二十七 IE7,IE8,IE9应用程序虚拟化
  8. python, numpy
  9. Poj 1936,3302 Subsequence(LCS)
  10. 一步一坑学android之安装andriod studio(andriod studio3.0)
  11. 【Tricks】半监督深度学习训练和实现小Tricks
  12. 传统HTML页面实现模块化加载
  13. Latex入门----从提纲开始
  14. 计算机管理中无法格式化,Win7电脑无法格式化SD卡怎么办?
  15. 基于node.js的网页聊天系统设计与实现
  16. win7中inter信息服务器,Win7系统Internet选项在哪里?
  17. 以太坊源码分析之 P2P网络(五、p2p连接控制与消息处理(中))
  18. 针对WM6.5系统和软件的注册表修改以及优化
  19. M - 魔戒(四维BFS)
  20. 51单片机 LED点亮、闪烁以及流水灯实现

热门文章

  1. pushstate 和 popstate的用法详解
  2. SQL Server数据库中创建数据表及数据类型操作应用
  3. 监控摄像头参数详细介绍
  4. 骨传导蓝牙耳机哪个好?骨传导蓝牙耳机品牌推荐
  5. 【堆】 大根堆和小根堆的建立
  6. 决定一生的99个简单法则
  7. Java是编译性语言还是解释型语言 ?
  8. Django实现简单网页弹出警告
  9. Spring、SpringMVC、Mybatis常见面试题总结
  10. 使用Nodejs创建一个Web服务器应如何操作?以及路由相关知识了解