WebRTCPeerConnection¶
继承: RefCounted < Object
派生: WebRTCPeerConnectionExtension
与 WebRTC 对等体连接的接口。
描述¶
本地计算机和远程对等方之间的WEBRTC连接。 提供一个接口来连接,维护和监视连接。
在两个对等方之间建立WEBRTC连接似乎并不是一项琐碎的任务,但可以将其分为3个主要步骤:
想要启动连接的同伴(从现在开始````````'''会创建一个报价,并将其发送给其他同行(从现在开始`````````'''。
B'收到要约,生成和回答,并将其发送给A')。
A'和B'然后彼此生成并交换候选人。
在这些步骤之后,连接应建立联系。 继续阅读或查看教程以获取更多信息。
方法¶
add_ice_candidate(media: String, index: int, name: String) |
|
void |
close() |
create_data_channel(label: String, options: Dictionary = {}) |
|
get_connection_state() const |
|
get_gathering_state() const |
|
get_signaling_state() const |
|
initialize(configuration: Dictionary = {}) |
|
poll() |
|
void |
set_default_extension(extension_class: StringName) static |
set_local_description(type: String, sdp: String) |
|
set_remote_description(type: String, sdp: String) |
信号¶
data_channel_received(channel: WebRTCDataChannel) 🔗
当收到新的带内频道时,即创建频道时发出 negotiated: false (默认).
该对象将是 WebRTCDataChannel。 您必须保留其参考,否则它将自动关闭。 看 create_data_channel().
ice_candidate_created(media: String, index: int, name: String) 🔗
当新的 ICE 候选者被创建时触发。这三个参数是为了通过信号服务器传递给远程对等体。
session_description_created(type: String, sdp: String) 🔗
在成功调用 create_offer() 或 set_remote_description() 后触发,当它产生一个应答时。这些参数是为了传递给这个对象上的 set_local_description(),并通过信号服务器发送给远程对等体。
枚举¶
enum ConnectionState: 🔗
ConnectionState STATE_NEW = 0
连接是新的,数据通道和提交可以在这种状态下创建。
ConnectionState STATE_CONNECTING = 1
对等体正在连接,ICE 正在进行中,没有任何传输失败。
ConnectionState STATE_CONNECTED = 2
对等体已连接,所有的 ICE 传输都已连接。
ConnectionState STATE_DISCONNECTED = 3
至少有一个 ICE 传输被断开连接。
ConnectionState STATE_FAILED = 4
一个或更多的 ICE 传输失败。
ConnectionState STATE_CLOSED = 5
对等连接已关闭,例如在调用 close() 后。
enum GatheringState: 🔗
GatheringState GATHERING_STATE_NEW = 0
对等体连接刚刚建立,还没有做任何联网工作。
GatheringState GATHERING_STATE_GATHERING = 1
ICE 代理正在收集候选连接。
GatheringState GATHERING_STATE_COMPLETE = 2
ICE 代理已完成候选连接的收集。如果发生了需要收集新候选的情况,例如新添加了接口、新添加了 ICE 服务器,则会返回收集状态,进行候选项的收集。
enum SignalingState: 🔗
SignalingState SIGNALING_STATE_STABLE = 0
没有正在进行的要约和答复的交换。这可能意味着 WebRTCPeerConnection 是新的(STATE_NEW),或者协商已完成并且连接已经建立(STATE_CONNECTED)。
SignalingState SIGNALING_STATE_HAVE_LOCAL_OFFER = 1
本地对等体已调用 set_local_description(),正在传入代表邀约的 SDP(通常由调用 create_offer() 创建),邀约已成功应用。
SignalingState SIGNALING_STATE_HAVE_REMOTE_OFFER = 2
远程对等体已创建邀约,并将其使用信号服务器传递给了本地对等体,本地对等体已调用 set_remote_description() 将邀约设置为远程描述。
SignalingState SIGNALING_STATE_HAVE_LOCAL_PRANSWER = 3
已应用远程对等体发送的邀约,已创建恢复并调用了 set_local_description() 进行应用。这个临时应答描述了支持的媒体格式等信息,但可能不包含完整的 ICE 候选项。后续会单独发送更多候选项。
SignalingState SIGNALING_STATE_HAVE_REMOTE_PRANSWER = 4
已经接收到初步回应,并已成功地应用到之前通过调用 set_local_description() 发送并建立的邀请中。
SignalingState SIGNALING_STATE_CLOSED = 5
该 WebRTCPeerConnection 已关闭连接。
方法说明¶
Error add_ice_candidate(media: String, index: int, name: String) 🔗
添加一个由远程对等体产生的冻结候选,并通过信令服务器接收。请参阅ice_candidate_created。
void close() 🔗
关闭对等连接以及与之关联的所有数据通道。
注意: 除非您致电,否则您不能将此对象重复使用新连接 initialize().
WebRTCDataChannel create_data_channel(label: String, options: Dictionary = {}) 🔗
返回新的 WebRTCDataChannel (或者 null 失败) 给定 label 并可选地通过 options 字典。 仅当连接处于状态时才能调用此方法 STATE_NEW.
创建工作数据频道有两种方法:要么调用 create_data_channel() 在一个同伴中,听 data_channel_received 另一方面,或致电 create_data_channel() 在两个同行,具有相同的值, "negotiated" 选项设置为 true.
有效的 options 是:
{
"negotiated": true, # 设置为true(默认关闭)时,意味着该频道是从频段中进行协商的。 也必须设置“ ID”。 不会调用“ data_channel_received”。
"id": 1, #当“协商”为真时,此值也必须在两个对等方面设置为相同的值。
# 只能指定MaxRansmits和MaxPacketLifetime中的一个,而不是两者都可以指定。 它们使频道不可靠(但实时也更好)。
"maxRetransmits": 1, # 如果未确认,则指定对等方将进行重新启动数据包的最大尝试。
"maxPacketLifeTime": 100, # 在放弃未经确认的数据包(以毫秒为单位)之前,请指定最长的时间。
"ordered": true, # 在不可靠的模式下(即设置“ maxretransmits”或“ maxpacketlifetime”)时,“订购”(默认情况下为true)指定是否要执行数据包订购。
"protocol": "my-custom-protocol", # 此通道的自定义子协议字符串。
}
注意: 您必须对创建的渠道进行引用,否则将关闭。 .. rst-class:: classref-item-separator
创建一个新的SDP优惠,以使用远程对等方启动WEBRTC连接。 至少一个:ref:WebRTCDataChannel<class_WebRTCDataChannel> 必须在调用此方法之前创建。
如果此功能返回 @GlobalScope.OK, session_description_created will be called when the session is ready to be sent.
ConnectionState get_connection_state() const 🔗
返回连接状态。见 ConnectionState。
GatheringState get_gathering_state() const 🔗
返回连接的 ICE GatheringState。你可以据此来检测,例如,ICE 候选项的收集是否完成。
SignalingState get_signaling_state() const 🔗
连接或重新连接到另一个对等体时,返回连接本地端的信令状态。
Error initialize(configuration: Dictionary = {}) 🔗
重新定位此同行连接,关闭任何以前活动的连接,然后返回状态 STATE_NEW。 词典 configuration 可以传递选项以配置对等连接。
Valid configuration options are:
{
"iceServers": [
{
"urls": [ "stun:stun.example.com:3478" ], # 一个或多个眩晕服务器。
},
{
"urls": [ "turn:turn.example.com:3478" ], # 一个或多个转动服务器。
"username": "a_username", # 转向服务器的可选用户名。
"credential": "a_password", # 转向服务器的可选密码。
}
]
}
经常调用这个方法以正确接收信号,例如在 Item.Update() 或 Item.FixedUpdate() 中。
void set_default_extension(extension_class: StringName) static 🔗
将 extension_class 设置为创建新 WebRTCPeerConnection 时返回的默认 WebRTCPeerConnectionExtension。
Error set_local_description(type: String, sdp: String) 🔗
设置本地对等的SDP描述。 这应该是为了回应 session_description_created.
调用此功能后,同伴将开始发射 ice_candidate_created (除非 Error 不同于 @GlobalScope.OK 退回).
Error set_remote_description(type: String, sdp: String) 🔗
设置远程对等的SDP描述。 这应该与远程对等相生成的值并在信号服务器上接收到的值。
如果``type`` 是``"offer"`` 对等方将发出 session_description_created 带有适当的答案。
如果 type 是 "answer" 对等节点将开始发送数据。 ice_candidate_created.