很久没有写了,尤其是技术文章,总感觉很难受。这里总结一下最近的学习内容。

官网永远是最重要,但同时也是最容易忽略的学习途径。So you should look official websites firtsly.

先看一看基础概念的解释
WebRTC 相關縮寫名詞簡介

推荐一种方式,打开官方给的例子,然后通过浏览器调试,定位到控制到就能够看到这个流程了。WebRTC samples
如下:

  • Offer/Answer 與 Signal Channel 是什麼?

WebRTC 必須透過某種中介伺服器才能建立連線,而我們稱這種媒介為「訊號通道 (Signal Channel)」。也就是說,在建立連線之前,會先透過訊號通道交換建立連線所需的資訊。

我們所要交換的資訊就是「Offer」與「Answer」,而其內容就是上述的 SDP。

當 Peer A 設立連線時,就會建立 Offer。接著會透過選定的訊號通道將此 Offer 傳送給 Peer B。在 Peer B 收到訊號通道傳來的 Offer 之後,就會建立 Answer,並透過同樣的訊號通道將 Answer 回傳給 Peer A。

  • ICE Candidate 是什麼?

如上所述,Offer/Answer 與 SDP 用以交換多媒體的格式內容;ICE candidate 則用以交換網路連線的建立方式,並可說明端點溝通的方法 (直接通訊,或透過 TURN 伺服器通訊)。

概述

一、WebRTC 直播时代

二、A Closer Look Into WebRTCwebkit添加新内容

相关

一、音视频云声网Agora:从demo到实用,中间还差1万个WebRTC

WebRtc协议栈

在这个例子中,我们将使用SIP-over-WebSocket(SIPoWS)作为信令栈。HTTP协议用于浏览器下载HTML5/JavaScript程序内容;NAT栈解决P2P连接问题;媒体栈用于发送和接收RTC的音频和视频。

二、为什么要有打洞服务

  • IPv4用完
  • 私有地址一致,用了同一网段,不能用内网地址,需要用外网地址。
  • 在有防火墙和地址转换时P2P需要UDP打洞:NAT后不能直接向广域网那样IP直接连接
  • 不是所有 NAT 网络都能打洞成功,连接就会建立失败,只能服务器中转。

环境搭建

一、Webrtc服务器搭建

二、iOS下音视频通信-基于WebRTC非常全面的介绍,并且有Demo。大爱,跟着demo走一遍就熟了

严格来说它仅仅是不需要服务端来进行数据中转而已。

WebRTC至少有两件事必须要用到服务器:

  • 浏览器之间交换建立通信的元数据(信令)必须通过服务器。

    • 我们在A和B需要建立P2P连接的时候,至少要服务器来协调,来控制连接开始建立。而连接断开的时候,也需要服务器来告知另一端P2P连接已断开。这些我们用来控制连接的状态的数据称之为信令,而这个与服务端连接的通道,对于WebRTC而言就是信令通道。
    • 在建立连接之前,客户端之间显然没有办法传递数据。所以我们需要通过服务器的中转,在客户端之间传递这些数据,然后建立客户端之间的点对点连接。但是WebRTC API中并没有实现这些,这些就需要我们来实现了。
  • 为了穿越NAT和防火墙。

  • WebRTC主要实现了三个API

  1. MediaStream:通过MediaStream的API能够通过设备的摄像头及话筒获得视频、音频的同步流
  2. RTCPeerConnection:RTCPeerConnection是WebRTC用于构建点对点之间稳定、高效的流传输的组件
  3. RTCDataChannel:RTCDataChannel使得浏览器之间(点对点)建立一个高吞吐量、低延时的信道,用于传输任意数据。
    其中RTCPeerConnection是我们WebRTC的核心组件。
  • P2P连接的过程
  1. A和B连接上服务端,建立一个TCP长连接(任意协议都可以,WebSocket/MQTT/Socket原生/XMPP),我们这里为了省事,直接采用WebSocket,这样一个信令通道就有了。
  2. A从ice server(STUN Server)获取ice candidate并发送给Socket服务端,并生成包含session description(SDP)的offer,发送给Socket服务端。
  3. Socket服务端把A的offer和ice candidate转发给B,B会保存下A这些信息
  4. 然后B发送包含自己session description的answer(因为它收到的是offer,所以返回的是answer,但是内容都是SDP)和ice candidate给Socket服务端
  5. Socket服务端把B的answer和ice candidate给A,A保存下B的这些信息。

三、WebRTC(iOS)下载编译(下载指定版本)

点对点连接下,会导致这样一个问题:

如果客户端A想给客户端B发送数据,则数据来到客户端B所在的路由器下,会被NAT阻拦,这样B就无法收到A的数据了。
但是A的NAT此时已经知道了B这个地址,所以当B给A发送数据的时候,NAT不会阻拦,这样A就可以收到B的数据了。这就是我们进行NAT穿越的核心思路。

思路:
我们借助一个公网IP服务器。a、b都往公网IP/PORT发包,公网服务器就可以获知a,b的IP/PORT,又由于a,b主动给公网IP服务器发包,所以公网服务器可以穿透NAT A,NAT B送包给a,b。
所以只要公网IP将b的IP/PORT发给a,a的IP/PORT发给b。这样下次a和b互相消息,就不会被NAT阻拦了。

基础概念

一、WebRTC入门教程.md

协议

一、NAT

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。

二、STUN

是一种网络协议,它一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT 路由器之后的主机之间建立UDP通信。。目的就是找到外界连接内部地址的所需信息。

STUN是一个客户机-服务器协议。一个VoIP电话或软件包可能会包括一个STUN客户端。这个客户端会向STUN服务器发送请求,之后,服务器就会向STUN客户端报告NAT路由器的公网IP地址以及NAT为允许传入流量传回内网而开 通的端口。

以上的响应同时还使得STUN客户端能够确定正在使用的NAT类型——因为不同的NAT类型处理传入的UDP分组的方式是不同的。四种主要类型中有三种是可以使用的:完全圆锥型NAT、受限圆锥型NAT和端口受限圆锥型NAT——但大型公司网络中经常采用的对称型 NAT(又称为双向NAT)则不能使用。

三、STUN和TURN技术浅析 比较全面的分析

STUN(Simple Traversal of User Datagram Protocol Through Network Address Translators),即简单的用UDP穿透NAT,是个轻量级的协议,是基于UDP的完整的穿透NAT的解决方案。它允许应用程序发现它们与公共互联网之间存在的NAT和防火墙及其他类型。它也可以让应用程序确定NAT分配给它们的公网IP地址和端口号。STUN是一种Client/Server的协议,也是一种Request/Response的协议,默认端口号是3478。

在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转。由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NAT Traversal)。最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议。

NAT对待UDP的实现方式有4种方式、简单可以理解为:

  1. 随便搞,没搞过的也可以搞
  2. 只有搞过的才能搞
  3. 之前带过套的才能搞
  4. 只有搞得爽的才能搞

TURN,首先在RFC5766中定义,英文全称是Traversal Using Relays around NAT:Relay Extensions to Session Traversal Utilities for NAT,即使用中继穿透NAT:STUN的扩展。简单的说,TURN与STURN的共同点都是通过修改应用层中的私网地址达到NAT穿透的效果,异同点是TURN是通过两方通讯的“中间人”方式实现穿透

如果一个主机位于NAT的后面,在某些情况下它不能够与其他主机点对点直接连接。在这些情况下,它需要使用中间网点提供的中继连接服务。TURN协议就是用来允许主机控制中继的操作并且使用中继与对端交换数据。TURN与其他中继控制协议不同的是它能够允许一个客户端使用一个中继地址与多个对端连接。

四、WebRTC protocols

五、SDP 协议分析

SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP协议是也是基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛的应用范围。SDP 不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。

六、试验UDP打洞穿透NAT

比较全面的介绍了。备有例子

七、tun turn ice等穿越NAT方法大部分理论介绍

代码分析

一、WebRtc重要概念

二、WebRtc 之P2C的建立

三、WebRtc语音整体框架

四、webrtc android ios系列教程,五十多节,内容有点多。可以慢慢看

WebRtc学习资料整理相关推荐

  1. WebRTC 学习资料整理一

    官网永远是最重要,但同时也是最容易忽略的学习途径.So you should look official websites firtsly.. 先看一看基础概念的解释 WebRTC 相關縮寫名詞簡介 ...

  2. 信息学竞赛学习资料整理

    信息学竞赛学习资料整理 一.总结 一句话总结:可以在网上获取各种免费视频资源,网上超多,也可以买书,也可以去刷题网站多做题 1.信息学竞赛书籍推荐? 信息学竞赛一本通 算法导论 组合数学 <CC ...

  3. 深度学习资料整理(软件资源)

    近这两年里deep learning技术在图像识别和跟踪等方面有很大的突破,是一大研究热点,里面涉及的数学理论和应用技术很值得深入研究,这系列博客总结了深度学习的博客,原理等资料,供大家学习讨论. 一 ...

  4. three.js学习资料整理

    最近在学three.js,特地整理偶然间碰到的学习资料分享给大家,国内除了大公司,专门学习three.js的太少了,普通的业务前端学它并不会增大面试成功率,又经常加班,react vue新特性,原理都 ...

  5. Go语言学习资料整理

    整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南-A Tour of Go Go语言圣经(中文版) Effective Go中文版 Go Web编程 build-web- ...

  6. 人工智能、机器学习、深度学习从入门到进阶学习资料整理

    最近整理了下在这里分享给大家,欢迎大家点赞收藏. 学习社区 神力AI(MANA):国内最大的AI代码平台. Learn AI:一个AI学习交流中心. AI研习社:一个专注于AI开发者和学术青年求知求职 ...

  7. mysql学习资料整理(不断更新)

    因为某些原因现在才开始学习mysql,把一些学习资料以作整理,方便大家学习之用(只针对和我一样的初学者,呵呵) 说明:所有资料都来自网络,如有侵权,请联系,速度删除. 1:Mysql5.1中文参考手册 ...

  8. (汇总篇)语义SLAM相关开源方案| 全球优秀作者与实验室 | SLAM学习资料整理

    目录 1 开源方案 1.1 Geometric SLAM (26项) 1. PTAM 2. S-PTAM(双目 PTAM) 3. MonoSLAM 4. ORB-SLAM2 5. DSO 6. LDS ...

  9. 人工智能、机器学习、深度学习学习资料整理(开发必备)

    最近整理了下AI方面的学习资料,包含了学习社区.入门教程.汲取学习.深度学习.自然语言处理.计算机视觉.数据分析.面试和书籍等方面的知识.在这里分享给大家,欢迎大家点赞收藏. 学习社区 神力AI(MA ...

最新文章

  1. apache_tomcat整合应用
  2. jsp 连接mysql空指针_java jdbc与mysql为什么连接不上并且抛出空指针异常?
  3. 物生政可以报计算机专业吗,新高考物生政组合好吗?高考物生政可以报什么专业?...
  4. 通过福禄克测试仪进行数据中心机房各个区域的测试或认证
  5. php vprintf,vprintf - [ C语言中文开发手册 ] - 在线原生手册 - php中文网
  6. php年月转换为年月日,php 将秒数转换为年、月、日、小时等时间格式
  7. html 页面元素id不唯一,规定html元素的唯一的id属性
  8. python识别发票二维码_python如何实现二维码的生成和识别
  9. 鸿蒙历程和路标图,华为鸿蒙OS:为生态而生,亦为生态所累
  10. linux 安装启动ssh服务
  11. CLR探索系列:托管PE/COFF文件格式侧窥
  12. 锁失效_分布式锁的解决方案(二)
  13. 论坛apache伪静态_修正PostViews插件加入CDN静态缓存后计数不正常问题
  14. 《Thinking in UML》学习1——参与者与用例
  15. java 100以内的偶数的和_java 2.3 循环语句计算100以内的偶数和(五种方法)
  16. python浏览器复制粘贴到word里(带格式的)
  17. dev-c++为什么使用调试时提示[error]ld returned 1 exit status?
  18. [4G5G基础学习]:L3 RRC层概述与总体架构、ASN.1消息、无线承载SRB, DRB、终端三种状态、MIB, SIB,NAS消息类型
  19. 机电团队怎么使用软件系统快速实施 部署
  20. 图像处理/计算机视觉/python环境下如何用滤波器、算法恢复图片,对图片去污【附代码】

热门文章

  1. Jmeter最新安装配置
  2. ubb html编辑器,UBB 编辑器和 HTML 可视化编辑器的利弊
  3. 数据安全治理白皮书4.0(附下载link)
  4. CSS媒体查询@media (prefers-color-scheme:dark)判断系统白天黑夜模式
  5. Python数据分析——Pandas基础:dt.datetime与pivot_table()数据透视表
  6. jQuery 接管iframe内a 标签请求
  7. minist手写识别 cifar图片
  8. 浅谈NIO和Epoll实现原理
  9. eval python定义变量,表达式与语句 局部变量与全局变量 exec与eval
  10. 从前慢-谷粒商城篇章2