Class WebRtcPeerConnection
- Namespace
- Godot
- Assembly
- GodotSharp.dll
A WebRTC connection between the local computer and a remote peer. Provides an interface to connect, maintain and monitor the connection.
Setting up a WebRTC connection between two peers may not seem a trivial task, but it can be broken down into 3 main steps:
- The peer that wants to initiate the connection (A
from now on) creates an offer and send it to the other peer (B
from now on).
- B
receives the offer, generate and answer, and sends it to A
).
- A
and B
then generates and exchange ICE candidates with each other.
After these steps, the connection should become connected. Keep on reading or look into the tutorial for more information.
[GodotClassName("WebRTCPeerConnection")]
public class WebRtcPeerConnection : RefCounted, IDisposable
- Inheritance
-
WebRtcPeerConnection
- Implements
- Derived
- Inherited Members
Constructors
WebRtcPeerConnection()
public WebRtcPeerConnection()
Methods
AddIceCandidate(string, int, string)
Add an ice candidate generated by a remote peer (and received over the signaling server). See IceCandidateCreated.
public Error AddIceCandidate(string media, int index, string name)
Parameters
Returns
Close()
Close the peer connection and all data channels associated with it.
Note: You cannot reuse this object for a new connection unless you call Initialize(Dictionary).
public void Close()
CreateDataChannel(string, Dictionary)
Returns a new WebRtcDataChannel (or null
on failure) with given label
and optionally configured via the options
dictionary. This method can only be called when the connection is in state New.
There are two ways to create a working data channel: either call CreateDataChannel(string, Dictionary) on only one of the peer and listen to DataChannelReceived on the other, or call CreateDataChannel(string, Dictionary) on both peers, with the same values, and the "negotiated"
option set to true
.
Valid options
are:
{
"negotiated": true, # When set to true (default off), means the channel is negotiated out of band. "id" must be set too. "data_channel_received" will not be called.
"id": 1, # When "negotiated" is true this value must also be set to the same value on both peer.
# Only one of maxRetransmits and maxPacketLifeTime can be specified, not both. They make the channel unreliable (but also better at real time).
"maxRetransmits": 1, # Specify the maximum number of attempt the peer will make to retransmits packets if they are not acknowledged.
"maxPacketLifeTime": 100, # Specify the maximum amount of time before giving up retransmitions of unacknowledged packets (in milliseconds).
"ordered": true, # When in unreliable mode (i.e. either "maxRetransmits" or "maxPacketLifetime" is set), "ordered" (true by default) specify if packet ordering is to be enforced.
"protocol": "my-custom-protocol", # A custom sub-protocol string for this channel.
}
Note: You must keep a reference to channels created this way, or it will be closed.
public WebRtcDataChannel CreateDataChannel(string label, Dictionary options = null)
Parameters
label
stringoptions
Dictionary
Returns
CreateOffer()
Creates a new SDP offer to start a WebRTC connection with a remote peer. At least one WebRtcDataChannel must have been created before calling this method.
If this functions returns Ok, SessionDescriptionCreated will be called when the session is ready to be sent.
public Error CreateOffer()
Returns
GetConnectionState()
Returns the connection state. See WebRtcPeerConnection.ConnectionState.
public WebRtcPeerConnection.ConnectionState GetConnectionState()
Returns
GetGatheringState()
Returns the ICE WebRtcPeerConnection.GatheringState of the connection. This lets you detect, for example, when collection of ICE candidates has finished.
public WebRtcPeerConnection.GatheringState GetGatheringState()
Returns
GetSignalingState()
Returns the WebRtcPeerConnection.SignalingState on the local end of the connection while connecting or reconnecting to another peer.
public WebRtcPeerConnection.SignalingState GetSignalingState()
Returns
HasGodotClassMethod(in godot_string_name)
Check if the type contains a method with the given name. This method is used by Godot to check if a method exists before invoking it. Do not call or override this method.
protected override bool HasGodotClassMethod(in godot_string_name method)
Parameters
method
godot_string_nameName of the method to check for.
Returns
HasGodotClassSignal(in godot_string_name)
Check if the type contains a signal with the given name. This method is used by Godot to check if a signal exists before raising it. Do not call or override this method.
protected override bool HasGodotClassSignal(in godot_string_name signal)
Parameters
signal
godot_string_nameName of the signal to check for.
Returns
Initialize(Dictionary)
Re-initialize this peer connection, closing any previously active connection, and going back to state New. A dictionary of configuration
options can be passed to configure the peer connection.
Valid configuration
options are:
{
"iceServers": [
{
"urls": [ "stun:stun.example.com:3478" ], # One or more STUN servers.
},
{
"urls": [ "turn:turn.example.com:3478" ], # One or more TURN servers.
"username": "a_username", # Optional username for the TURN server.
"credential": "a_password", # Optional password for the TURN server.
}
]
}
public Error Initialize(Dictionary configuration = null)
Parameters
configuration
Dictionary
Returns
InvokeGodotClassMethod(in godot_string_name, NativeVariantPtrArgs, out godot_variant)
Invokes the method with the given name, using the given arguments. This method is used by Godot to invoke methods from the engine side. Do not call or override this method.
protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret)
Parameters
method
godot_string_nameName of the method to invoke.
args
NativeVariantPtrArgsArguments to use with the invoked method.
ret
godot_variantValue returned by the invoked method.
Returns
Poll()
Call this method frequently (e.g. in _Process(double) or _PhysicsProcess(double)) to properly receive signals.
public Error Poll()
Returns
SetDefaultExtension(StringName)
Sets the extensionClass
as the default WebRtcPeerConnectionExtension returned when creating a new WebRtcPeerConnection.
public static void SetDefaultExtension(StringName extensionClass)
Parameters
extensionClass
StringName
SetLocalDescription(string, string)
Sets the SDP description of the local peer. This should be called in response to SessionDescriptionCreated.
After calling this function the peer will start emitting IceCandidateCreated (unless an Error different from Ok is returned).
public Error SetLocalDescription(string type, string sdp)
Parameters
Returns
SetRemoteDescription(string, string)
Sets the SDP description of the remote peer. This should be called with the values generated by a remote peer and received over the signaling server.
If type
is "offer"
the peer will emit SessionDescriptionCreated with the appropriate answer.
If type
is "answer"
the peer will start emitting IceCandidateCreated.
public Error SetRemoteDescription(string type, string sdp)
Parameters
Returns
Events
DataChannelReceived
Emitted when a new in-band channel is received, i.e. when the channel was created with negotiated: false
(default).
The object will be an instance of WebRtcDataChannel. You must keep a reference of it or it will be closed automatically. See CreateDataChannel(string, Dictionary).
public event WebRtcPeerConnection.DataChannelReceivedEventHandler DataChannelReceived
Event Type
IceCandidateCreated
Emitted when a new ICE candidate has been created. The three parameters are meant to be passed to the remote peer over the signaling server.
public event WebRtcPeerConnection.IceCandidateCreatedEventHandler IceCandidateCreated
Event Type
SessionDescriptionCreated
Emitted after a successful call to CreateOffer() or SetRemoteDescription(string, string) (when it generates an answer). The parameters are meant to be passed to SetLocalDescription(string, string) on this object, and sent to the remote peer over the signaling server.
public event WebRtcPeerConnection.SessionDescriptionCreatedEventHandler SessionDescriptionCreated