本来第一站是要查资料先了解下知识点的。但是王老师直接就给了我iOS的源码,这样又了Demo对着,了解更好了。不多说了。最近的任务就是多看WebRTC的相关文章。把该知道的多学一点。
服务器
Room Server
房间服务器。创建、管理通话状态。
是双方还是多方通话。加入离开房间等等。
Signaling Server
信令服务器。
管理和协助终端建立p2p通话。
任务
- 控制通信[发起/结束]的连接控制消息。
- 发生错误时,相互通告
- 媒体流 元数据【解码器、带宽、媒体类型等等】
- 两两之间建立安全连接的关键数据
- 外界能看到的网络上的数据【ip、端口等】
STUN/ TURN/ ICE Server
参考阅读:
《P2P技术详解(一):NAT详解——详细原理、P2P简介》
《P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解》
《P2P技术详解(三):P2P技术之STUN、TURN、ICE详解》
防火墙打洞服务器
如图所示,由于有网络防火墙或配置NAT的路由器。导致我们的计算机ip地址不是广域网的ip地址。因此需要打洞~
- STUN (Simple Traversal of UDP over NATs)
NAT的UDP简单穿越
确定内网终端暴漏在广域网 的ip、端口、NAT信息。
协助不同内网之间的计算机建立p2p的UDP通讯
解决了家用路由环境的打洞问题。但是对于大部分企业的网络环境就不是很好了
为什么呢?企业的网络环境有什么不一样?
这是就需要TURN协议了。
- TURN(Traversal Using Relay NAT)
允许在TCP或UDP的连线上跨越 NAT 或防火墙.Relay–中继动作
Client-Server协议。
【[客户]】在通讯前先与服务器交互,要求服务器产生[relay port]接口,这就是中继跨越新地址。这时服务器会建立**[peer],即remote endpoints远方终端,开始relay中继动作。【[客户端]】利用接口将资料传送至[peer],再由[peer]传给另一个【[终端]】。通过服务器产生新的[peer]**来进行数据的中转。
- ICE协议
综合前两种的方案。
通过offer/answer模型建立基于UDP的通讯。 ICE是offer/answer模型的扩展,通过在offer和answer的SDP(Session Description Protocol)里面包含多种IP地址和端口,然后对本地SDP和远程SDP里面的IP地址进行配对,然后通过P2P连通性检查进行连通性测试工作,如果测试通过即表明该传输地址对可以建立连接。其中IP地址和端口(也就是地址)有以下几种:本机地址、通过 STUN服务器反射后获取的server-reflexive地址(内网地址被NAT映射后的地址)、relayed地址(和 TURN转发服务器相对应的地址)及Peer reflexive地址等。
- 概览
特性 | STUN | TURN | ICE |
---|---|---|---|
实现复杂度 | 实现简单 | 难于实现。TURN的安全性设计增加终端设置的复杂度 | 一般 |
TCP穿透支持 | 不支持 | 支持 | 支持 |
对现有设备的要求 | 要求客户端支持,对现有NAT设备无改动要求,需增加STUN服务器 | 对现有NAT设备无要求,要求客户端支持,需增加TURN服务器 | 对NAT设备无要求,支持所有类型的NAT设备。客户端必须支持,网路结构中需增加STUN/TURN服务器 |
可扩展性 | 可扩展性好,与具体协议无关 | 可扩展性好,与具体协议无关 | 可扩展性好,与具体协议无关 |
安全性 | 一般 | 一般 | 较好 |
健壮性 | 差,不支持symmentric型NAT | 好,支持所有类型的NAT | 好,适用与所有NAT及NAT拓扑类型,且由于存在中继服务器,NAT 穿透一般总是能成功 |
穿透一般总是能成功其他 | 支持自动检测NAT类型,使用户即使在使用STUN协议无法实现NAT穿透时还可以根据NAT类型自主选择其他可使用的NAT穿透方案 | 与P2P穿透方式相比,性能是relay穿透方式的弱点。另外TURN无法实现负载分担,解决的方式是把media relay服务器的分配工作放在 SIP proxy完成 |
小知识点
GAE
Google App Engine
谷歌的Web应用开发、托管平台。支持Python、Java和Php。
HLS(HTTP Live Streaming)
https://en.wikipedia.org/wiki/HTTP_Live_Streaming
https://baike.baidu.com/item/HLS/8328931
H.264
国际上制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。而H.264则是由两个组织联合组建的联合视频组(JVT)共同制定的新数字视频编码标准,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高级视频编码(Advanced Video Coding,AVC)的第10 部分。因此,不论是MPEG-4 AVC、MPEG-4 Part 10,还是ISO/IEC 14496-10,都是指H.264。
Scaledrone
Scaledrone is a realtime messaging service and platform. Send live updates, create chatrooms and collaborative tools.
一个平台。
这是这个平台的Demo
https://scaledrone.github.io/webrtc/index.html#12345房间号 貌似不太行啊。
https://www.scaledrone.com/blog/webrtc-tutorial-simple-video-chat/
基础教学
总结
了解了打洞的定义。路还很长啊。