基于Flutter的WebRTC学习
基于Flutter的WebRTC学习
学习WebRTC之前,先需要了解几个名词:
信令服务器:
是用来交换数据的,例如交换SDP
等。
信令服务器的协议由多种方式,最常用的是XHR
和WebSocket
进行数据交换
SDP:
Session Discription Protocol(会话描述协议)
双方进行媒体协商(也就是交换SDP)的时候使用(例如:双方使用的音视频编码格式等等)
通过信令服务器进行传输
Candidate:
网络信息,通过信令服务器进行交换
ICE:
是一种框架,使各种NAT穿透技术可以实现统一,该技术可以让客户端成功地穿透远程用户与网络之间可能存在的各类防火墙。
Stun服务器:
STUN服务器能够知道Peer-A以及Peer-B的公网IP地址及端口
WebRTC主要流程分为三个部分:
- 媒体协商
Peer-A和PeerB通过信令服务器进行媒体协商,双方交换的数据由SDP描述 - 网络协商
Peer-A和PeerB通过Stun服务器获取到各自的网络信息(如:IP,端口等),然后通过信令服务器转发 - 建立连接
如果没有直连,那就通过TURN中转服务器进行转发音视频数据, 最终完成视频通话
WebRTC代码部分的流程
1 |
|
1.获取媒体流
使用 getUserMedia
获取媒体流,返回一个stream
对象,可以用RTCVideoRenderer
来进行渲染。
1 |
|
2.生成pc对象
pc
对象其实就是是RTCPeerConnection
对象,该类是最主要的WebRTC
类,负责建立WebRTC
连接,处理音视频数据流的传输
1 |
|
3. 将stream
添加到peer-A对象
将第1步
获取到的stream
添加到peer-A
对象
1 |
|
4.peer-A创建offer
创建offer
会返回一个RTCSessionDescription
对象,也就是sdp
1 |
|
5.设置本地描述
设置本地描述
调用setLocalDescription
方法后,会触发pc
的iceCandidate
方法
1 |
|
6.将peer-A
的sdp
通过信令服务器发送给peer-B
1 |
|
7.收到远端sdp
根据信令服务器返回的信息,获取远端的sdp
信息
1 |
|
8.设置远端描述
至此,我们实现了交换sdp
信息
1 |
|
9.交换ice地址信息
在第2步
中生成创建pc
后,实现监听onIceCandidate
,第5步
以后会自动调用此方法,获取candidate
信息
1 |
|
基于Flutter的WebRTC学习
http://example.com/2023/10/31/基于Flutter的WebRTC学习/