网络协议
流媒体协议:流媒体协议(Streamimg Protocol)是通过Web传输多媒体的协议
种类:
- 传统的传输协议
- RTMP(Real Time Messaging Protocol)
- RTSP(Real Time Streaming Protocol)
- 基于HTTP的自适应协议
- Apple HLS
- Low-Latency HLS
- MPEG-DASH
- Adboe HDS
- 新技术
- SRT
- WebRTC
RTMP
- 底层协议:TCP
- 应用级视频流协议
- 视频编解码器:H.264
- 音频编解码器:AAC
- 延迟:3 – 30 秒
一般来说视频流是这样工作的:
- 摄像头捕获视频
- 通过编码器将视频流传输到视频平台服务器
- 视频平台处理视频流
- 通过CDN分发到离用户最近的服务器上
- 最后视频流就能成功的到达用户设备
RTMP 最大的缺点是它与 HTML5 播放器不兼容
RTSP
- 底层协议:TCP 和 UDP
- 网络控制协议
- 视频编解码器:H.265
- 音频编解码器:AAC
- 延迟:2 秒
WebRTC
WebRTC为双向的传输:如视频通话、云游戏等
WebRTC API
媒体协商
协商编解码方式(H264、VP8、VP9……)
在WebRTC中,有一个专门的协议SDP(Session Description Protocol)用来描述这些信息。
交换SDP信息的过程就是媒体协商
网络协商
彼此了解对方的网络环境,找到一条相互通讯的链路
- 获取外网IP地址映射
- 通过信令服务器(Signal Server)交换”网络信息“
这里提到了不同局域网无法通信,会用到NAT
STUN
STUN(Session Traversal Utilities for Nat)
P2P网络要求通信双方都能主动发起访问,但是NAT设备的存在,却阻断了这种主动访问,导致P2P应用无法正常运行。STUN是一种解决P2P应用NAT穿越问题的常用技术。它允许网络设备找出通信端点经NAT设备后的IP地址和端口号,并利用这些信息在通信双方之间建立一条可以穿越NAT设备的数据通道,实现P2P通信。
个人通俗理解:一个局域网内,多台设备都是有不同的IPv4地址的(192.168.1.2…)内网的网络地址,会通过网络设备(如家用光猫)通过NAT,转换为外网的IP地址:123.222.111.xxx,也就是说,局域网内的所有设备,都用了一个外网的IPv4地址;
而P2P需要明确知道,要与公网IP下的哪一个设备进行网络通通信,那么STUN就是解决这个问题的网络协议
TURN
TURN(Traversal Using Relays around NAT)
是STUN的拓展,添加了Relay功能,如果终端在NAT之后,;两终端之间无法进行通信,则需要公网的服务器作为中继,对来往的数据进行转发,这个转发的协议就定义为TURN,这个服务器叫做信令服务器(Signal Server)
STUN和TURN可以使用coturn开源项目实现
在WebRTC中用来描述网络信息的属于叫Candidate
信令服务器的功能不只是交换媒体信息sdp和网络信息candidate,也可以进行房间管理
WebRTC APIs
- MediaStream:表示一个媒体数据流(通过getUserMedia接口获取)允许访问输入设备(麦克风、摄像头……)
- RTCPeerConnection:该对象,允许用户在两个浏览器之间建立通讯
npm install nodejs-websocket