📅  最后修改于: 2023-12-03 15:35:40.792000             🧑  作者: Mango
WebRTC (Web Real-Time Communication) 是一种基于Web的实时通信技术,可以实现浏览器之间的点对点音频、视频通话以及数据共享。它包括了音频、视频、数据在内的多媒体实时通信方式,可以帮助开发者快速构建面向浏览器的实时通信应用。
WebRTC 由三个主要组成部分组成:
SDP是WebRTC中通信的基础协议,负责在参与通信的设备之间传输信息,如媒体数据类型、网络地址等。
ICE是WebRTC中进行NAT(Network Address Translation,网络地址转换)遍历,寻找有效通道来建立点对点连接的流程。ICE在建立点对点连接时,首先进行协商,接下来在远端设备上尝试直接连接,如果直接连接不成功那么ICE会在通过P2P服务器进行,然后在本地设备上进行尝试连接,最后如果连接成功,那么就建立了一个点对点的连接。
STUN是ICE部分的一个协议。STUN服务器负责返回远端设备的公网地址和端口,供本地设备使用。如UDP协议下,就不能使用自己的私有IP和局域网地址和端口号,STUN协议提供了一种方法来获得映射到互联网公网上的公网地址和端口号。
TURN是ICE部分的另一个协议。TURN可以代理所有数据流,就是说所有数据流都经过中央服务器来完成。TURN主要用于特殊网络环境下使用,比如双方设备在相同的内网,TURN 可以通过虚拟IP地址解决 NAT 遍历问题。
// 创建本地流
navigator.mediaDevices.getUserMedia({video: true, audio: false})
.then(function(stream) {
// 将摄像头连接到video标签中
video.srcObject = stream;
})
.catch(function(err) {
console.log("视频出错,错误信息:" + err);
});
// 创建连接对象
var peerConnection = new RTCPeerConnection();
// 添加候选者
peerConnection.addIceCandidate(candidate)
// 建立连接
peerConnection.createOffer(function(offer) {
peerConnection.setLocalDescription(new RTCSessionDescription(offer));
socket.send(JSON.stringify({type: "offer", offer: offer}));
}, function(error) {
console.log("Error creating offer:", error);
});
总之,WebRTC具有很高的实时性和交互性,非常适合需要实时通信的场景,尤其是在线教育、远程医疗等需要远程实时互动的场景,未来的应用前景非常可观。