Inheritance #

RefCounted

- AESContext
- AStar2D
- AStar3D
- AStarGrid2D
- AudioEffectInstance (1)
- AudioSample
- AudioSamplePlayback
- AudioStreamPlayback (5)
- CameraFeed
- CharFXTransform
- ConfigFile
- Crypto
- DTLSServer
- DirAccess
- ENetConnection
- EditorContextMenuPlugin
- EditorDebuggerPlugin
- EditorDebuggerSession
- EditorExportPlatform (6)
- EditorExportPlugin
- EditorExportPreset
- EditorFeatureProfile
- EditorFileSystemImportFormatSupportQuery
- EditorInspectorPlugin
- EditorResourceConversionPlugin
- EditorResourcePreviewGenerator
- EditorResourceTooltipPlugin
- EditorSceneFormatImporter (4)
- EditorScenePostImport
- EditorScenePostImportPlugin
- EditorScript
- EditorTranslationParserPlugin
- EncodedObjectAsID
- EngineProfiler
- Expression
- FileAccess
- GLTFObjectModelProperty
- HMACContext
- HTTPClient
- HashingContext
- ImageFormatLoader (1)
- JavaClass
- JavaObject
- JavaScriptObject
- KinematicCollision2D
- KinematicCollision3D
- Lightmapper (1)
- MeshConvexDecompositionSettings
- MeshDataTool
- MultiplayerAPI (2)
- Mutex
- NavigationPathQueryParameters2D
- NavigationPathQueryParameters3D
- NavigationPathQueryResult2D
- NavigationPathQueryResult3D
- Node3DGizmo (1)
- OggPacketSequencePlayback
- OpenXRAPIExtension
- PCKPacker
- PackedDataContainerRef
- PacketPeer (8)
- PhysicsPointQueryParameters2D
- PhysicsPointQueryParameters3D
- PhysicsRayQueryParameters2D
- PhysicsRayQueryParameters3D
- PhysicsShapeQueryParameters2D
- PhysicsShapeQueryParameters3D
- PhysicsTestMotionParameters2D
- PhysicsTestMotionParameters3D
- PhysicsTestMotionResult2D
- PhysicsTestMotionResult3D
- RDAttachmentFormat
- RDFramebufferPass
- RDPipelineColorBlendState
- RDPipelineColorBlendStateAttachment
- RDPipelineDepthStencilState
- RDPipelineMultisampleState
- RDPipelineRasterizationState
- RDPipelineSpecializationConstant
- RDSamplerState
- RDShaderSource
- RDTextureFormat
- RDTextureView
- RDUniform
- RDVertexAttribute
- RandomNumberGenerator
- RegEx
- RegExMatch
- RenderSceneBuffers (2)
- RenderSceneBuffersConfiguration
- Resource (103)
- ResourceFormatLoader
- ResourceFormatSaver
- ResourceImporter (16)
- SceneState
- SceneTreeTimer
- Semaphore
- SkinReference
- StreamPeer (5)
- SurfaceTool
- TCPServer
- TLSOptions
- TextLine
- TextParagraph
- TextServer (1)
- Thread
- TranslationDomain
- TriangleMesh
- Tween
- Tweener (5)
- UDPServer
- UPNP
- UPNPDevice
- WeakRef
- WebRTCPeerConnection (1)
- XMLParser
- XRInterface (4)
- XRPose
- XRTracker (2)
- ZIPPacker
- ZIPReader
WebRTCPeerConnection

- WebRTCPeerConnectionExtension

Table of contents

WebRTCPeerConnection #

is_refcounted, is_instantiable, core, not_builtin_classes

Interface to a WebRTC peer connection.

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.

Members #

Methods #

func add_ice_candidate(name: String) -> intError#

Add an ice candidate generated by a remote peer (and received over the signaling server). See ice_candidate_created.

func close() -> void#

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.

func create_data_channel(options: Dictionary = {}) -> WebRTCDataChannel#

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 STATE_NEW.

There are two ways to create a working data channel: either call create_data_channel on only one of the peer and listen to data_channel_received on the other, or call create_data_channel 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.

func create_offer() -> intError#

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, session_description_created will be called when the session is ready to be sent.

const func get_connection_state() -> intWebRTCPeerConnection.ConnectionState#

Returns the connection state. See ConnectionState.

const func get_gathering_state() -> intWebRTCPeerConnection.GatheringState#

Returns the ICE GatheringState of the connection. This lets you detect, for example, when collection of ICE candidates has finished.

const func get_signaling_state() -> intWebRTCPeerConnection.SignalingState#

Returns the signaling state on the local end of the connection while connecting or reconnecting to another peer.

func initialize(configuration: Dictionary = {}) -> intError#

Re-initialize this peer connection, closing any previously active connection, and going back to state 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.
        }
    ]
}

func poll() -> intError#

Call this method frequently (e.g. in Node._process or Node._physics_process) to properly receive signals.

static func set_default_extension(extension_class: StringName) -> void#

Sets the extension_class as the default WebRTCPeerConnectionExtension returned when creating a new WebRTCPeerConnection.

func set_local_description(sdp: String) -> intError#

Sets the SDP description of the local peer. This should be called in response to session_description_created.

After calling this function the peer will start emitting ice_candidate_created (unless an Error different from OK is returned).

func set_remote_description(sdp: String) -> intError#

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 session_description_created with the appropriate answer.

If type is "answer" the peer will start emitting ice_candidate_created.

Annotations #

Constants #

const STATE_NEW = 0 enum ConnectionState#

The connection is new, data channels and an offer can be created in this state.

const STATE_CONNECTING = 1 enum ConnectionState#

The peer is connecting, ICE is in progress, none of the transports has failed.

const STATE_CONNECTED = 2 enum ConnectionState#

The peer is connected, all ICE transports are connected.

const STATE_DISCONNECTED = 3 enum ConnectionState#

At least one ICE transport is disconnected.

const STATE_FAILED = 4 enum ConnectionState#

One or more of the ICE transports failed.

const STATE_CLOSED = 5 enum ConnectionState#

The peer connection is closed (after calling close for example).

const GATHERING_STATE_NEW = 0 enum GatheringState#

The peer connection was just created and hasn't done any networking yet.

const GATHERING_STATE_GATHERING = 1 enum GatheringState#

The ICE agent is in the process of gathering candidates for the connection.

const GATHERING_STATE_COMPLETE = 2 enum GatheringState#

The ICE agent has finished gathering candidates. If something happens that requires collecting new candidates, such as a new interface being added or the addition of a new ICE server, the state will revert to gathering to gather those candidates.

const SIGNALING_STATE_STABLE = 0 enum SignalingState#

There is no ongoing exchange of offer and answer underway. This may mean that the WebRTCPeerConnection is new (STATE_NEW) or that negotiation is complete and a connection has been established (STATE_CONNECTED).

const SIGNALING_STATE_HAVE_LOCAL_OFFER = 1 enum SignalingState#

The local peer has called set_local_description, passing in SDP representing an offer (usually created by calling create_offer), and the offer has been applied successfully.

const SIGNALING_STATE_HAVE_REMOTE_OFFER = 2 enum SignalingState#

The remote peer has created an offer and used the signaling server to deliver it to the local peer, which has set the offer as the remote description by calling set_remote_description.

const SIGNALING_STATE_HAVE_LOCAL_PRANSWER = 3 enum SignalingState#

The offer sent by the remote peer has been applied and an answer has been created and applied by calling set_local_description. This provisional answer describes the supported media formats and so forth, but may not have a complete set of ICE candidates included. Further candidates will be delivered separately later.

const SIGNALING_STATE_HAVE_REMOTE_PRANSWER = 4 enum SignalingState#

A provisional answer has been received and successfully applied in response to an offer previously sent and established by calling set_local_description.

const SIGNALING_STATE_CLOSED = 5 enum SignalingState#

The WebRTCPeerConnection has been closed.

Constructors #

Enums #

ConnectionState#

enum ConnectionState { STATE_NEW = 0, STATE_CONNECTING = 1, STATE_CONNECTED = 2, STATE_DISCONNECTED = 3, STATE_FAILED = 4, STATE_CLOSED = 5, }

GatheringState#

enum GatheringState { GATHERING_STATE_NEW = 0, GATHERING_STATE_GATHERING = 1, GATHERING_STATE_COMPLETE = 2, }

SignalingState#

enum SignalingState { SIGNALING_STATE_STABLE = 0, SIGNALING_STATE_HAVE_LOCAL_OFFER = 1, SIGNALING_STATE_HAVE_REMOTE_OFFER = 2, SIGNALING_STATE_HAVE_LOCAL_PRANSWER = 3, SIGNALING_STATE_HAVE_REMOTE_PRANSWER = 4, SIGNALING_STATE_CLOSED = 5, }

Operators #

Signals #

signal data_channel_received(channel: WebRTCDataChannel)#

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 create_data_channel.

signal ice_candidate_created(name: String)#

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.

signal session_description_created(sdp: String)#

Emitted after a successful call to create_offer or set_remote_description (when it generates an answer). The parameters are meant to be passed to set_local_description on this object, and sent to the remote peer over the signaling server.

Theme Items #

Tutorials #