WebRTC 的核心RTCPeerConnection 接口

WebRTC 的核心是 RTCPeerConnection 接口,该接口封装了所有建立 P2P 连接的细节和基本操作。 在创建 RTCPeerConnection 实例时,我们可以传递一个配置项对象,它包含以下可选属性:
• iceServers: WebRTC 中 ICE (Interactive Connectivity Establishment) 协议用于在两个端点之间建立网络连接。这个属性可以用来指定 STUN 或 TURN 服务器的 URL 以进行 NAT 穿透和中继等操作。如果不指定 ICE 服务器将会使用默认的 Google 服务器,但建议在生产环境中使用自己的服务器。
• iceTransportPolicy: 指定 RTCIceTransport (ICE 值传输协议)选项来控制使用哪种类型的 ICE 值传输或连接。可选值为 “all”, “relay”, “none”。默认为 “all”。
• bundlePolicy: 指定哪些媒体通道应该捆绑(组合)在一起。可选值为 “balanced”, “max-compat”, “max-bundle”。默认为 “balanced”。
• rtcpMuxPolicy: 指定使用哪种 RTCP 复用政策。可选值为 “negotiate” , “require” 或 “disable”。默认为 “require”。
• peerIdentity: 信任的对等身份,用于确保 SSL/TLS 证书的合法性。如果不指定将使用默认的 SSL/TLS 证书。
• sdpSemantics: 规范输入和输出 SDP (会话描述协议)的方法。可选值为 “plan-b” 或 “unified-plan”。默认为 “plan-b”。“unified-plan” 会使得更多媒体数据捆绑在一个 SDP 中,仅用于 Chrome 和 Firefox。“plan-b” 则兼容之前的浏览器。
• iceCandidatePoolSize: 指定 ICE candidates 的数量。默认为 0,表示自动设置数量。
• certificates: 指定用于 WebRTC 安全传输的 SSL/TLS 证书。如果不指定一个或多个证书,WebRTC 将生成自己的证书。
这些选项可以根据实际需求进行配置。

iceservers

在WebRTC中,ICE(Interactive Connectivity Establishment)协议是用于在通信的两个设备之间建立网络连接的协议。它可以识别和使用网络上可用的所有传输方式,例如UDP、TCP、TLS和TURN,以确保它可以在所有可能的情况下建立连接。
在WebRTC中,可以通过为RTCPeerConnection配置项对象中的iceServers属性指定ICE服务器列表来启用ICE。iceservers可以包含一个或多个STUN和/或TURN服务器,如下所示:

const peerConnection = new RTCPeerConnection({
  iceServers: [
    {
      urls: "stun:stun.l.google.com:19302",
    },
    {
      urls: "turn:my-turn-server.com",
      username: "my-username",
      credential: "my-password",
    },
  ],
});

上述示例中,iceservers数组包含两个对象,一个是Google提供的STUN服务器,另一个是自定义的TURN服务器。urls属性是表示服务器地址和协议的字符串,username和credential用于提供TURN服务器的身份验证信息。
需要注意的是,使用TURN服务器会产生额外的开销和延迟,因此应当根据实际需求权衡使用STUN服务器还是TURN服务器。另外,可以使用多个STUN服务器,但通常只需要使用一个TURN服务器。

RTCPeerConnection

RTCPeerConnection是WebRTC API中的一个对象,它提供了两个浏览器之间的实时通信。它使用音频、视频和数据流来进行点对点通讯,没有中介服务器的参与。这是一个极其有用的特性,使得实时通信变得更加高效和私密。
RTCPeerConnection的作用是在两个浏览器之间建立WebRTC通信通道。它使用ICE(Interactive Connectivity Establishment)协议决定浏览器之间的最佳路径来传输音频、视频和数据流。它让浏览器之间的网络连接变得简单、快捷和高效。
RTCPeerConnection API可以用于:
• 视频会议
• 实时游戏
• 文件共享
• 流媒体
• 实时语音聊天
RTCPeerConnection在浏览器中工作的过程是:
1 使用Navigator.getUserMedia API捕捉本地音频/视频数据流。
2 将捕捉的本地流发送到所要连接的远程浏览器。
3 通过信令服务器来交换网络连接信息,以帮助双方建立连接。
4 建立连接后,浏览器之间可以通过DataChannel传输文本或任何二进制数据。
RTCPeerConnection API的主要功能包括:
• 提供网络流媒体协议(SRTP)保证音频和视频传输的安全性。
• 压缩音频和视频流的数据,以便在低带宽环境中使用。
• 对网络连接进行优化,提供最佳连接通道的选择。
• 支持候选地址处理,以在不同的网络环境中建立连接。
• 协商用于建立连接的协议的参数。
总的来说,RTCPeerConnection API是一种用于在浏览器之间建立点对点实时通信的强大工具。它让浏览器之间的互动变得更加简单、方便和安全。

RTCpeerconnection 建立连接

RTCPeerConnection建立连接的过程主要分为以下几个步骤:
1 获取本地多媒体流:使用navigator.getUserMedia()方法获取用户的本地媒体流,比如音频和视频流。或者如果你想要发送自己的屏幕,你可以使用navigator.mediaDevices.getDisplayMedia()方法获取屏幕流。
2 创建RTCPeerConnection对象:使用new RTCPeerConnection()方法创建一个RTCPeerConnection对象,这个对象是用来创建点对点连接,同时需要传入一些可选的configuration options参数。
3 添加本地流到RTCPeerConnection:调用RTCPeerConnection的addStream()方法将本地的媒体流添加到连接中。
4 创建Offer:使用RTCPeerConnection的createOffer()方法创建一个offer,它包含本地连接的描述信息。
5 设置本地描述信息:通过调用setLocalDescription()方法把本地的offer设置为本地连接配置。
6 发送offer:将本地连接描述信息通过Websocket或XHR等方式发送给对方。
7 接收offer:对方接收到offer后,需要像发送offer的方式一样,通过setRemoteDescription()方法来设置远程的connection配置。
8 创建Answer:然后,接收者需要调用createAnswer()方法来创建响应的answer,并通过setLocalDescription()方法来设置本地的connection配置。
9 发送Answer:发送响应的answer到本地,同样也是通过Websocket或XHR等方式发送到对方。
10 接收Answer:对方接收到answer后,通过setRemoteDescription()方法设置本地对于远程connection的描述。
11 媒体流通信:如果连接建立成功,你就可以通过RTCPeerConnection对象提供的onaddstream或ontrack事件来监听媒体流通信状态,同时可以通过createDataChannel()方法来创建一个数据通道实现文本或数据传输。
以上是RTCPeerConnection建立连接的基本流程,具体实现方式还需要根据实际应用场景进行调整。

setlocaldescription

在RTCPeerConnection建立连接的过程中,setLocalDescription是一个非常重要的方法。它被用于设置本地连接的描述信息,包括连接的类型(offer或answer)、媒体协商参数等。
在WebRTC中,SIP和SDP协议用于描述每一个媒体会话(媒体数据或控制命令)。SDP(Session Description Protocol)是一种文本协议,它用于描述会话参数。当一个RTCPeerConnection对象被创建时,它的本地SDP描述信息为空(即空字符串)。当本地描述信息被设置后,它会被填充上本地的SDP描述信息,包括参与媒体会话的流的相关配置信息。
setLocalDescription方法用于修改RTCPeerConnection对象的本地SDP描述信息,它接受一个RTCSessionDescriptionInit对象作为参数,这个对象包含了要设置的本地SDP描述信息。
这个RTCSessionDescriptionInit对象包含了以下两个字段:
• sdp(Session Description Protocol):表示SDP描述信息。
• type:表示SDP的类型,是"offer"还是"answer"。
调用setLocalDescription()方法后,本地SDP描述信息将被设置为RTCSessionDescriptionInit对象中的值。
例如,以下代码片段演示了如何通过setLocalDescription()方法将本地的offer SDP描述信息设置到RTCPeerConnection中:
javascript
复制代码
let offer = await peerConnection.createOffer();
await peerConnection.setLocalDescription(offer);
在上面的代码中,createOffer()方法用于创建一个offer SDP描述信息。setLocalDescription()方法将这个offer SDP描述信息设置到本地RTCPeerConnection对象中。现在本地RTCPeerConnection对象的本地SDP描述信息就包含了一个offer。同时,将offer发送给远端RTCPeerConnection对象,这样它就可以通过setRemoteDescription()方法设置远端SDP描述信息,从而完成连接建立的第二步。

详细说说sip协议

SIP(Session Initiation Protocol)是一种基于文本的协议,主要用于建立、修改和终止会话。它被广泛应用于VoIP(Voice over IP)和视频会议等应用领域中。
SIP协议的设计思想是将信令交换和媒体传输分离开来,这样就可以提供更灵活和可扩展的通信服务。SIP通信是基于请求-响应模式的,通过建立SIP会话,可以实现媒体流的传输、协商、修改和终止等操作。
SIP协议定义了一些重要的元素,如:用户代理(User Agent)、SIP代理(SIP Proxy)、SIP注册器(SIP Registrar)和SIP重定向服务器(SIP Redirect Server)等。这些元素在建立、修改和终止会话时都起到了重要的作用。
SIP协议的消息格式包括两部分:请求消息和响应消息。请求消息从客户端发送到服务器端,而响应消息则是服务器端对请求消息的响应。SIP协议支持多种请求类型,如:INVITE、ACK、BYE、CANCEL、OPTIONS和REGISTER等。
在SIP协议中,呼叫控制和媒体流控制密切相关,通过交换SIP信令和SDP(Session Description Protocol)描述信息,可以实现媒体流的传输和协商,从而提供高质量、高效率的通信服务。
总之,SIP协议是现代通信系统中最重要的协议之一,它提供了灵活、可靠、高效的通信服务,广泛应用于各种领域,如:VoIP、视频会议、实时消息等。

你可能感兴趣的:(webrtc,webrtc,服务器,网络)